diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Query/GetMembershipStatus/GetMembershipStatusQuery.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Query/GetMembershipStatus/GetMembershipStatusQuery.cs new file mode 100644 index 0000000..18cd305 --- /dev/null +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Query/GetMembershipStatus/GetMembershipStatusQuery.cs @@ -0,0 +1,6 @@ +using AipsCore.Application.Abstract.Query; +using AipsCore.Domain.Models.WhiteboardMembership.Enums; + +namespace AipsCore.Application.Models.Whiteboard.Query.GetMembershipStatus; + +public record GetMembershipStatusQuery(string WhiteboardId, string UserId): IQuery; \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Query/GetMembershipStatus/GetMembershipStatusQueryHandler.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Query/GetMembershipStatus/GetMembershipStatusQueryHandler.cs new file mode 100644 index 0000000..7352fac --- /dev/null +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Query/GetMembershipStatus/GetMembershipStatusQueryHandler.cs @@ -0,0 +1,34 @@ +using AipsCore.Application.Abstract.Query; +using AipsCore.Domain.Common.Validation; +using AipsCore.Domain.Models.User.ValueObjects; +using AipsCore.Domain.Models.Whiteboard.ValueObjects; +using AipsCore.Domain.Models.WhiteboardMembership.Enums; +using AipsCore.Domain.Models.WhiteboardMembership.External; +using AipsCore.Domain.Models.WhiteboardMembership.Validation; + +namespace AipsCore.Application.Models.Whiteboard.Query.GetMembershipStatus; + +public class GetMembershipStatusQueryHandler : IQueryHandler +{ + private readonly IWhiteboardMembershipRepository _whiteboardMembershipRepository; + + public GetMembershipStatusQueryHandler(IWhiteboardMembershipRepository whiteboardMembershipRepository) + { + _whiteboardMembershipRepository = whiteboardMembershipRepository; + } + + public async Task Handle(GetMembershipStatusQuery query, CancellationToken cancellationToken = default) + { + var userId = new UserId(query.UserId); + var whiteboardId = new WhiteboardId(query.WhiteboardId); + + var membership = await _whiteboardMembershipRepository.GetByWhiteboardAndUserAsync(whiteboardId, userId, cancellationToken); + + if (membership is null) + { + throw new ValidationException(WhiteboardMembershipErrors.NotFound(whiteboardId, userId)); + } + + return membership.Status; + } +} \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Query/GetRecentWhiteboards/GetRecentWhiteboardsQueryHandler.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Query/GetRecentWhiteboards/GetRecentWhiteboardsQueryHandler.cs index 23ddb96..5d11f4f 100644 --- a/dotnet/AipsCore/Application/Models/Whiteboard/Query/GetRecentWhiteboards/GetRecentWhiteboardsQueryHandler.cs +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Query/GetRecentWhiteboards/GetRecentWhiteboardsQueryHandler.cs @@ -1,6 +1,7 @@ using AipsCore.Application.Abstract.Query; using AipsCore.Application.Abstract.UserContext; using AipsCore.Domain.Models.Whiteboard.Enums; +using AipsCore.Domain.Models.WhiteboardMembership.Enums; using AipsCore.Infrastructure.Persistence.Db; using Microsoft.EntityFrameworkCore; @@ -32,7 +33,7 @@ public class GetRecentWhiteboardsQueryHandler : IQueryHandler m.Whiteboard) .Where(m => ( m.UserId == userIdGuid && - m.IsBanned == false && + m.Status != WhiteboardMembershipStatus.Banned && m.Whiteboard != null && m.Whiteboard.State != WhiteboardState.Deleted ))