From a82928440cdf9bfc6d0fd4b6fd5f8588aeee1c95 Mon Sep 17 00:00:00 2001 From: Stedd Date: Sat, 12 Feb 2022 16:15:53 +0100 Subject: [PATCH 1/8] Cleaned up Generic DBs --- transactions.db => CryptoCalc.db | Bin 24576 -> 24576 bytes wallets.db | Bin 24576 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) rename transactions.db => CryptoCalc.db (90%) delete mode 100644 wallets.db diff --git a/transactions.db b/CryptoCalc.db similarity index 90% rename from transactions.db rename to CryptoCalc.db index a3b99f31c4e709fb3fac2648d4ed4f6ea38ae17d..9b41978106e1b17f168089e542bf6bb9ce557f18 100644 GIT binary patch delta 523 zcmZoTz}Rqrae}lUGXnzy8xX?)%S0Vxab^ZR|5{%D9}KKK3mN#b`S$rq%~Ej1NYDcDs&QODf;(!3IgZ@^;M vLI>h_xZ7EQZZ~I|{D;?^0~n_u%&hA literal 24576 zcmeI)-)q`H00;0yt*b(o!PxQ|0y3p#lKRlcEwkw+YP6cbdm=}wUDo;IYpe8Yk`AOHafKmY;|fIzkdqvtWO_M1bt#!#xQn2Buo=PfKUZ{JoV8Q)>y6CR7E4$J}Q*M#PJ@Gw_sd7|<{2Nk`swdcub= zeyBD-h$%@gH6&+YaGsuab;M;QH@WsCkW|435*`^-{1Rwwb2tWV=5P$##AOHafKmY<67AW(+{o4QY z&-igb00Izz00bZa0SG_<0uX=z1R#(>0si^FDBlb6z5FAC-9wik009U<00Izz00bZa z0SG_<0+|?VJTf$#rkej1>I5P$##AOHafKmY;|fB*y_0D+YN|1ZCt dRRC8AKmY;|fB*y_009U<00Izz00gon@DuoX4zvIO diff --git a/wallets.db b/wallets.db deleted file mode 100644 index 979886ff92df9ec5933f7cd251721d87abb8c4b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24576 zcmeI)&rjN57zglHlnF_}8wW0LdXlI!xZQRcVzZG!K`hxgkym`(nv{0J%hW8(l4a3< zV@Ll9|CQah?C5Fnu=lOyM=2OQEx~V-+Lov9+rFRYX|X{(*e~0hkz=php`1KZ))ZA$ zUJ{}xNU|tf-oS2uzJebtM%00`3^0fLz({7cRcD1BkrM{+W>Ff0MJuMJ|00bZa z0SG_<0t+ah{at>Z+1^$!KXZEMu-=Jt*y617vE^^J@{t#oiglx48N@2=mJOmu;yPJR zCiIef#Lo0Y$+V1DMxB^di<%u*c$qGvRSOrBXZ-{EwRvMmcBl+W3jo}Fl!=U^N} zZ@BiE9G-t}Y*dKjN2%3Il|sEq-WbjG;3_7ChE*+@BHtCmv~tN@Ef&vgY^cpat%!%V zR*#+ZMU~1M$oS@Rs7fY+>#nHuP0><3&57qQD;`hDXFNsO(&CvyR#j|y7YQ2CKKK0X zR!}~ze6S+h|WbW7G4@?k%00bZa0SG_<0uX=z1Rwwb2rQ~VQV#6y z`Cop Date: Sat, 12 Feb 2022 17:00:53 +0100 Subject: [PATCH 2/8] Refactored DB interaction --- DBInteraction.cs | 42 +++++++++++++++++++++++++++--------------- MainWindow.xaml.cs | 18 +++++++++--------- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/DBInteraction.cs b/DBInteraction.cs index 4d27355..47e83ee 100644 --- a/DBInteraction.cs +++ b/DBInteraction.cs @@ -8,33 +8,45 @@ using System.Linq; namespace CryptoCalc { - public class DBInteraction + public class DBInteraction where T : DBClasses { - public static void SaveData(T data) where T : DBClasses + public void SaveData(T data) { if (data is null) { throw new ArgumentNullException(nameof(data), "No data passed to SQL"); } - using IDbConnection cnn = new SQLiteConnection(Util.GetConnectionString(data.DBName)); - cnn.Execute($"insert into {data.DBTableName} {data.DBSaveDataString}", data); - Debug.WriteLine($"Saved {data.DBTableName} DB data"); + using IDbConnection _connection = new SQLiteConnection(Util.GetConnectionString(data.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}"); } - - public class GenericDB where T : DBClasses + public void ExecuteQuery(T data, string query) { - public IEnumerable QueryData(T data, string query) + if (query is null) { - if (data is null) - { - throw new ArgumentNullException(nameof(data), "DBclass is null"); - } - - using IDbConnection _connection = new SQLiteConnection(Util.GetConnectionString(data.DBName)); - return _connection.Query($"{query}", new DynamicParameters()); + throw new ArgumentNullException(nameof(query), "No query entered"); } + + using IDbConnection _connection = new SQLiteConnection(Util.GetConnectionString(data.DBName)); + _connection.Execute($"{query}"); + Debug.WriteLine($"Executed query - DB: {data.DBName} - Query: {query}"); + } + + public IEnumerable ReturnQuery(T data, string query) + { + if (data is null) + { + throw new ArgumentNullException(nameof(data), "DBclass is null"); + } + + using IDbConnection _connection = new SQLiteConnection(Util.GetConnectionString(data.DBName)); + IEnumerable output = _connection.Query($"{query}", new DynamicParameters()); + Debug.WriteLine($"Executed query - DB: {data.DBName} - Query: {query}"); + + return output; } } } diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index c681f9e..c8877a0 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -9,11 +9,11 @@ namespace CryptoCalc { private readonly Random rand = new(); - private DBInteraction.GenericDB transactionDB = new(); - private DBInteraction.GenericDB walletDB = new(); + private readonly DBInteraction transactionDB = new(); + private readonly DBInteraction walletDB = new(); - private Transaction genericT = new(); - private Wallet genericW = new(); + private readonly Transaction genericT = new(); + private readonly Wallet genericW = new(); public MainWindow() { @@ -22,22 +22,22 @@ namespace CryptoCalc private void saveButton_Click(object sender, RoutedEventArgs e) { - DBInteraction.SaveData(DummyTransaction()); + transactionDB.SaveData(DummyTransaction()); } private void saveWalletButton_Click(object sender, RoutedEventArgs e) { - DBInteraction.SaveData(DummyWallet()); + walletDB.SaveData(DummyWallet()); } private void saveButtonFromInput_Click(object sender, RoutedEventArgs e) { - DBInteraction.SaveData(new Transaction(inputCurrency.Text, Convert.ToSingle(inputAmount.Text), inputType.Text)); + transactionDB.SaveData(new Transaction(inputCurrency.Text, Convert.ToSingle(inputAmount.Text), inputType.Text)); } private void readButton_click(object sender, RoutedEventArgs e) { string query = $"select * from {genericT.DBTableName}"; - IEnumerable transactions = transactionDB.QueryData(genericT, query); + IEnumerable transactions = transactionDB.ReturnQuery(genericT, query); foreach (Transaction t in transactions) { Debug.WriteLine($"{t.GetLocalTimeFromUnixTime(t.UnixTime)} *** {t.Currency} - {t.Amount}"); @@ -46,7 +46,7 @@ namespace CryptoCalc private void searchButton_Click(object sender, RoutedEventArgs e) { string query = $"SELECT * from {genericT.DBTableName} WHERE {nameof(genericT.Currency)}=\'{currencyText.Text}\'"; - IEnumerable transactions = transactionDB.QueryData(genericT, query); + IEnumerable transactions = transactionDB.ReturnQuery(genericT, query); transactionsFoundListBox.Items.Clear(); foreach (Transaction x in transactions) { From 433fcd122bc608cf3b90f9cdebccd95640ff4e8d Mon Sep 17 00:00:00 2001 From: Stedd Date: Sat, 12 Feb 2022 17:01:09 +0100 Subject: [PATCH 3/8] Added wallet ID column in transactions --- CryptoCalc.db | Bin 24576 -> 32768 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/CryptoCalc.db b/CryptoCalc.db index 9b41978106e1b17f168089e542bf6bb9ce557f18..fe2f8e2e3ee052bd2b84a17bac289f1235baad1d 100644 GIT binary patch delta 766 zcmZoTz}V2hG(lRBm4ShQ1B#h|H1|XuV`)|fJ^xx>zHA0oZYBmkNuGtgueh1`kMq~? z*KBOO#Sy}n&Fm|#ug}=VT9TNQlUiJulN4W)np+SL=EfUg2rxMZxjKfpDug&X`M4@5 zVaO{fXiVP7rzFS4sT7`=lapHF>7vBx=@;Va?i!@v=O3cr7wY4qGx;}9;n7GH5FBv4n)u~H@`HmM2QpV9v_fUKu%&wT7FS3 z#4M1AUw%m{oag2r8?a1+pfW@>vfzpQMM~bBd9Lfq^k*b3Pv{BcCHX zn|P=`BZDI+h@Sj`S3(~n(&G&=gqVRT&=H6k%sD3? Iz@h*F05%aB0RR91 From f836479b1d96a53ff3c38b663162067c5211ab83 Mon Sep 17 00:00:00 2001 From: Stedd Date: Sat, 12 Feb 2022 17:02:37 +0100 Subject: [PATCH 4/8] Removed underscores --- DBClasses.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/DBClasses.cs b/DBClasses.cs index 88e1ff8..c07cab5 100644 --- a/DBClasses.cs +++ b/DBClasses.cs @@ -72,12 +72,12 @@ namespace CryptoCalc public Transaction() { SetDBStrings(); } - public Transaction(string _currency, float _amount, string _type) + public Transaction(string currency, float amount, string type) { SaveUnixTimeNow(); - Currency = _currency; - Amount = _amount; - TransactionType = _type; + Currency = currency; + Amount = amount; + TransactionType = type; Platform = ""; Note = ""; From 7f59ecf7a26c24b361ec35d75b179d3b52714415 Mon Sep 17 00:00:00 2001 From: Stedd Date: Sat, 12 Feb 2022 17:07:48 +0100 Subject: [PATCH 5/8] Static unix functions --- DBClasses.cs | 7 ++++--- MainWindow.xaml.cs | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/DBClasses.cs b/DBClasses.cs index c07cab5..a59e5fe 100644 --- a/DBClasses.cs +++ b/DBClasses.cs @@ -33,16 +33,17 @@ namespace CryptoCalc UnixTime = (long)DateTime.UtcNow.Subtract(DateTime.UnixEpoch).TotalSeconds; } - public long GetUnixTime(DateTime dateTime) + public static long GetUnixTime(DateTime dateTime) { return (long)dateTime.Subtract(DateTime.UnixEpoch).TotalSeconds; } - public DateTime GetUTCTimeFromUnixTime(long unix) + public static DateTime GetUTCTimeFromUnixTime(long unix) { return DateTime.UnixEpoch.AddSeconds(unix).ToUniversalTime(); } - public DateTime GetLocalTimeFromUnixTime(long unix) + + public static DateTime GetLocalTimeFromUnixTime(long unix) { return DateTime.UnixEpoch.AddSeconds(unix).ToLocalTime(); } diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index c8877a0..a23c5b1 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -40,7 +40,7 @@ namespace CryptoCalc IEnumerable transactions = transactionDB.ReturnQuery(genericT, query); foreach (Transaction t in transactions) { - Debug.WriteLine($"{t.GetLocalTimeFromUnixTime(t.UnixTime)} *** {t.Currency} - {t.Amount}"); + Debug.WriteLine($"{DBClasses.GetLocalTimeFromUnixTime(t.UnixTime)} *** {t.Currency} - {t.Amount}"); } } private void searchButton_Click(object sender, RoutedEventArgs e) @@ -70,7 +70,7 @@ namespace CryptoCalc { Wallet w = new(); w.SaveUnixTimeNow(); - w.UnixTimeCreated = w.GetUnixTime(new DateTime(rand.Next(2011, DateTime.Now.Year), rand.Next(1,12), rand.Next(1, 28))); + w.UnixTimeCreated = DBClasses.GetUnixTime(new DateTime(rand.Next(2011, DateTime.Now.Year), rand.Next(1,12), rand.Next(1, 28))); w.Platform = "Ledger"; w.Name = "DefaultBTCWallet"; w.Currency = "BTC"; From 3d201103ae4bc6b977089f1a15dd075ddd54527a Mon Sep 17 00:00:00 2001 From: Stedd Date: Sat, 12 Feb 2022 18:38:18 +0100 Subject: [PATCH 6/8] 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 @@