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