/// <summary> /// Creates a bank account /// </summary> /// <param name="bankAccount"></param> /// <returns></returns> public async Task <BankAccountDto> CreateAsync(NewBankAccountDto bankAccount) { var bankAccountEntity = _mapper.Map <BankAccount>(bankAccount); await using var dbTransaction = await _ctx.Database.BeginTransactionAsync(); var bankAccountNumber = await _ctx.BankAccountNumbers.FirstOrDefaultAsync(); if (bankAccountNumber == null) { _ctx.BankAccountNumbers.Add(new BankAccountNumber() { LastNumber = 1 }); } bankAccountNumber.LastNumber++; bankAccountNumber.GeneratedAt = DateTime.UtcNow; bankAccountEntity.Number = $"{bankAccountNumber.LastNumber:0000000000}"; bankAccountEntity.CreatedAt = DateTime.UtcNow; _ctx.BankAccounts.Add(bankAccountEntity); if (await _ctx.SaveChangesAsync() > 0) { await dbTransaction.CommitAsync(); return(_mapper.Map <BankAccountDto>(bankAccountEntity)); } return(null); }
public async Task <IActionResult> CreateAsync([FromBody] NewBankAccountDto newBankAccount) { if (await _bankAccountService.ExistsAsync(newBankAccount.CustomerId, newBankAccount.DisplayName)) { ModelState.AddModelError(nameof(newBankAccount.DisplayName), "Bank account display name is taken"); } if (!ModelState.IsValid) { return(ModelStateValidationBadRequest()); } var result = await _bankAccountService.CreateAsync(newBankAccount); if (result is null) { return(BadRequest(result)); } return(CreatedAtAction("Get", new { id = result.Number }, result)); }