예제 #1
0
        public async Task <IResult <DepositModel> > Deposit(DepositModel movementModel)
        {
            try
            {
                if (movementModel.Amount <= 0)
                {
                    return(Result <DepositModel> .BuildError("Favor inserir um valor válido.").LoggerError());
                }

                var account = await _sharedService.AccountValidate(movementModel.Cpf, movementModel.Password);

                if (!account.Success)
                {
                    return(Result <DepositModel> .BuildError(account.Messages).LoggerError());
                }

                var result = new Result <DepositModel>();
                var exist  = await _movementService.ExistDeposit(account.Model.Id);

                decimal bonus = 0;
                if (!exist)
                {
                    bonus = movementModel.Amount.GetPercentage(10);
                    result.AddMessage("Parábens você acabou de realizar seu primeiro depósito," +
                                      $" você recebeu 10% do valor a título de boas vindas!");
                }
                account.Model.Balance += (movementModel.Amount + bonus);
                await _movementService.CreateMovement(movementModel.Amount, MovementType.Deposit,
                                                      account.Model, account.Model.Balance, bonus : bonus);

                await _accountRepository.SaveAsync();

                return(result.AddSuccess(movementModel, "Depósito realizado com sucesso!"));
            }
            catch (Exception error)
            {
                return(Result <DepositModel> .BuildError("Erro ao realizar desosito, favor tente novamento", error)
                       .LoggerError());
            }
        }