コード例 #1
0
        public int Insert(Data.UserMoneyTransfer transfer)
        {
            using (var connection = GetNewConnection())
            {
                try
                {
                    var parameters = new DynamicParameters(transfer);
                    parameters.Output(transfer, x => x.TransferId);

                    connection.Execute(SqlInsert, parameters);
                    return(transfer.TransferId);
                }
                catch (PostgresException ex)
                {
                    if (ex.SqlState != "23505")
                    {
                        throw;
                    }

                    var sql       = $"SELECT * FROM UserMoneyTransfer WHERE Reference = '{transfer.Reference}'";
                    var duplicate = connection.Query <Data.UserMoneyTransfer>(sql).Single();

                    if (transfer.UserId != duplicate.UserId || transfer.UserAccount != duplicate.UserAccount || transfer.Amount != duplicate.Amount || transfer.Currency != duplicate.Currency ||
                        transfer.Reference != duplicate.Reference)
                    {
                        throw;
                    }

                    throw new DuplicateException(ex.Message, ex.InnerException);
                }
            }
        }
コード例 #2
0
 public void UpdateStatus(Data.UserMoneyTransfer transfer, string newStatus)
 {
     transfer.Status = newStatus;
     using (var connection = GetNewConnection())
     {
         connection.Execute(SqlUpdateStatus, new { transfer.TransferId, Status = newStatus });
     }
 }
コード例 #3
0
        public void RegisterAcceptedOffer(Offer offer)
        {
            var transfer = new Data.UserMoneyTransfer
            {
                Currency      = offer.Currency.ToString(),
                Amount        = Math.Round(offer.BuySell == BuySell.Buy ? offer.Amount * offer.Price : -offer.Amount * offer.Price, 2),
                Reference     = offer.Reference,
                OpenTimestamp = offer.OpenTimeStamp,
                Status        = UserMoneyTransferStatus.New,
                UserId        = offer.UserId,
                UserAccount   = offer.UserAccount
            };

            try
            {
                _dalTransfer.Insert(transfer);
            }
            catch (DuplicateException)
            {
                // Duplication should mean service call is being repetead as a recovery from error on callers side.
                // So a duplication is OK (implies a caller's crash during or after previous successful call).
                return;
            }

            UserMoneyTransferGenerator.RegisterNewTransfer(transfer);



            //if (offer.BuySell == BuySell.Buy)
            //{
            //    var solaris = EuwaxData.Solaris;
            //    var data = new MoneyTransferData
            //    {
            //        FromSwift = solaris.SwiftCode,
            //        FromIban = "CustomerIBAN",
            //        ToSwift = solaris.SwiftCode,
            //        ToIban = solaris.GetAccount(offer.Currency).Iban,
            //        Amount = Math.Round(offer.Amount * offer.Price, 2)
            //    };
            //    Queue.Enqueue(new TransferFromCustomerTask(_dependencyFactory, this, data));
            //}
            //else
            //{
            //    var solaris = EuwaxData.Solaris;
            //    var data = new MoneyTransferData
            //    {
            //        FromSwift = solaris.SwiftCode,
            //        FromIban = solaris.GetAccount(offer.Currency).Iban,
            //        ToSwift = solaris.SwiftCode,
            //        ToIban = "CustomerIBAN",
            //        Amount = Math.Round(offer.Amount * offer.Price, 2)
            //    };
            //    Queue.Enqueue(new TransferToCustomerTask(_dependencyFactory, this, data));
            //}
        }