예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }