public ActionResult <Action> Create(TransactionWallet transactionWallet) { var result = _transactionWalletService.Create(transactionWallet); if (result == null) { return(NotFound()); } return(Ok(result)); }
public override void SyncUpdate() { lock (AsyncElectrumScheduleService.Transactions) { AsyncElectrumScheduleService.SetStatus("Сверка транзакций из Electrum [" + AsyncElectrumScheduleService.Transactions.Count + " элементов] с базой данных"); bool exist_new_tx = false; foreach (TransactionWalletHistoryResponseClass TransactionWallet in AsyncElectrumScheduleService.Transactions.Where(x => x.confirmations > MinRequedCountConfirmations)) { if (string.IsNullOrWhiteSpace(TransactionWallet.txid)) { AsyncElectrumScheduleService.SetStatus("Прочитана транзакция из Electrum JSONRPC с пустым txid: " + TransactionWallet.ToString(), AbstractAsyncScheduler.StatusTypes.ErrorStatus); AsyncElectrumScheduleService.SetStatus("Транзакция с пустым txid будет пропущена"); continue; } BtcTransactionModel btcTransaction; try { btcTransaction = db.Set <BtcTransactionModel>().SingleOrDefault(x => x.TxId == TransactionWallet.txid); } catch (Exception e) { AsyncElectrumScheduleService.SetStatus("Ошибка поиска транзакции в БД SingleOrDefault(x => x.TxId == '" + TransactionWallet.txid + "')" + e.Message, AbstractAsyncScheduler.StatusTypes.ErrorStatus); AsyncElectrumScheduleService.SetStatus("Ошибочная транзакция будет пропущена"); continue; } if (btcTransaction is null) { exist_new_tx = true; AsyncElectrumScheduleService.SetStatus("Новая транзакция для записи в БД: " + TransactionWallet.ToString()); btcTransaction = new BtcTransactionModel() { TxId = TransactionWallet.txid, Sum = glob_tools.GetDoubleFromString(TransactionWallet.value) }; db.Add(btcTransaction); db.SaveChanges(); foreach (TransactionWalletHistoryResponseOutputsClass TransactionOut in TransactionWallet.outputs.Where(x => AsyncElectrumScheduleService.ElectrumClient?.IsAddressMine(x.address)?.result == true)) { AsyncElectrumScheduleService.SetStatus("Запись нового TxOut: " + TransactionOut.ToString()); BtcTransactionOutModel btcTransactionOut = new BtcTransactionOutModel() { BtcTransactionModelId = btcTransaction.Id, Sum = glob_tools.GetDoubleFromString(TransactionOut.value), Information = "txid:" + TransactionWallet.txid, Address = TransactionOut.address, IsMine = AsyncElectrumScheduleService.ElectrumClient.IsAddressMine(TransactionOut.address)?.result ?? false }; db.Add(btcTransactionOut); db.SaveChanges(); AsyncElectrumScheduleService.SetStatus("Поиск пользователя по BTC адресу > db.Users.SingleOrDefault(x => x.BitcoinAddress == '" + TransactionOut.address + "')"); UserModel user = db.Set <UserModel>().SingleOrDefault(x => x.BitcoinAddress == TransactionOut.address); if (!(user is null)) { AsyncElectrumScheduleService.SetStatus("Пользователь найден: " + user.ToString()); btcTransactionOut.UserId = user.Id; db.Update(btcTransactionOut); // ///int fiat_sum = (int)(btcTransactionOut.Sum * options.Value.CurrentBtcRate); user.BalanceBTC += btcTransactionOut.Sum; db.Update(user); string notify = "Пополнение /balance +" + string.Format("{0:F8}", Math.Round(btcTransactionOut.Sum, 8)) + "=" + user.BalanceBTC + " BTC"; db.Add(new eCommerceJournalModel() { BaseObjectId = btcTransactionOut.Id, TypeBaseObject = TypesBaseObject.TxOut, ClientId = user.Id, SumBTC = btcTransactionOut.Sum, Information = notify }); db.Add(new MessageModel() { Information = notify, SenderId = null, RecipientId = user.Id, NeedTelegramNotify = user.TelegramId != default });