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