From 4efed80a2f8dc238b420eadf97d56c3eccaadb76 Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Sun, 18 Oct 2026 22:22:55 +0200 Subject: refactor: inject the database into every service Groceries, projects, references and routines become classes holding the Drizzle handle, wired once in services/index.ts alongside categories. Tests build their own instance on an in-memory database. Drops the unused projects.loadAll and projects.rename. --- src/lib/server/services/projects.ts | 53 ++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 30 deletions(-) (limited to 'src/lib/server/services/projects.ts') diff --git a/src/lib/server/services/projects.ts b/src/lib/server/services/projects.ts index 443297b..d389aa5 100644 --- a/src/lib/server/services/projects.ts +++ b/src/lib/server/services/projects.ts @@ -1,38 +1,31 @@ -import { db as defaultDb } from '$lib/server/db'; import { projects } from '$lib/server/db/schema'; -import { asc, eq } from 'drizzle-orm'; +import { eq } from 'drizzle-orm'; import type { AppDatabase } from '$lib/server/db/types'; import type { Project } from './types'; -export async function loadAll(db = defaultDb): Promise { - return db - .select() - .from(projects) - .where(eq(projects.archived, false)) - .orderBy(asc(projects.name)); -} +export class ProjectsService { + constructor(private readonly db: AppDatabase) {} -export async function add(name: string, db = defaultDb): Promise { - const [inserted] = await db.insert(projects).values({ name }).returning(); - return inserted; -} + async add(name: string): Promise { + const [inserted] = await this.db + .insert(projects) + .values({ name }) + .returning(); + return inserted; + } -export async function rename( - id: number, - name: string, - db = defaultDb, -): Promise { - await db.update(projects).set({ name }).where(eq(projects.id, id)); -} - -export async function archive(id: number, db = defaultDb): Promise { - await db.update(projects).set({ archived: true }).where(eq(projects.id, id)); -} + async archive(id: number): Promise { + await this.db + .update(projects) + .set({ archived: true }) + .where(eq(projects.id, id)); + } -export async function getById( - id: number, - db = defaultDb, -): Promise { - const [project] = await db.select().from(projects).where(eq(projects.id, id)); - return project; + async getById(id: number): Promise { + const [project] = await this.db + .select() + .from(projects) + .where(eq(projects.id, id)); + return project; + } } -- cgit v1.3