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()); } }