diff options
Diffstat (limited to 'db.vala')
-rw-r--r-- | db.vala | 92 |
1 files changed, 91 insertions, 1 deletions
@@ -2,9 +2,19 @@ public class Database { private Sqlite.Database db; private Sqlite.Statement insert_stmt; private Sqlite.Statement product_stmt; + private Sqlite.Statement undo_stmt; + private Sqlite.Statement stock_stmt1; + private Sqlite.Statement stock_stmt2; uint64 user = 0; + uint64 product = 0; + bool logged_in = false; + bool stock_mode = false; private static string insert_query = "INSERT INTO purchases ('user', 'product', 'timestamp') VALUES (?, ?, ?)"; private static string product_query = "SELECT name FROM products WHERE id = ?"; + private static string undo_query = "DELETE FROM purchases WHERE user = ? ORDER BY 'timestamp' DESC LIMIT 1"; + + private static string stock_query1 = "INSERT INTO restock ('user', 'product', 'amount', 'timestamp') VALUES (?, ?, ?, ?)"; + private static string stock_query2 = "UPDATE products SET amount = amount + ? WHERE id = ?"; public Database(string file) { int rc; @@ -23,15 +33,33 @@ public class Database { if(rc != Sqlite.OK) { error("could not prepare article statement!"); } + + rc = this.db.prepare_v2(undo_query, -1, out undo_stmt); + if(rc != Sqlite.OK) { + error("could not prepare undo statement!"); + } + + rc = this.db.prepare_v2(stock_query1, -1, out stock_stmt1); + if(rc != Sqlite.OK) { + error("could not prepare first stock statement!"); + } + + rc = this.db.prepare_v2(stock_query2, -1, out stock_stmt2); + if(rc != Sqlite.OK) { + error("could not prepare second stock statement!"); + } + } public bool login(uint64 id) { this.user = id; + this.logged_in = true; return true; } public bool logout() { this.user = 0; + this.logged_in = false; return true; } @@ -71,7 +99,69 @@ public class Database { } } + public bool undo() { + if(is_logged_in()) { + this.undo_stmt.reset(); + this.undo_stmt.bind_text(1, "%llu".printf(user)); + + int rc = this.undo_stmt.step(); + if(rc != Sqlite.DONE) + error("[interner Fehler: %d]".printf(rc)); + else + return true; + } + + return false; + } + + public bool choose_stock_product(uint64 id) { + if(is_in_stock_mode()) { + product = id; + return true; + } + return false; + } + + public bool add_stock_product(uint64 amount) { + if(is_in_stock_mode() && product != 0) { + int rc = 0; + int64 timestamp = (new DateTime.now_utc()).to_unix(); + + this.stock_stmt1.reset(); + this.stock_stmt1.bind_text(1, "%llu".printf(user)); + this.stock_stmt1.bind_text(2, "%llu".printf(product)); + this.stock_stmt1.bind_text(3, "%llu".printf(amount)); + this.stock_stmt1.bind_text(4, "%llu".printf(timestamp)); + + rc = this.stock_stmt1.step(); + if(rc != Sqlite.DONE) + error("[interner Fehler: %d]".printf(rc)); + + this.stock_stmt2.reset(); + this.stock_stmt2.bind_text(1, "%llu".printf(amount)); + this.stock_stmt2.bind_text(2, "%llu".printf(product)); + + rc = this.stock_stmt2.step(); + if(rc != Sqlite.DONE) + error("[interner Fehler: %d]".printf(rc)); + + return true; + } + + return false; + } + + public bool go_into_stock_mode() { + if(is_logged_in()) + stock_mode = true; + return stock_mode; + } + public bool is_logged_in() { - return (user != 0); + return this.logged_in; + } + + public bool is_in_stock_mode() { + return this.stock_mode; } } |