diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2026-05-06 21:46:21 +0300 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2026-05-06 21:46:21 +0300 |
| commit | 713ced9c68cd70a8e56e8ce5ed27cb9bbe3e55c4 (patch) | |
| tree | 29f9997386b9f46db9f263ef63a5e01ca19db393 /src/db.ts | |
| parent | cba8c3d49b53702a488eaff16109e29e49d94b6d (diff) | |
Add shopping list features, rework
Diffstat (limited to 'src/db.ts')
| -rw-r--r-- | src/db.ts | 74 |
1 files changed, 74 insertions, 0 deletions
@@ -51,6 +51,20 @@ const ddl = ` CREATE TABLE IF NOT EXISTS permitted_users ( id INTEGER PRIMARY KEY ) STRICT; + + CREATE TABLE IF NOT EXISTS shopping_list ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + item TEXT NOT NULL, + added_by INTEGER NOT NULL, + created_at TEXT NOT NULL DEFAULT (datetime('now')) + ) STRICT; + + CREATE TABLE IF NOT EXISTS recurring_tasks ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + interval TEXT NOT NULL, + last_done TEXT + ) STRICT; COMMIT; `; db.exec(ddl); @@ -117,3 +131,63 @@ export const getPermittedUsers = async (): Promise< const stmt = db.prepare("SELECT id FROM permitted_users"); return stmt.all() as PermittedUser[]; }; + +/* Shopping list */ + +interface ShoppingItem { + id: number; + item: string; +} + +export const addShoppingItem = (item: string, addedBy: number): void => { + withWriteTx((db) => { + db.prepare("INSERT INTO shopping_list (item, added_by) VALUES (?, ?)").run(item, addedBy); + }); +}; + +export const getShoppingList = (): ShoppingItem[] => { + return db.prepare("SELECT id, item FROM shopping_list ORDER BY id").all() as ShoppingItem[]; +}; + +export const removeShoppingItem = (id: number): void => { + withWriteTx((db) => { + db.prepare("DELETE FROM shopping_list WHERE id = ?").run(id); + }); +}; + +/* Recurring tasks */ + +export interface RecurringTask { + id: number; + name: string; + interval: string; + last_done: string | null; +} + +export const addRecurringTask = (name: string, interval: string): void => { + withWriteTx((db) => { + db.prepare("INSERT INTO recurring_tasks (name, interval) VALUES (?, ?)").run(name, interval); + }); +}; + +export const getRecurringTasks = (): RecurringTask[] => { + return db.prepare("SELECT id, name, interval, last_done FROM recurring_tasks ORDER BY id").all() as RecurringTask[]; +}; + +export const updateRecurringTask = (id: number, name: string, interval: string): void => { + withWriteTx((db) => { + db.prepare("UPDATE recurring_tasks SET name = ?, interval = ? WHERE id = ?").run(name, interval, id); + }); +}; + +export const markTaskDone = (id: number, date: string): void => { + withWriteTx((db) => { + db.prepare("UPDATE recurring_tasks SET last_done = ? WHERE id = ?").run(date, id); + }); +}; + +export const removeRecurringTask = (id: number): void => { + withWriteTx((db) => { + db.prepare("DELETE FROM recurring_tasks WHERE id = ?").run(id); + }); +}; |
