public IActionResult SaveTopUpAsync([FromBody] TopUpResource resource)
        {
            try
            {
                var userId = getUserIdFromAuthHeader();
                _logger.LogInformation("saveTopUp Request:" + JsonConvert.SerializeObject(resource));

                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState.GetErrorMessages()));
                }

                var result = _eWalletService.SaveTopUpAsync(resource, userId).GetAwaiter().GetResult();
                if (!result.BaseResponse.Success)
                {
                    return(BadRequest(result.BaseResponse.Message));
                }

                var eWalletResource = _mapper.Map <EWallet, TopUpDeductionResource>(result.EWallet);
                eWalletResource.TransactionId = resource.TransactionId;
                _logger.LogInformation("saveTopUp Response:" + JsonConvert.SerializeObject(eWalletResource));

                return(Ok(eWalletResource));
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
                Console.WriteLine(e);
                throw;
            }
        }
        public async Task <SaveTransactionResponse> SaveTopUpAsync(TopUpResource topUpResource, string userId)
        {
            try
            {
                var eWallet = await GenerateEWalletByTopUp(topUpResource, userId);

                await _unitOfWork.CompleteAsync();

                return(new SaveTransactionResponse(eWallet));
            }
            catch (Exception ex)
            {
                var errorMessage = string.Format(Constants.TopUpWrapperErrMsg, ex.Message);
                _logger.LogError(errorMessage);
                return(new SaveTransactionResponse(
                           errorMessage));
            }
        }
示例#3
0
        private async Task SaveFomoPayResponse(FomoPayResponse fomoPayResponse)
        {
            var topUpHistory = await _eWalletService.FindByTopUpTransactionIdAsync(fomoPayResponse.transaction);

            var initTransaction = topUpHistory.First(x => x.Status == Status.Init);

            if (initTransaction != null)
            {
                TopUpResource topUpResource = new TopUpResource
                {
                    TransactionId      = fomoPayResponse.transaction,
                    ActionDate         = DateTime.Now,
                    Status             = fomoPayResponse.result == "0" ? Status.Success : Status.Fail,
                    PaymentReferenceNo = fomoPayResponse.payment_id + '|' + fomoPayResponse.upstream + '|' +
                                         fomoPayResponse.nonce + '|' +
                                         fomoPayResponse.signature,
                    Amount          = initTransaction.Amount,
                    PaymentMerchant = initTransaction.PaymentMerchant
                };
                await _eWalletService.SaveTopUpAsync(topUpResource, initTransaction.UserId);
            }
        }
        private async Task <EWallet> GenerateEWalletByTopUp(TopUpResource topUpResource, string userId)
        {
            var eWallet = await _eWalletRepository.FindByUserIdAsync(userId);

            var isAddNewEWallet = false;

            if (eWallet == null)
            {
                eWallet = new EWallet
                {
                    UserId         = userId,
                    Balance        = topUpResource.Status == Status.Success ? topUpResource.Amount : 0,
                    TopUpHistories = new List <TopUpHistory>()
                };
                isAddNewEWallet = true;
            }
            else
            {
                if (ExistSuccessTopUpTransactionId(topUpResource.TransactionId, eWallet.TopUpHistories))
                {
                    throw new Exception(string.Format(Constants.TransactionIdExistsErrMsg,
                                                      topUpResource.TransactionId));
                }

                eWallet.Balance += topUpResource.Status == Status.Success ? topUpResource.Amount : 0;
            }

            var topUpHistory = _mapper.Map <TopUpResource, TopUpHistory>(topUpResource);

            topUpHistory.UserId = userId;
            eWallet.TopUpHistories.Add(topUpHistory);
            eWallet.LastUpdateDate = topUpHistory.ActionDate;
            _eWalletRepository.AddOrUpdateEWallet(eWallet, isAddNewEWallet);

            return(eWallet);
        }