From 3d201103ae4bc6b977089f1a15dd075ddd54527a Mon Sep 17 00:00:00 2001 From: Stedd Date: Sat, 12 Feb 2022 18:38:18 +0100 Subject: [PATCH] Generating DB and Tables on startup --- CryptoCalc.db | Bin 32768 -> 24576 bytes DBClasses.cs | 44 +++++++++++++++++++++++++++++++++++++++++--- DBInteraction.cs | 19 ++++++++++++------- MainWindow.xaml | 1 + MainWindow.xaml.cs | 9 +++++++++ 5 files changed, 63 insertions(+), 10 deletions(-) diff --git a/CryptoCalc.db b/CryptoCalc.db index fe2f8e2e3ee052bd2b84a17bac289f1235baad1d..db156a6d0c622b4273aaaf9647a566f46dad4a2f 100644 GIT binary patch delta 643 zcmZo@U}`wPI6+#FiGhKE4TxcYX`+s?I1_`Oe=RTn4+d5qa|Ygr{QG(PdCYkeHVX%Tl7gpSh^xD6kb<9o zh=O0JkB<&q&bcTxu_QGGo05Q>#FDi9qFg0~5Z8zh9VNd+kWmn}b7@ggYF=_BgpXvd zQ({hHUNTT!kfE!i50ZpSYFc7xPDyxTPEKkG+&ZAC`6Vz@C*R|entY#^WAaPhCa&ga zMs{&kRmQf;$voWFA~2sRAOVOkAtrjdC?RBUdl#=Fgs0#}fqaYP3CG<0(mbH+5ujcn z2-Tk>2h7yYUrv4lT2_$S&N?nlDLhd;ZD!{Q5hU0P*mkGw^NcWHcUHzVwo;5J4cX zC5aG{V_PxYGHk!hwk5XB9>VNk!9GWxcRyCDrzE$WA=Sr^zEyrLXT%@km3XzF7pfot z0SG_<0uX?}eUOdbukE>m3u7>}=hwC- z;{)^YSYdQX zUbOF6KK~mu7=o8*BR?FFowd65@L^PMzh@f z)LtsoR#%1V{xm$nCGLg0Ts(2YQWlR2yMq3bFTBZul!#Wh#gx4Luf@*>UR zX~wf*ou9^2;5LPL-InE8ZlAS|XBV&9woj~y;|H_)^UJ3rMzVvoy#F$vIabQeXSsY$ zSry2DFC%P;VK4hkYvPZl=VnM}ZiWZ>{cOIrwk90SmN4Gjv(G1Njo>R<^mHi}g*%lE zmszZ{o=rl8cRbOq?FS?pcX@bV7X>7`G{r*|$@zK99e--c^)4)pj;a*$wcdt6lv1#t zACbgez}!p}W!ark;djSZY^dG(eZh@9anIb0o@Fb%_X_`k2LvDh0SG_<0uX=z1Rwwb z2tWV=X%#5*i3P9!`Fs3$KmY;|fB*y_009U<00Izz00bbALIM8%zaZWa@kaca!s%g3 z5P$##AOHafKmY;|fB*y_0D;sCJS`@^Fd$~K^MsLK5CRZ@00bZa0SG_< z0uX=z1Ry{npZ|vj1Rwwb2tWV=5P$##AOHafKmY^00Izz00bZa q0SG_<0uV?F@c-pkNEV|60uX=z1Rwwb2tWV=5P$##AOL|h2>b@xBn(Rc 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 @@