133 lines
6.4 KiB
C#
133 lines
6.4 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Knoks.Core.Data.Dao;
|
|
using Knoks.Core.Data.Interfaces;
|
|
using Knoks.Core.Entities;
|
|
using Knoks.Core.Entities.Args.AccountTransactions;
|
|
using Knoks.Core.Entities.Settings;
|
|
using Knoks.Core.Logic.Interfaces;
|
|
using Knoks.Framework.Services;
|
|
using AccountTransactionType = Knoks.Core.Entities.Args.AccountTransactions.AccountTransactionType;
|
|
|
|
namespace Knoks.Core.Logic.Managers
|
|
{
|
|
public class AccountTransactionManager : IAccountTransactionManager
|
|
{
|
|
private readonly IUserManager _userManager;
|
|
private readonly IAccountTransactionDao _accountTransactionsDao;
|
|
|
|
public AccountTransactionManager(IUserManager userManager, IAccountTransactionDao accountTransactionsDao)
|
|
{
|
|
_userManager = userManager ?? throw new ArgumentNullException(nameof(userManager));
|
|
_accountTransactionsDao = accountTransactionsDao ?? throw new ArgumentNullException(nameof(accountTransactionsDao));
|
|
}
|
|
|
|
public async Task<AccountTransaction> GetLatestDepositEvent()
|
|
{
|
|
return await _accountTransactionsDao.GetLatestEvent(AccountTransactionType.Deposit);
|
|
}
|
|
|
|
private async Task TransferMoney(User fromUser, Account fromAccount, User toUser, Account toAccount, long? knokId, decimal amount, decimal? amountUsd,
|
|
AccountTransactionType transactionType, string comment = null)
|
|
{
|
|
var fromArgs = new AccountSetBalanceArgs()
|
|
{
|
|
AccountId = fromAccount.AccountId,
|
|
Amount = amount,
|
|
AmountUSD = amountUsd,
|
|
Comment = comment,
|
|
UserId = fromUser.UserId,
|
|
WalletAddress = fromAccount.WalletAddress,
|
|
AccountTransactionTypeId = (short)transactionType
|
|
};
|
|
|
|
var toArgs = new AccountSetBalanceArgs()
|
|
{
|
|
AccountId = toAccount.AccountId,
|
|
Amount = amount,
|
|
AmountUSD = amountUsd,
|
|
Comment = comment,
|
|
UserId = toUser.UserId,
|
|
WalletAddress = toAccount.WalletAddress,
|
|
AccountTransactionTypeId = (short)transactionType
|
|
};
|
|
|
|
await _accountTransactionsDao.TransferMoney(fromArgs, toArgs, knokId);
|
|
}
|
|
|
|
private async Task ExternalTransferMoney(User fromUser, Account fromAccount, User toUser, Account toAccount, decimal amount, decimal? amountUsd,
|
|
string comment, string externalReferenceId)
|
|
{
|
|
var fromArgs = new AccountSetBalanceArgs()
|
|
{
|
|
AccountId = fromAccount.AccountId,
|
|
Amount = amount,
|
|
AmountUSD = amountUsd,
|
|
Comment = comment,
|
|
ExternalReferenceId = externalReferenceId,
|
|
UserId = fromUser.UserId,
|
|
WalletAddress = fromAccount.WalletAddress,
|
|
AccountTransactionTypeId = (short)AccountTransactionType.Withdraw
|
|
};
|
|
|
|
var toArgs = new AccountSetBalanceArgs()
|
|
{
|
|
AccountId = toAccount.AccountId,
|
|
Amount = amount,
|
|
AmountUSD = amountUsd,
|
|
Comment = comment,
|
|
ExternalReferenceId = externalReferenceId,
|
|
UserId = toUser.UserId,
|
|
WalletAddress = toAccount.WalletAddress,
|
|
AccountTransactionTypeId = (short)AccountTransactionType.Deposit
|
|
};
|
|
|
|
await _accountTransactionsDao.TransferMoney(fromArgs, toArgs, null);
|
|
}
|
|
|
|
//public async Task ExecutePublishKnokTransaction(User knokerUser, Account knokerAccount, long knokId, decimal amount,
|
|
// decimal? amountUsd = null)
|
|
//{
|
|
// await TransferMoney(knokerUser, knokerAccount, _platformUser, _platformUserAccount, knokId, amount, amountUsd, AccountTransactionType.PublishKnok);
|
|
//}
|
|
|
|
//public async Task ActivateFreeCredit(User targetUser, Account targetUserAccount)
|
|
//{
|
|
// await TransferMoney(_userManager.PlatformUser, _userManager.PlatformUserAccount, targetUser, targetUserAccount, null, _settings.NewUserFreeCreditAmount, null, AccountTransactionType.FreeTokensCredit);
|
|
//}
|
|
|
|
public async Task Transfer(User fromUser, Account fromUserAccount, User toUser, Account toUserAccount, decimal amount, decimal? amountUsd,
|
|
string externalReferenceId, ulong blockNumber)
|
|
{
|
|
await ExternalTransferMoney(fromUser, fromUserAccount, toUser, toUserAccount, amount, amountUsd, blockNumber.ToString(), externalReferenceId);
|
|
}
|
|
|
|
//public async Task Deposit(User targetUser, Account targetUserAccount, decimal amount, decimal amountUsd, string externalReferenceId, ulong blockNumber, int? operatorId = null)
|
|
//{
|
|
// await TransferMoney(_userManager.PlatformUser, _userManager.PlatformUserAccount, targetUser, targetUserAccount, null, amount, amountUsd, AccountTransactionType.Deposit,
|
|
// blockNumber.ToString(), externalReferenceId);
|
|
//}
|
|
|
|
//public async Task Withdraw(User targetUser, Account targetUserAccount, decimal amount, decimal amountUsd, string externalReferenceId, ulong blockNumber, int? operatorId = null)
|
|
//{
|
|
// await TransferMoney(targetUser, targetUserAccount, _userManager.PlatformUser, _userManager.PlatformUserAccount, null, amount, amountUsd, AccountTransactionType.Withdraw,
|
|
// blockNumber.ToString(), externalReferenceId);
|
|
//}
|
|
|
|
//public async Task ExecuteKnokerWinsKnokTransaction(User knokerUser, Account knokerAccount, decimal amount, decimal? amountUsd = null)
|
|
//{
|
|
// await TransferMoney(_platformUser, _platformUserAccount, knokerUser, knokerAccount, amount, amountUsd, AccountTransactionType.KnokerWinsToken);
|
|
//}
|
|
|
|
//public async Task ExecuteUserBuyKnokTransaction(User user, Account account, long knokId, decimal amount, decimal? amountUsd = null)
|
|
//{
|
|
// await TransferMoney(user, account, _platformUser, _platformUserAccount, knokId, amount, amountUsd, AccountTransactionType.UserBuyKnok);
|
|
//}
|
|
|
|
//public async Task ExecuteUserRefundFailedKnokTransaction(User user, Account account, decimal amount, decimal? amountUsd = null)
|
|
//{
|
|
// await TransferMoney(_platformUser, _platformUserAccount, user, account, amount, amountUsd, AccountTransactionType.UserRefundToken);
|
|
//}
|
|
}
|
|
} |