aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-07-27 21:07:48 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-07-27 21:07:48 +0200
commitd9a200cd35a3d06173846a45c9f58acb1adf61aa (patch)
tree35f972193cc7ef7984705c61cd8b6f2aa48ff60e
parentbc3678461c3000c2394e355b7aaa73b774a33fff (diff)
refactor: rename brand to reference everywhere
-rw-r--r--drizzle/0000_greedy_masked_marvel.sql (renamed from drizzle/0000_youthful_mercury.sql)11
-rw-r--r--drizzle/0001_dry_meteorite.sql9
-rw-r--r--drizzle/meta/0000_snapshot.json64
-rw-r--r--drizzle/meta/0001_snapshot.json172
-rw-r--r--drizzle/meta/_journal.json11
-rw-r--r--src/lib/server/db/schema.ts2
-rw-r--r--src/routes/+page.svelte2
-rw-r--r--src/routes/catalog/+page.svelte2
-rw-r--r--src/routes/grocery/[id]/+page.server.ts8
-rw-r--r--src/routes/grocery/[id]/+page.svelte10
10 files changed, 87 insertions, 204 deletions
diff --git a/drizzle/0000_youthful_mercury.sql b/drizzle/0000_greedy_masked_marvel.sql
index 6dde7ff..45556f1 100644
--- a/drizzle/0000_youthful_mercury.sql
+++ b/drizzle/0000_greedy_masked_marvel.sql
@@ -13,4 +13,13 @@ CREATE TABLE `groceries` (
FOREIGN KEY (`category_id`) REFERENCES `categories`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
-CREATE UNIQUE INDEX `groceries_name_unique` ON `groceries` (`name`); \ No newline at end of file
+CREATE UNIQUE INDEX `groceries_name_unique` ON `groceries` (`name`);--> statement-breakpoint
+CREATE TABLE `references` (
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
+ `grocery_id` integer NOT NULL,
+ `reference` 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/0001_dry_meteorite.sql b/drizzle/0001_dry_meteorite.sql
deleted file mode 100644
index ae22f4b..0000000
--- a/drizzle/0001_dry_meteorite.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-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/0000_snapshot.json b/drizzle/meta/0000_snapshot.json
index 6e33354..5f30c67 100644
--- a/drizzle/meta/0000_snapshot.json
+++ b/drizzle/meta/0000_snapshot.json
@@ -1,7 +1,7 @@
{
"version": "6",
"dialect": "sqlite",
- "id": "54c7ae45-9838-4ffb-ad46-29995def7272",
+ "id": "be05d3e6-4ab4-4a59-a592-6459b19b440f",
"prevId": "00000000-0000-0000-0000-000000000000",
"tables": {
"categories": {
@@ -95,6 +95,68 @@
"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
+ },
+ "reference": {
+ "name": "reference",
+ "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": {},
diff --git a/drizzle/meta/0001_snapshot.json b/drizzle/meta/0001_snapshot.json
deleted file mode 100644
index 21f509e..0000000
--- a/drizzle/meta/0001_snapshot.json
+++ /dev/null
@@ -1,172 +0,0 @@
-{
- "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 9872346..10dce89 100644
--- a/drizzle/meta/_journal.json
+++ b/drizzle/meta/_journal.json
@@ -5,15 +5,8 @@
{
"idx": 0,
"version": "6",
- "when": 1785169427572,
- "tag": "0000_youthful_mercury",
- "breakpoints": true
- },
- {
- "idx": 1,
- "version": "6",
- "when": 1785170535526,
- "tag": "0001_dry_meteorite",
+ "when": 1785179210259,
+ "tag": "0000_greedy_masked_marvel",
"breakpoints": true
}
]
diff --git a/src/lib/server/db/schema.ts b/src/lib/server/db/schema.ts
index 9cd6af8..9113d9b 100644
--- a/src/lib/server/db/schema.ts
+++ b/src/lib/server/db/schema.ts
@@ -18,7 +18,7 @@ export const references = sqliteTable('references', {
groceryId: integer('grocery_id')
.notNull()
.references(() => groceries.id, { onDelete: 'cascade' }),
- brand: text('brand').notNull(),
+ reference: text('reference').notNull(),
price: real('price'),
unit: text('unit'),
qualityScore: integer('quality_score'),
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 767c87e..b0398af 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -47,7 +47,7 @@
{item.name}
{#if item.bestRef}
<span class="best-ref"
- >{item.bestRef.brand}
+ >{item.bestRef.reference}
{#if item.bestRef.price && item.bestRef.unit}
&nbsp;{item.bestRef.price.toFixed(2)} {item.bestRef.unit}
{/if}
diff --git a/src/routes/catalog/+page.svelte b/src/routes/catalog/+page.svelte
index 0e1106c..1ac558f 100644
--- a/src/routes/catalog/+page.svelte
+++ b/src/routes/catalog/+page.svelte
@@ -30,7 +30,7 @@
<span class:checked={item.checked}>{item.name}</span>
{#if item.bestRef}
<span class="best-ref"
- >{item.bestRef.brand}
+ >{item.bestRef.reference}
{#if item.bestRef.price && item.bestRef.unit}
&nbsp;{item.bestRef.price.toFixed(2)} {item.bestRef.unit}
{/if}
diff --git a/src/routes/grocery/[id]/+page.server.ts b/src/routes/grocery/[id]/+page.server.ts
index 88aa137..e434e9f 100644
--- a/src/routes/grocery/[id]/+page.server.ts
+++ b/src/routes/grocery/[id]/+page.server.ts
@@ -34,18 +34,18 @@ export const load: PageServerLoad = async ({ params }) => {
export const actions: Actions = {
add: async ({ request, params }) => {
const data = await request.formData();
- const brand = data.get('brand')?.toString().trim();
+ const reference = data.get('reference')?.toString().trim();
const price = data.get('price')?.toString().trim();
const unit = data.get('unit')?.toString().trim();
const qualityScore = data.get('quality_score')?.toString().trim();
- if (!brand) {
- return fail(400, { error: 'Brand is required' });
+ if (!reference) {
+ return fail(400, { error: 'Reference is required' });
}
await db.insert(references).values({
groceryId: Number(params.id),
- brand,
+ reference,
price: price ? Number(price) : null,
unit: unit || null,
qualityScore: qualityScore ? Number(qualityScore) : null,
diff --git a/src/routes/grocery/[id]/+page.svelte b/src/routes/grocery/[id]/+page.svelte
index 15c4e8b..35cf33a 100644
--- a/src/routes/grocery/[id]/+page.svelte
+++ b/src/routes/grocery/[id]/+page.svelte
@@ -4,7 +4,7 @@
import { page } from '$app/stores';
let { data, form } = $props();
- let brand = $state('');
+ let reference = $state('');
let price = $state('');
let unit = $state('€/kg');
let qualityScore = $state('');
@@ -22,11 +22,11 @@
<form class="add-form" method="POST" action="?/add" use:enhance>
<label>
- <span class="label">Brand</span>
+ <span class="label">Reference</span>
<input
type="text"
- name="brand"
- bind:value={brand}
+ name="reference"
+ bind:value={reference}
placeholder="e.g. Carte Noire"
autocomplete="off"
/>
@@ -74,7 +74,7 @@
{#each data?.references ?? [] as ref (ref.id)}
<li class="ref-item">
<div class="ref-info">
- <strong>{ref.brand}</strong>
+ <strong>{ref.reference}</strong>
{#if ref.price}
<span class="ref-detail"
>{ref.price.toFixed(2)}{ref.unit ? ` ${ref.unit}` : ''}</span