public async Task <OperationResult <UserLoginQueryResponse> > Handle(UserLoginQueryRequest request, CancellationToken cancellationToken) { var response = new UserLoginQueryResponse(request.MessageId); OperationResult <UserLoginQueryResponse> result; var user = await _dbContext.UserAccount.Include(f => f.SystemProfile).ThenInclude(g => g.SystemProfileFunction).SingleOrDefaultAsync(u => u.Username == request.TransferObject.Username, cancellationToken: cancellationToken); if (user.NotNull() && user.Password.NotNull()) { var hashedPassword = PasswordHelper.GenerateSaltedHash(request.TransferObject.Password, user.Salt); if (user.Password == hashedPassword) { response.Result.Email = user.Email; response.Result.UserAccountId = user.UserAccountId; response.Result.SystemFunctions = user.SystemProfile.SystemProfileFunction.Select(f => f.SystemFunctionId).ToList(); result = new OperationResult <UserLoginQueryResponse>(EnumOperationResult.Ok, null, response); result.AddDomainEvent(new UserLoginEvent { FirstName = response.Result.FirstName }); } else { result = new OperationResult <UserLoginQueryResponse>(EnumOperationResult.Forbidden); } } else { result = new OperationResult <UserLoginQueryResponse>(EnumOperationResult.NotFound); } return(result); }
public async Task <OperationResult <UserAddCommandResponse> > Handle(UserAddCommandRequest request, CancellationToken cancellationToken) { var response = new UserAddCommandResponse(request.MessageId); OperationResult <UserAddCommandResponse> result; var userAccount = await _dbContext.UserAccount.SingleOrDefaultAsync(u => u.Email == request.TransferObject.Email || u.ContactNumber == request.TransferObject.ContactNumber, cancellationToken : cancellationToken); if (userAccount.NotNull()) { result = new OperationResult <UserAddCommandResponse>(EnumOperationResult.Duplicate, new List <ValidationError> { new ValidationError(nameof(request.TransferObject.Email), "The User Email or Contact Number already exists") }); } else { userAccount = new UserAccount { Email = request.TransferObject.Email, FirstName = request.TransferObject.FirstName, LastName = request.TransferObject.LastName, UserStatusId = (int)UserStatus.Disabled, KnownAs = request.TransferObject.KnownAs, Username = request.TransferObject.Email, ContactNumber = request.TransferObject.ContactNumber, SystemProfileId = request.TransferObject.SystemProfileId }; await _dbContext.UserAccount.AddAsync(userAccount, cancellationToken); await _dbContext.SaveChangesAsync(cancellationToken); var token = new Token { Value = Guid.NewGuid(), CreatedDate = _clock.NowAsSouthAfrican, ExpiryDate = _clock.NowAsSouthAfrican.AddDays(1), TokenTypeId = (int)TokenType.SetPassword, UserId = userAccount.UserAccountId }; await _dbContext.Token.AddAsync(token, cancellationToken); await _dbContext.SaveChangesAsync(cancellationToken); response.UserAccountId = userAccount.UserAccountId; result = new OperationResult <UserAddCommandResponse>(EnumOperationResult.Ok, null, response); result.AddDomainEvent(new UserAddEvent { UserAccountId = response.UserAccountId, }); } return(result); }
public async Task <OperationResult <SysFunctionAddCommandResponse> > Handle(SysFunctionAddCommandRequest request, CancellationToken cancellationToken) { var response = new SysFunctionAddCommandResponse(request.MessageId); OperationResult <SysFunctionAddCommandResponse> result; //Validate Unique Name var function = await _dbContext.SystemFunction.SingleOrDefaultAsync(u => u.Name == request.TransferObject.Name); if (function.NotNull()) { result = new OperationResult <SysFunctionAddCommandResponse>(EnumOperationResult.Duplicate, new List <ValidationError> { new ValidationError(nameof(request.TransferObject.Name), "System Function Name already exists") }); } else { function = new SystemFunction { DisplayName = request.TransferObject.DisplayName, Name = request.TransferObject.Name, SystemFunctionGroupId = request.TransferObject.GroupId }; await _dbContext.SystemFunction.AddAsync(function, cancellationToken); await _dbContext.SaveChangesAsync(cancellationToken); result = new OperationResult <SysFunctionAddCommandResponse>(EnumOperationResult.Ok, null, response); result.AddDomainEvent(new SystemFunctionAddEvent { Id = response.FunctionId, }); } return(result); }