public async Task SendTransferReplyAsync( string id, string destinationAddress, TransferReplyMessage.TransferReplyMessageCode code) { var transaction = await _transactionsRepository.GetAsync(id); if (transaction == null) { throw new NullReferenceException(); } if (transaction.Status != TransactionStatus.TransferRequested) { return; //todo: handle this case. } if (!_benefeciarySessionsDict.TryGetValue(transaction.SessionId, out var beneficiarySession)) { return; //todo: handle this case. } await beneficiarySession.TransferReplyAsync( TransferReplyMessage.Create( transaction.SessionId, code, destinationAddress)); if (code == TransferReplyMessage.TransferReplyMessageCode.TransferAccepted) { transaction.Status = TransactionStatus.TransferAllowed; transaction.DestinationAddress = destinationAddress; } else { transaction.Status = TransactionStatus.TransferForbidden; transaction.TransferDeclineCode = TransferReplyMessage.GetMessageCode(code); } await _transactionsRepository.UpdateAsync(transaction); }
public async Task <IActionResult> SendTransferReplyAsync( [FromRoute] string id, [FromQuery] TransferReplyMessage.TransferReplyMessageCode code, [FromQuery] string destinationAddress) { var validationErrorsDict = new Dictionary <string, string[]>(); if (string.IsNullOrWhiteSpace(id)) { validationErrorsDict.Add(nameof(id), new[] { $"{nameof(id)} is required" }); } if (string.IsNullOrWhiteSpace(destinationAddress) && code == TransferReplyMessage.TransferReplyMessageCode.TransferAccepted) { validationErrorsDict.Add(nameof(destinationAddress), new[] { $"{nameof(destinationAddress)} is required" }); } if (validationErrorsDict.Count > 0) { return(ValidationProblem(new ValidationProblemDetails(validationErrorsDict))); } try { await _transactionsManager.SendTransferReplyAsync( id, destinationAddress, code); } catch (NullReferenceException) { return(NotFound()); } var transaction = await _transactionsManager.GetAsync(id); return(Ok(_mapper.Map <TransactionDetailsModel>(transaction))); }