Beispiel #1
0
        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);
        }
Beispiel #2
0
        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)));
        }