コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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));
            }
        }