diff --git a/dotnet/AipsCore/Application/Models/User/Command/LogIn/LogInUserCommand.cs b/dotnet/AipsCore/Application/Models/User/Command/LogIn/LogInUserCommand.cs new file mode 100644 index 0000000..3a2312d --- /dev/null +++ b/dotnet/AipsCore/Application/Models/User/Command/LogIn/LogInUserCommand.cs @@ -0,0 +1,6 @@ +using AipsCore.Application.Abstract.Command; +using AipsCore.Application.Authentication; + +namespace AipsCore.Application.Models.User.Command.LogIn; + +public record LogInUserCommand(string Email, string Password) : ICommand; \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/User/Command/LogIn/LogInUserCommandHandler.cs b/dotnet/AipsCore/Application/Models/User/Command/LogIn/LogInUserCommandHandler.cs new file mode 100644 index 0000000..2316407 --- /dev/null +++ b/dotnet/AipsCore/Application/Models/User/Command/LogIn/LogInUserCommandHandler.cs @@ -0,0 +1,28 @@ +using AipsCore.Application.Abstract.Command; +using AipsCore.Application.Abstract.UserContext; +using AipsCore.Application.Authentication; +using AipsCore.Domain.Abstract; +using AipsCore.Domain.Models.User.External; + +namespace AipsCore.Application.Models.User.Command.LogIn; + +public class LogInUserCommandHandler : ICommandHandler +{ + private readonly IUserRepository _userRepository; + private readonly ITokenProvider _tokenProvider; + private readonly IUnitOfWork _unitOfWork; + + public LogInUserCommandHandler(IUserRepository userRepository, ITokenProvider tokenProvider, IUnitOfWork unitOfWork) + { + _userRepository = userRepository; + _tokenProvider = tokenProvider; + _unitOfWork = unitOfWork; + } + + public async Task Handle(LogInUserCommand command, CancellationToken cancellationToken = default) + { + var loginResult = await _userRepository.LoginWithEmailAndPasswordAsync(command.Email, command.Password, cancellationToken); + + return new Token(_tokenProvider.Generate(loginResult.User, loginResult.Roles)); + } +} \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/User/Command/SignUp/SignUpUserCommand.cs b/dotnet/AipsCore/Application/Models/User/Command/SignUp/SignUpUserCommand.cs new file mode 100644 index 0000000..4f742f0 --- /dev/null +++ b/dotnet/AipsCore/Application/Models/User/Command/SignUp/SignUpUserCommand.cs @@ -0,0 +1,9 @@ +using AipsCore.Application.Abstract.Command; +using AipsCore.Domain.Models.User.ValueObjects; + +namespace AipsCore.Application.Models.User.Command.SignUp; + +public record SignUpUserCommand( + string Username, + string Email, + string Password) : ICommand; \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/User/Command/SignUp/SignUpUserCommandHandler.cs b/dotnet/AipsCore/Application/Models/User/Command/SignUp/SignUpUserCommandHandler.cs new file mode 100644 index 0000000..722d811 --- /dev/null +++ b/dotnet/AipsCore/Application/Models/User/Command/SignUp/SignUpUserCommandHandler.cs @@ -0,0 +1,27 @@ +using AipsCore.Application.Abstract.Command; +using AipsCore.Domain.Abstract; +using AipsCore.Domain.Models.User.External; +using AipsCore.Domain.Models.User.ValueObjects; + +namespace AipsCore.Application.Models.User.Command.SignUp; + +public class SignUpUserCommandHandler : ICommandHandler +{ + private readonly IUserRepository _userRepository; + private readonly IUnitOfWork _unitOfWork; + + public SignUpUserCommandHandler(IUserRepository userRepository, IUnitOfWork unitOfWork) + { + _userRepository = userRepository; + _unitOfWork = unitOfWork; + } + + public async Task Handle(SignUpUserCommand command, CancellationToken cancellationToken = default) + { + var user = Domain.Models.User.User.Create(command.Email, command.Username); + + await _userRepository.SignUpWithPasswordAsync(user, command.Password, cancellationToken); + + return user.Id; + } +} \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Command/CreateWhiteboard/CreateWhiteboardCommand.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Command/CreateWhiteboard/CreateWhiteboardCommand.cs index 3916524..03d51f7 100644 --- a/dotnet/AipsCore/Application/Models/Whiteboard/Command/CreateWhiteboard/CreateWhiteboardCommand.cs +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Command/CreateWhiteboard/CreateWhiteboardCommand.cs @@ -6,7 +6,6 @@ using AipsCore.Domain.Models.Whiteboard.ValueObjects; namespace AipsCore.Application.Models.Whiteboard.Command.CreateWhiteboard; public record CreateWhiteboardCommand( - string OwnerId, string Title, int MaxParticipants, WhiteboardJoinPolicy JoinPolicy) diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Command/CreateWhiteboard/CreateWhiteboardCommandHandler.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Command/CreateWhiteboard/CreateWhiteboardCommandHandler.cs index 67adbae..4e69a6a 100644 --- a/dotnet/AipsCore/Application/Models/Whiteboard/Command/CreateWhiteboard/CreateWhiteboardCommandHandler.cs +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Command/CreateWhiteboard/CreateWhiteboardCommandHandler.cs @@ -1,4 +1,5 @@ using AipsCore.Application.Abstract.Command; +using AipsCore.Application.Abstract.UserContext; using AipsCore.Domain.Abstract; using AipsCore.Domain.Models.Whiteboard.External; using AipsCore.Domain.Models.Whiteboard.ValueObjects; @@ -8,20 +9,24 @@ namespace AipsCore.Application.Models.Whiteboard.Command.CreateWhiteboard; public class CreateWhiteboardCommandHandler : ICommandHandler { private readonly IWhiteboardRepository _whiteboardRepository; + private readonly IUserContext _userContext; private readonly IUnitOfWork _unitOfWork; - - public CreateWhiteboardCommandHandler(IWhiteboardRepository whiteboardRepository, IUnitOfWork unitOfWork) + + public CreateWhiteboardCommandHandler(IWhiteboardRepository whiteboardRepository, IUserContext userContext, IUnitOfWork unitOfWork) { _whiteboardRepository = whiteboardRepository; + _userContext = userContext; _unitOfWork = unitOfWork; } public async Task Handle(CreateWhiteboardCommand command, CancellationToken cancellationToken = default) { var whiteboardCode = await WhiteboardCode.GenerateUniqueAsync(_whiteboardRepository); + + var ownerId = _userContext.GetCurrentUserId(); var whiteboard = Domain.Models.Whiteboard.Whiteboard.Create( - command.OwnerId, + ownerId.IdValue, whiteboardCode.CodeValue, command.Title, command.MaxParticipants,