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)) ); } } }
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))) ); } } }