aboutsummaryrefslogtreecommitdiff
path: root/src/lib/server/db
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/server/db')
-rw-r--r--src/lib/server/db/groceries.test.ts20
-rw-r--r--src/lib/server/db/schema.ts6
2 files changed, 21 insertions, 5 deletions
diff --git a/src/lib/server/db/groceries.test.ts b/src/lib/server/db/groceries.test.ts
index b4f5050..bd14040 100644
--- a/src/lib/server/db/groceries.test.ts
+++ b/src/lib/server/db/groceries.test.ts
@@ -1,24 +1,30 @@
import { describe, it, expect, beforeEach } from 'vitest';
import { drizzle } from 'drizzle-orm/libsql';
import { createClient } from '@libsql/client';
-import { groceries } from '$lib/server/db/schema';
+import { groceries, categories } from '$lib/server/db/schema';
import { eq } from 'drizzle-orm';
describe('groceries add', () => {
const client = createClient({ url: ':memory:' });
- const db = drizzle(client, { schema: { groceries } });
+ const db = drizzle(client, { schema: { groceries, categories } });
beforeEach(async () => {
await db.run(`DROP TABLE IF EXISTS groceries`);
+ await db.run(`DROP TABLE IF EXISTS categories`);
+ await db.run(`CREATE TABLE categories (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ name TEXT NOT NULL
+ )`);
await db.run(`CREATE TABLE groceries (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
checked INTEGER NOT NULL DEFAULT 0,
- created_at TEXT NOT NULL
+ created_at TEXT NOT NULL,
+ category_id INTEGER REFERENCES categories(id)
)`);
});
- async function addItem(name: string) {
+ async function addItem(name: string, categoryId?: number | null) {
const existing = await db
.select()
.from(groceries)
@@ -28,11 +34,15 @@ describe('groceries add', () => {
if (existing.length > 0) {
await db
.update(groceries)
- .set({ checked: false })
+ .set({
+ checked: false,
+ categoryId: categoryId ?? existing[0].categoryId,
+ })
.where(eq(groceries.id, existing[0].id));
} else {
await db.insert(groceries).values({
name,
+ categoryId,
createdAt: new Date().toISOString(),
});
}
diff --git a/src/lib/server/db/schema.ts b/src/lib/server/db/schema.ts
index 403ef51..1d5fd9e 100644
--- a/src/lib/server/db/schema.ts
+++ b/src/lib/server/db/schema.ts
@@ -1,8 +1,14 @@
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
+export const categories = sqliteTable('categories', {
+ id: integer('id').primaryKey({ autoIncrement: true }),
+ name: text('name').notNull().unique(),
+});
+
export const groceries = sqliteTable('groceries', {
id: integer('id').primaryKey({ autoIncrement: true }),
name: text('name').notNull().unique(),
checked: integer('checked', { mode: 'boolean' }).notNull().default(false),
createdAt: text('created_at').notNull(),
+ categoryId: integer('category_id').references(() => categories.id),
});