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