241 lines
7.7 KiB
C#
241 lines
7.7 KiB
C#
using System;
|
|
using System.Globalization;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace CryptoCalc
|
|
{
|
|
|
|
public enum TransactionTypes
|
|
{
|
|
Buy,
|
|
Sell,
|
|
Transfer,
|
|
Mining
|
|
}
|
|
|
|
|
|
public interface IDBClasses
|
|
{
|
|
static string DBName { get; }
|
|
string DBTableName { get; }
|
|
string DBVariables { get; set; }
|
|
string DBSaveDataString { get; }
|
|
|
|
}
|
|
|
|
public class DBClasses : IDBClasses
|
|
{
|
|
#region Publics
|
|
public static string DBName => "CryptoCalc";
|
|
public virtual string DBTableName { get; }
|
|
public virtual string DBVariables { get; set; }
|
|
public string DBSaveDataString => $"({Regex.Replace(DBVariables, "@", "")}) values ({DBVariables})";
|
|
|
|
public long Index { get; set; }
|
|
public ulong UnixTime { get; set; }
|
|
|
|
|
|
#endregion
|
|
|
|
#region Functions
|
|
|
|
public void SaveUnixTimeNow()
|
|
{
|
|
UnixTime = (ulong)DateTime.UtcNow.Subtract(DateTime.UnixEpoch).TotalSeconds;
|
|
}
|
|
|
|
public static ulong GetUnixTime(DateTime dateTime)
|
|
{
|
|
return (ulong)dateTime.Subtract(DateTime.UnixEpoch).TotalSeconds;
|
|
}
|
|
|
|
public static DateTime GetUTCTimeFromUnixTime(ulong unix)
|
|
{
|
|
return DateTime.UnixEpoch.AddSeconds(unix).ToUniversalTime();
|
|
}
|
|
|
|
public static DateTime GetLocalTimeFromUnixTime(ulong unix)
|
|
{
|
|
return DateTime.UnixEpoch.AddSeconds(unix).ToLocalTime();
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
public class Transaction : DBClasses
|
|
{
|
|
|
|
#region Publics
|
|
public override string DBVariables { get => base.DBVariables; set => base.DBVariables = value; }
|
|
public override string DBTableName => "Transactions";
|
|
|
|
public long WalletID { get; set; }
|
|
public string Currency { get; set; }
|
|
public long Amount { get; set; }
|
|
public ulong AmountDecimal { get; set; }
|
|
public string TransactionType { get; set; }
|
|
public string FeeCurrency { get; set; }
|
|
public long FeeAmount { get; set; }
|
|
public ulong FeeAmountDecimal { get; set; }
|
|
public string Platform { get; set; }
|
|
public string Note { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region Constructors
|
|
|
|
public Transaction() { SetDBStrings(); }
|
|
|
|
public Transaction(long walletID, string currency, decimal amount, string type)
|
|
{
|
|
SaveUnixTimeNow();
|
|
WalletID = walletID;
|
|
Currency = currency;
|
|
(Amount, AmountDecimal) = Util.SplitDecimal(amount);
|
|
TransactionType = type;
|
|
|
|
Platform = "";
|
|
Note = "";
|
|
|
|
SetDBStrings();
|
|
}
|
|
|
|
public Transaction(string currency, decimal amount, string type, string feeCurrency, decimal feeAmount)
|
|
{
|
|
SaveUnixTimeNow();
|
|
Currency = currency;
|
|
(Amount, AmountDecimal) = Util.SplitDecimal(amount);
|
|
TransactionType = type;
|
|
FeeCurrency = feeCurrency;
|
|
(FeeAmount, FeeAmountDecimal) = Util.SplitDecimal(feeAmount);
|
|
Platform = "";
|
|
Note = "";
|
|
|
|
SetDBStrings();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Functions
|
|
|
|
private void SetDBStrings()
|
|
{
|
|
DBVariables =
|
|
$"@{nameof(WalletID)},"
|
|
+ $"@{nameof(UnixTime)},"
|
|
+ $"@{nameof(Currency)},"
|
|
+ $"@{nameof(Amount)},"
|
|
+ $"@{nameof(AmountDecimal)},"
|
|
+ $"@{nameof(TransactionType)},"
|
|
+ $"@{nameof(FeeCurrency)},"
|
|
+ $"@{nameof(FeeAmount)},"
|
|
+ $"@{nameof(FeeAmountDecimal)},"
|
|
+ $"@{nameof(Platform)},"
|
|
+ $"@{nameof(Note)}";
|
|
}
|
|
|
|
public string FullInfo => $"{ Index } {WalletID} { GetLocalTimeFromUnixTime(UnixTime) } { Currency } { Util.CombineDecimal(Amount, AmountDecimal) } { TransactionType }";
|
|
|
|
public string CreateTable(string walletTableName)
|
|
{
|
|
return
|
|
$"CREATE TABLE IF NOT EXISTS \"{DBTableName}\" ("
|
|
+ $"\"{nameof(Index)}\" INTEGER NOT NULL UNIQUE,"
|
|
+ $"\"{nameof(WalletID)}\" INTEGER NOT NULL,"
|
|
+ $"\"{nameof(UnixTime)}\" INTEGER NOT NULL,"
|
|
+ $"\"{nameof(Currency)}\" TEXT NOT NULL,"
|
|
+ $"\"{nameof(Amount)}\" INTEGER NOT NULL,"
|
|
+ $"\"{nameof(AmountDecimal)}\" INTEGER NOT NULL,"
|
|
+ $"\"{nameof(TransactionType)}\" TEXT NOT NULL,"
|
|
+ $"\"{nameof(FeeCurrency)}\" TEXT,"
|
|
+ $"\"{nameof(FeeAmount)}\" INTEGER,"
|
|
+ $"\"{nameof(FeeAmountDecimal)}\" INTEGER,"
|
|
+ $"\"{nameof(Platform)}\" TEXT,"
|
|
+ $"\"{nameof(Note)}\" TEXT,"
|
|
+ $"PRIMARY KEY(\"{nameof(Index)}\" AUTOINCREMENT),"
|
|
+ $"FOREIGN KEY(\"{nameof(WalletID)}\") REFERENCES \"{walletTableName}\"(\"{nameof(Index)}\")"
|
|
+ $"); ";
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
|
|
public class Wallet : DBClasses
|
|
{
|
|
#region Publics
|
|
public override string DBVariables { get => base.DBVariables; set => base.DBVariables = value; }
|
|
public override string DBTableName => "Wallets";
|
|
|
|
public ulong UnixTimeCreated { get; set; }
|
|
public string Platform { get; set; }
|
|
public string Name { get; set; }
|
|
public string Currency { get; set; }
|
|
public long Balance { get; set; }
|
|
public ulong BalanceDecimal { get; set; }
|
|
public int DefaultWallet { get; set; }
|
|
public string Note { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region Constructors
|
|
|
|
public Wallet() { SetDBStrings(); }
|
|
|
|
public Wallet(DateTime dateTime, string platform, string name, string currency, string note)
|
|
{
|
|
SaveUnixTimeNow();
|
|
UnixTimeCreated = GetUnixTime(dateTime);
|
|
Platform = platform;
|
|
Name = name;
|
|
Currency = currency;
|
|
(Balance, BalanceDecimal) = Util.SplitDecimal(0);
|
|
DefaultWallet = 0;
|
|
Note = note;
|
|
|
|
SetDBStrings();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Functions
|
|
|
|
private void SetDBStrings()
|
|
{
|
|
DBVariables =
|
|
$"@{nameof(UnixTime)},"
|
|
+ $"@{nameof(UnixTimeCreated)},"
|
|
+ $"@{nameof(Platform)},"
|
|
+ $"@{nameof(Name)},"
|
|
+ $"@{nameof(Currency)},"
|
|
+ $"@{nameof(Balance)},"
|
|
+ $"@{nameof(BalanceDecimal)},"
|
|
+ $"@{nameof(DefaultWallet)},"
|
|
+ $"@{nameof(Note)}";
|
|
}
|
|
|
|
//public string FullInfo => $"{ Index.ToString() } { DateTimeString } { Currency } { Amount } { TransactionType }";
|
|
|
|
public string CreateTable()
|
|
{
|
|
return
|
|
$"CREATE TABLE IF NOT EXISTS \"{DBTableName}\" ("
|
|
+ $"\"{nameof(Index)}\" INTEGER NOT NULL UNIQUE,"
|
|
+ $"\"{nameof(UnixTime)}\" INTEGER NOT NULL,"
|
|
+ $"\"{nameof(UnixTimeCreated)}\" INTEGER NOT NULL,"
|
|
+ $"\"{nameof(Platform)}\" TEXT,"
|
|
+ $"\"{nameof(Name)}\" TEXT,"
|
|
+ $"\"{nameof(Currency)}\" TEXT NOT NULL,"
|
|
+ $"\"{nameof(Balance)}\" INTEGER NOT NULL,"
|
|
+ $"\"{nameof(BalanceDecimal)}\" INTEGER NOT NULL,"
|
|
+ $"\"{nameof(DefaultWallet)}\" INTEGER,"
|
|
+ $"\"{nameof(Note)}\" TEXT,"
|
|
+ $"PRIMARY KEY(\"{nameof(Index)}\" AUTOINCREMENT)"
|
|
+ $"); ";
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
}
|