Exemplo n.º 1
0
        public async Task <decimal> WithdrawCurrencyAccountAsync(WithdrawCurrencyDTO request)
        {
            var currencyAccount = await DbContext.CurrencyAccounts
                                  .Include(nameof(CurrencyAccount.Holder))
                                  .FirstOrDefaultAsync(acc => acc.Number == request.CurrencyAccount && acc.Holder.PINCode == request.PinCode);

            if (currencyAccount == null)
            {
                throw new AccountNotFoundException();
            }

            if (currencyAccount.Debit < request.Sum)
            {
                throw new InsufficientFundException();
            }

            currencyAccount.Debit -= request.Sum;

            try
            {
                DbContext.Update(currencyAccount);
                await DbContext.SaveChangesAsync();

                return(currencyAccount.Debit);
            }
            catch (DbUpdateConcurrencyException ex)
            {
                throw new ConcurrencyException();
            }
        }
Exemplo n.º 2
0
        public async Task <IActionResult> WithdrawCurrencyAccount(string accountNumber, [FromBody] WithdrawCurrencyDTO request)
        {
            if (string.IsNullOrEmpty(accountNumber) ||
                accountNumber != request.CurrencyAccount)
            {
                ModelState.AddModelError("", AccountNotFoundException.DefaultErrorMessage);
                return(BadRequest(ModelState));
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            try
            {
                var result = await PocketService.WithdrawCurrencyAccountAsync(request);

                return(new JsonResult(result));
            }
            catch (Exception ex)
            {
                return(HandleException(ex));
            }
        }