예제 #1
0
        public void TransferMoneyToUserByNumber(IClient sender, string senderAccId, long phoneNumber, decimal moneyAmount)
        {
            var userBankAccId = BankAccountManagement.GetUserBankAccId(senderAccId);

            // тут может вылететь эксепшен, CAREFUL!!!
            long recieverId = FindUserByNumber(DBConnect.GetConnection(), phoneNumber);

            decimal senderCash = 0;

            var database   = DBConnect.GetConnection().GetDatabase("bank");
            var collection = database.GetCollection <BsonDocument>("bank_account");

            // надо найти крч баланс аккаунта выбранного счета клиента (у него может быть несколько счетов
            // но на один счет приходится лишь один банковский аккаунт)
            var filter = new BsonDocument("_id", new ObjectId(userBankAccId));
            var cursor = collection.FindSync <BsonDocument>(filter);

            // мб чет неправильно делаю, но работает, так что в пизду..
            while (cursor.MoveNext())
            {
                var accounts = cursor.Current;

                foreach (var account in accounts)
                {
                    // запомним изначальный баланс
                    senderCash = decimal.Parse(account.GetValue("balance").ToString(), CultureInfo.InvariantCulture);
                    // обновим таблицу в бд вычев из баланса сумму, которую клиент переводит другому клиенту
                    collection.UpdateOne
                    (
                        new BsonDocument("_id", new ObjectId(userBankAccId)),
                        new BsonDocument("$set", new BsonDocument("balance", senderCash - moneyAmount))
                    );
                }
            }
        }
예제 #2
0
        public void TransferMoneyToUserByCardNumber(IClient sender, string senderAccId, long recieverCardNumber, decimal moneyAmount)
        {
            var userBankAccId = BankAccountManagement.GetUserBankAccId(senderAccId);

            // тут может вылететь сразу НЕСКОЛЬКО эксепшенов, CAREFUL!!!
            // запишем в блокнотик id получателя и id его банковского акк, куда привязана карта
            // long recieverId = FindUserByCardNumber(DBConnect.GetConnection(), recieverCardNumber, out recieverBankAccId);

            decimal senderCash   = 0;
            decimal recieverCash = 0;

            var database   = DBConnect.GetConnection().GetDatabase("bank");
            var collection = database.GetCollection <BsonDocument>("bank_account");

            // надо найти крч баланс аккаунта выбранного счета клиента (у него может быть несколько счетов
            // но на один счет приходится лишь один банковский аккаунт)
            var filter = new BsonDocument("_id", new ObjectId(senderAccId));
            var cursor = collection.FindSync <BsonDocument>(filter);

            // СНИМАЕМ БАБКИ СО СЧЕТА ОТПРАВИТЕЛЯ
            // мб чет неправильно делаю, но работает, так что в пизду..
            while (cursor.MoveNext())
            {
                var accounts = cursor.Current;

                if (accounts.Count() == 0)
                {
                    throw new Exception("Пользватель с такой картой не зарегистрирован");
                }

                foreach (var account in accounts)
                {
                    // запомним изначальный баланс
                    senderCash = decimal.Parse(account.GetValue("balance").ToString(), CultureInfo.InvariantCulture);

                    if (senderCash < moneyAmount)
                    {
                        throw new Exception("Недостаток средств на счету");
                    }

                    decimal result = senderCash - moneyAmount;

                    // обновим таблицу в бд вычтев из баланса сумму, которую клиент переводит другому клиенту
                    collection.UpdateOne
                    (
                        new BsonDocument("_id", new ObjectId(senderAccId)),
                        new BsonDocument("$set", new BsonDocument("balance", Convert.ToDecimal(result, CultureInfo.InvariantCulture)))
                    );
                }
            }

            collection = database.GetCollection <BsonDocument>("card");
            filter     = new BsonDocument("CardNumber", recieverCardNumber);
            cursor     = collection.FindSync <BsonDocument>(filter);

            // ЗАЧИСЛЯЕМ БАБКИ ПОЛУЧАТЕЛЮ
            while (cursor.MoveNext())
            {
                var accounts = cursor.Current;

                if (accounts.Count() == 0)
                {
                    throw new Exception("Пользователь с такой картой не зарегистрирован");
                }

                foreach (var account in accounts)
                {
                    // запомним изначальный баланс
                    recieverCash = decimal.Parse(account.GetValue("Balance").ToString(), CultureInfo.InvariantCulture);

                    decimal result = recieverCash + moneyAmount;
                    // обновим таблицу в бд, добавив к начальнйо сумме сумму перевода
                    collection.UpdateOne
                    (
                        new BsonDocument("CardNumber", recieverCardNumber),
                        new BsonDocument("$set", new BsonDocument("Balance", Convert.ToDecimal(result, CultureInfo.InvariantCulture)))
                    );
                }
            }
        }