diff --git a/CryptoCalc.db b/CryptoCalc.db index fe2f8e2..db156a6 100644 Binary files a/CryptoCalc.db and b/CryptoCalc.db differ diff --git a/DBClasses.cs b/DBClasses.cs index a59e5fe..81f472c 100644 --- a/DBClasses.cs +++ b/DBClasses.cs @@ -6,16 +6,17 @@ namespace CryptoCalc public interface IDBClasses { - string DBName { get; } + static string DBName { get; } string DBTableName { get; } string DBVariables { get; set; } string DBSaveDataString { get; } + } public class DBClasses : IDBClasses { #region Publics - public string DBName => "CryptoCalc"; + public static string DBName => "CryptoCalc"; public virtual string DBTableName { get; } public virtual string DBVariables { get; set; } public string DBSaveDataString => $"({Regex.Replace(DBVariables, "@", "")}) values ({DBVariables})"; @@ -59,6 +60,7 @@ namespace CryptoCalc public override string DBVariables { get => base.DBVariables; set => base.DBVariables = value; } public override string DBTableName => "Transactions"; + public int WalletID { get; set; } public string Currency { get; set; } public float Amount { get; set; } public string TransactionType { get; set; } @@ -107,7 +109,8 @@ namespace CryptoCalc private void SetDBStrings() { DBVariables = - $"@{nameof(UnixTime)}," + $"@{nameof(WalletID)}," + + $"@{nameof(UnixTime)}," + $"@{nameof(Currency)}," + $"@{nameof(Amount)}," + $"@{nameof(TransactionType)}," @@ -119,6 +122,25 @@ namespace CryptoCalc public string FullInfo => $"{ Index } { GetLocalTimeFromUnixTime(UnixTime) } { Currency } { Amount } { 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)}\" REAL NOT NULL," + + $"\"{nameof(TransactionType)}\" TEXT NOT NULL," + + $"\"{nameof(FeeCurrency)}\" TEXT," + + $"\"{nameof(FeeAmount)}\" REAL," + + $"\"{nameof(Platform)}\" TEXT," + + $"\"{nameof(Note)}\" TEXT," + + $"PRIMARY KEY(\"{nameof(Index)}\" AUTOINCREMENT)," + + $"FOREIGN KEY(\"{nameof(WalletID)}\") REFERENCES \"{walletTableName}\"(\"{nameof(Index)}\")" + + $"); "; + } + #endregion } @@ -176,6 +198,22 @@ namespace CryptoCalc //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)}\" REAL NOT NULL," + + $"\"{nameof(DefaultWallet)}\" INTEGER," + + $"\"{nameof(Note)}\" TEXT," + + $"PRIMARY KEY(\"{nameof(Index)}\" AUTOINCREMENT)" + + $"); "; + } #endregion } diff --git a/DBInteraction.cs b/DBInteraction.cs index 47e83ee..8d8edef 100644 --- a/DBInteraction.cs +++ b/DBInteraction.cs @@ -4,12 +4,17 @@ using System.Collections.Generic; using System.Data; using System.Data.SQLite; using System.Diagnostics; -using System.Linq; namespace CryptoCalc { public class DBInteraction where T : DBClasses { + + public void CreateDB() + { + SQLiteConnection.CreateFile(DBClasses.DBName); + } + public void SaveData(T data) { if (data is null) @@ -17,10 +22,10 @@ namespace CryptoCalc throw new ArgumentNullException(nameof(data), "No data passed to SQL"); } - using IDbConnection _connection = new SQLiteConnection(Util.GetConnectionString(data.DBName)); + using IDbConnection _connection = new SQLiteConnection(Util.GetConnectionString(DBClasses.DBName)); string query = $"insert into {data.DBTableName} {data.DBSaveDataString}"; _connection.Execute(query, data); - Debug.WriteLine($"Saved data - DB: {data.DBName} - Table: {data.DBTableName} - Query: {query}"); + Debug.WriteLine($"Saved data - DB: {DBClasses.DBName} - Table: {data.DBTableName} - Query: {query}"); } public void ExecuteQuery(T data, string query) @@ -30,9 +35,9 @@ namespace CryptoCalc throw new ArgumentNullException(nameof(query), "No query entered"); } - using IDbConnection _connection = new SQLiteConnection(Util.GetConnectionString(data.DBName)); + using IDbConnection _connection = new SQLiteConnection(Util.GetConnectionString(DBClasses.DBName)); _connection.Execute($"{query}"); - Debug.WriteLine($"Executed query - DB: {data.DBName} - Query: {query}"); + Debug.WriteLine($"Executed query - DB: {DBClasses.DBName} - Query: {query}"); } public IEnumerable ReturnQuery(T data, string query) @@ -42,9 +47,9 @@ namespace CryptoCalc throw new ArgumentNullException(nameof(data), "DBclass is null"); } - using IDbConnection _connection = new SQLiteConnection(Util.GetConnectionString(data.DBName)); + using IDbConnection _connection = new SQLiteConnection(Util.GetConnectionString(DBClasses.DBName)); IEnumerable output = _connection.Query($"{query}", new DynamicParameters()); - Debug.WriteLine($"Executed query - DB: {data.DBName} - Query: {query}"); + Debug.WriteLine($"Executed query - DB: {DBClasses.DBName} - Query: {query}"); return output; } diff --git a/MainWindow.xaml b/MainWindow.xaml index 02c105a..2e9d41b 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -24,6 +24,7 @@