CryptoCalc/DBClasses.cs

232 lines
7.2 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 string Amount { get; set; }
public string TransactionType { get; set; }
public string FeeCurrency { get; set; }
public string FeeAmount { get; set; }
public string Platform { get; set; }
public string Note { get; set; }
#endregion
#region Constructors
public Transaction() { SetDBStrings(); }
public Transaction(long walletID, string currency, string amount, string type)
{
SaveUnixTimeNow();
WalletID = walletID;
Currency = currency;
Amount = amount;
TransactionType = type;
Platform = "";
Note = "";
SetDBStrings();
}
public Transaction(string currency, string amount, string type, string feeCurrency, string feeAmount)
{
SaveUnixTimeNow();
Currency = currency;
Amount = amount.ToString(CultureInfo.InvariantCulture);
TransactionType = type;
FeeCurrency = feeCurrency;
FeeAmount = feeAmount.ToString(CultureInfo.InvariantCulture);
Platform = "";
Note = "";
SetDBStrings();
}
#endregion
#region Functions
private void SetDBStrings()
{
DBVariables =
$"@{nameof(WalletID)},"
+ $"@{nameof(UnixTime)},"
+ $"@{nameof(Currency)},"
+ $"@{nameof(Amount)},"
+ $"@{nameof(TransactionType)},"
+ $"@{nameof(FeeCurrency)},"
+ $"@{nameof(FeeAmount)},"
+ $"@{nameof(Platform)},"
+ $"@{nameof(Note)}";
}
public string FullInfo => $"{ Index } {WalletID} { GetLocalTimeFromUnixTime(UnixTime) } { Currency } { decimal.Parse(Amount, CultureInfo.InvariantCulture) } { 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)}\" TEXT NOT NULL,"
+ $"\"{nameof(TransactionType)}\" TEXT NOT NULL,"
+ $"\"{nameof(FeeCurrency)}\" TEXT,"
+ $"\"{nameof(FeeAmount)}\" TEXT,"
+ $"\"{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 ulong Balance { 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 = Util.ConvToLong(0M);
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(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)}\" TEXT NOT NULL,"
+ $"\"{nameof(DefaultWallet)}\" INTEGER,"
+ $"\"{nameof(Note)}\" TEXT,"
+ $"PRIMARY KEY(\"{nameof(Index)}\" AUTOINCREMENT)"
+ $"); ";
}
#endregion
}
}