Example #1
0
        public async Task <IActionResult> WalletTransfer([FromBody] SendPaymentDto sendPaymentDto)
        {
            double balance = 0d;

            try
            {
                var sent = await actorService
                           .MasterKey(sendPaymentDto.Credentials.Password.ToSecureString())
                           .Identifier(sendPaymentDto.Credentials.Identifier.ToSecureString())
                           .Amount(sendPaymentDto.Amount)
                           .ToAddress(sendPaymentDto.ToAddress)
                           .Memo(sendPaymentDto.Memo)
                           .SendPayment();

                if (sent.Equals(false))
                {
                    var failedMessage = JsonConvert.SerializeObject(actorService.GetLastError().GetValue("message"));
                    return(new ObjectResult(new { error = failedMessage, statusCode = 500 }));
                }

                if (sendPaymentDto.CreateRedemptionKey)
                {
                    var message = await actorService.SendPaymentMessage(false);

                    var notification = message.GetValue("message").ToObject <MessageDto>();

                    return(new OkObjectResult(new { message = notification }));
                }
                else
                {
                    var networkMessage = await actorService.SendPaymentMessage(true);

                    var success = networkMessage.GetValue("success").ToObject <bool>();

                    if (success.Equals(false))
                    {
                        return(new ObjectResult(new { error = JsonConvert.SerializeObject(networkMessage.GetValue("message")), statusCode = 500 }));
                    }

                    balance = await actorService.CheckBalance();
                }
            }
            catch (Exception ex)
            {
                balance = await actorService.CheckBalance();

                return(new ObjectResult(new { error = ex.Message, statusCode = 500, balance = balance }));
            }

            return(new OkObjectResult(new { balance = balance }));
        }
Example #2
0
        public async Task <IActionResult> WalletTransfer([FromBody] SendPaymentDto sendPaymentDto)
        {
            TaskResult <ulong> availBalance;

            var session = new Session(sendPaymentDto.Credentials.Identifier.ToSecureString(), sendPaymentDto.Credentials.Password.ToSecureString())
            {
                Amount           = sendPaymentDto.Amount.ConvertToUInt64(),
                ForwardMessage   = sendPaymentDto.CreateRedemptionKey,
                Memo             = sendPaymentDto.Memo,
                RecipientAddress = sendPaymentDto.Address
            };

            try
            {
                await actorService.Tansfer(session);

                if (actorService.State != State.Committed)
                {
                    session = actorService.GetSession(session.SessionId);
                    var failedMessage = JsonConvert.SerializeObject(session.LastError.GetValue("message"));
                    return(new ObjectResult(new { error = failedMessage, statusCode = 500 }));
                }

                session = actorService.GetSession(session.SessionId);

                var messageStore = await unitOfWork
                                   .GetRedemptionRepository()
                                   .Get(session, StoreKey.TransactionIdKey, session.SessionId.ToString());

                availBalance = await walletService.AvailableBalance(session.Identifier, session.MasterKey);

                if (sendPaymentDto.CreateRedemptionKey)
                {
                    return(new OkObjectResult(new { message = messageStore.Result.Message }));
                }
            }
            catch (Exception ex)
            {
                availBalance = await walletService.AvailableBalance(session.Identifier, session.MasterKey);

                return(new ObjectResult(new { error = ex.Message, statusCode = 500, balance = availBalance.Result }));
            }

            return(new OkObjectResult(new { balance = availBalance.Result }));
        }