public async Task <IActionResult> GetCreditCardByAccountNo([FromRoute] string accountNo, CancellationToken cancellationToken = default) { var user = await _userManager.GetUserAsync(User); var customer = await _customerService.GetCustomerByAccountNoAsync(accountNo, cancellationToken); var apiResponse = new Response(); if (customer == null) { apiResponse.AddError(ExceptionCreator.CreateNotFoundError(nameof(customer))); return(NotFound(apiResponse)); } if (user.Id != customer?.Data?.UserId) { apiResponse.AddError(ExceptionCreator.CreateBadRequestError(nameof(user), "user is not authorized to complete this operation")); return(BadRequest(apiResponse)); } try { apiResponse = await _creditCardsService.GetCreditCardByAccountNoAsync(accountNo, cancellationToken); if (apiResponse.Success) { return(Ok(apiResponse)); } else if (apiResponse.Errors[0].Code == StatusCodes.Status404NotFound) { return(NotFound(apiResponse)); } return(BadRequest(apiResponse)); } catch (Exception exception) { return(_actionResultMapper.Map(exception)); } }
public async Task <IActionResult> AddCashTransactionWithCreditOrDebitCard([FromBody] CreateCashTransactionRequest request, CancellationToken cancellationToken = default) { try { var apiResponse = new Response(); if (!string.IsNullOrEmpty(request.CreditCardNo)) { var creditCard = await _creditCardsService.GetCreditCardByAccountNoAsync(request.CreditCardNo, cancellationToken); if (creditCard.Data == null) { apiResponse.AddError(ExceptionCreator.CreateNotFoundError($"Credit card No: {request.CreditCardNo} not found")); return(NotFound(apiResponse)); } if (request.PIN == null) { apiResponse.AddError(ExceptionCreator.CreateBadRequestError("PIN is not found ")); return(BadRequest(apiResponse)); } if (!await _creditCardsService.ValidateCreditCardPINAsync(request.CreditCardNo, request.PIN)) { apiResponse.AddError(ExceptionCreator.CreateBadRequestError($"Invalid PIN for Debit card of no: {request.DebitCardNo}")); return(BadRequest(apiResponse)); } } else if (!string.IsNullOrEmpty(request.DebitCardNo)) { var debitCard = await _debitCardsService.GetDebitCardByDebitCardNoAsync(request.DebitCardNo, cancellationToken); if (debitCard.Data == null) { apiResponse.AddError(ExceptionCreator.CreateNotFoundError($"Debit card No: {request.DebitCardNo} not found")); return(NotFound(apiResponse)); } if (request.PIN == null) { apiResponse.AddError(ExceptionCreator.CreateBadRequestError("PIN is not found ")); return(BadRequest(apiResponse)); } if (!await _debitCardsService.ValidateDebitCardPINAsync(request.DebitCardNo, request.PIN, cancellationToken)) { apiResponse.AddError(ExceptionCreator.CreateBadRequestError($"Invalid PIN for Debit card of no: {request.DebitCardNo}")); return(BadRequest(apiResponse)); } } switch (request.Type) { case CashTransactionType.Deposit: apiResponse = await _cashTransactionsService.MakeDepositAsync(request, cancellationToken); break; case CashTransactionType.Withdrawal: apiResponse = await _cashTransactionsService.MakeWithdrawalAsync(request, cancellationToken); break; case CashTransactionType.Transfer: apiResponse = await _cashTransactionsService.MakeTransferAsync(request, cancellationToken); break; case CashTransactionType.EFT: apiResponse = await _cashTransactionsService.MakeEFTTransferAsync(request, cancellationToken); break; } if (apiResponse.Success) { return(Ok(apiResponse)); } else if (apiResponse.Errors[0].Code == StatusCodes.Status404NotFound) { return(NotFound(apiResponse)); } else if (apiResponse.Errors[0].Code == StatusCodes.Status422UnprocessableEntity) { return(UnprocessableEntity(apiResponse)); } return(BadRequest(apiResponse)); } catch (Exception exception) { return(_actionResultMapper.Map(exception)); } }