private async Task <EWallet> GenerateEWalletForTransactionStatusUpdate(TransactionStatusResource resource) { var existingTopUpHistoryList = await FindByTopUpTransactionIdAsync(resource.TransactionId); if (!existingTopUpHistoryList.Any()) { var errorMessage = string.Format(Constants.TransactionIdNotExists, resource.TransactionId); throw new Exception(errorMessage); } var existingTopUpHistory = existingTopUpHistoryList.OrderByDescending(p => p.ActionDate).FirstOrDefault(); var eWallet = await _eWalletRepository.FindByUserIdAsync(existingTopUpHistory.UserId); if (ExistSuccessTopUpTransactionId(resource.TransactionId, eWallet.TopUpHistories)) { return(eWallet); } var topUpHistory = eWallet.TopUpHistories.OrderByDescending(p => p.ActionDate).FirstOrDefault(); eWallet.Balance += resource.Status == Status.Success ? existingTopUpHistory.Amount : 0; eWallet.LastUpdateDate = resource.ActionDate; topUpHistory.Status = resource.Status; topUpHistory.ActionDate = resource.ActionDate; _eWalletRepository.AddOrUpdateEWallet(eWallet, false); return(eWallet); }
public async Task <SaveTransactionResponse> SaveTopUpTransactionStatus(TransactionStatusResource resource) { try { var eWallet = await GenerateEWalletForTransactionStatusUpdate(resource); 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)); } }
public IActionResult UpdateTopUpStatus([FromBody] TransactionStatusResource resource) { _logger.LogInformation("updateTopUpStatus Request:" + JsonConvert.SerializeObject(resource)); if (!ModelState.IsValid) { return(BadRequest(ModelState.GetErrorMessages())); } var result = _eWalletService.SaveTopUpTransactionStatus(resource).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("updateTopUpStatus Response:" + JsonConvert.SerializeObject(eWalletResource)); return(Ok(eWalletResource)); }