diff --git a/dotnet/AipsCore/Application/Models/WhiteboardMembership/Command/CreateWhiteboardMembership/CreateWhiteboardMembershipCommand.cs b/dotnet/AipsCore/Application/Models/WhiteboardMembership/Command/CreateWhiteboardMembership/CreateWhiteboardMembershipCommand.cs new file mode 100644 index 0000000..00b0665 --- /dev/null +++ b/dotnet/AipsCore/Application/Models/WhiteboardMembership/Command/CreateWhiteboardMembership/CreateWhiteboardMembershipCommand.cs @@ -0,0 +1,13 @@ +using AipsCore.Application.Abstract.Command; +using AipsCore.Domain.Models.WhiteboardMembership.ValueObjects; + +namespace AipsCore.Application.Models.WhiteboardMembership.Command.CreateWhiteboardMembership; + +public record CreateWhiteboardMembershipCommand( + string WhiteboardId, + string UserId, + bool IsBanned, + bool EditingEnabled, + bool CanJoin, + DateTime LastInteractedAt) + : ICommand; \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/WhiteboardMembership/Command/CreateWhiteboardMembership/CreateWhiteboardMembershipCommandHandler.cs b/dotnet/AipsCore/Application/Models/WhiteboardMembership/Command/CreateWhiteboardMembership/CreateWhiteboardMembershipCommandHandler.cs new file mode 100644 index 0000000..127419f --- /dev/null +++ b/dotnet/AipsCore/Application/Models/WhiteboardMembership/Command/CreateWhiteboardMembership/CreateWhiteboardMembershipCommandHandler.cs @@ -0,0 +1,34 @@ +using AipsCore.Application.Abstract.Command; +using AipsCore.Domain.Abstract; +using AipsCore.Domain.Models.WhiteboardMembership.External; +using AipsCore.Domain.Models.WhiteboardMembership.ValueObjects; + +namespace AipsCore.Application.Models.WhiteboardMembership.Command.CreateWhiteboardMembership; + +public class CreateWhiteboardMembershipCommandHandler : ICommandHandler +{ + private readonly IWhiteboardMembershipRepository _whiteboardMembershipRepository; + private readonly IUnitOfWork _unitOfWork; + + public CreateWhiteboardMembershipCommandHandler(IWhiteboardMembershipRepository whiteboardMembershipRepository, IUnitOfWork unitOfWork) + { + _whiteboardMembershipRepository = whiteboardMembershipRepository; + _unitOfWork = unitOfWork; + } + + public async Task Handle(CreateWhiteboardMembershipCommand command, CancellationToken cancellationToken = default) + { + var whiteboardMembership = Domain.Models.WhiteboardMembership.WhiteboardMembership.Create( + command.WhiteboardId, + command.UserId, + command.IsBanned, + command.EditingEnabled, + command.CanJoin, + command.LastInteractedAt); + + await _whiteboardMembershipRepository.Save(whiteboardMembership, cancellationToken); + await _unitOfWork.SaveChangesAsync(cancellationToken); + + return whiteboardMembership.Id; + } +} \ No newline at end of file