diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-07-27 19:53:11 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-07-27 19:53:11 +0200 |
| commit | e075698891d653330b5d5d0f80c2c3495aee6262 (patch) | |
| tree | f0b04b3d003fb49f820d1da86b811a9bd05b9a56 /drizzle | |
| parent | 2ded7d512470b2e9faabf2f61a0a97eef95a6f89 (diff) | |
feat: product references + grocery detail page
- references table (brand, price, unit, quality_score) with FK to groceries
- /grocery/[id] page for managing references per item
- Unit dropdown (€/kg, €/L, €/u) defaulting to €/kg
- → link on all items navigates to detail page
- Delete item moved from catalog to detail page
Diffstat (limited to 'drizzle')
| -rw-r--r-- | drizzle/0001_dry_meteorite.sql | 9 | ||||
| -rw-r--r-- | drizzle/meta/0001_snapshot.json | 172 | ||||
| -rw-r--r-- | drizzle/meta/_journal.json | 7 |
3 files changed, 188 insertions, 0 deletions
diff --git a/drizzle/0001_dry_meteorite.sql b/drizzle/0001_dry_meteorite.sql new file mode 100644 index 0000000..ae22f4b --- /dev/null +++ b/drizzle/0001_dry_meteorite.sql @@ -0,0 +1,9 @@ +CREATE TABLE `references` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `grocery_id` integer NOT NULL, + `brand` text NOT NULL, + `price` real, + `unit` text, + `quality_score` integer, + FOREIGN KEY (`grocery_id`) REFERENCES `groceries`(`id`) ON UPDATE no action ON DELETE cascade +); diff --git a/drizzle/meta/0001_snapshot.json b/drizzle/meta/0001_snapshot.json new file mode 100644 index 0000000..21f509e --- /dev/null +++ b/drizzle/meta/0001_snapshot.json @@ -0,0 +1,172 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "52dffa39-fdb4-4a7c-8688-136e0ad485fc", + "prevId": "54c7ae45-9838-4ffb-ad46-29995def7272", + "tables": { + "categories": { + "name": "categories", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "categories_name_unique": { + "name": "categories_name_unique", + "columns": ["name"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "groceries": { + "name": "groceries", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "checked": { + "name": "checked", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "category_id": { + "name": "category_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "groceries_name_unique": { + "name": "groceries_name_unique", + "columns": ["name"], + "isUnique": true + } + }, + "foreignKeys": { + "groceries_category_id_categories_id_fk": { + "name": "groceries_category_id_categories_id_fk", + "tableFrom": "groceries", + "tableTo": "categories", + "columnsFrom": ["category_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "references": { + "name": "references", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "grocery_id": { + "name": "grocery_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "brand": { + "name": "brand", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "price": { + "name": "price", + "type": "real", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "unit": { + "name": "unit", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "quality_score": { + "name": "quality_score", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "references_grocery_id_groceries_id_fk": { + "name": "references_grocery_id_groceries_id_fk", + "tableFrom": "references", + "tableTo": "groceries", + "columnsFrom": ["grocery_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json index 2923632..9872346 100644 --- a/drizzle/meta/_journal.json +++ b/drizzle/meta/_journal.json @@ -8,6 +8,13 @@ "when": 1785169427572, "tag": "0000_youthful_mercury", "breakpoints": true + }, + { + "idx": 1, + "version": "6", + "when": 1785170535526, + "tag": "0001_dry_meteorite", + "breakpoints": true } ] } |
