From c459d58a28ac5ac974cc3d5ce001f0f9e74d99c2 Mon Sep 17 00:00:00 2001 From: schreifuchs Date: Fri, 3 Apr 2026 13:26:55 +0200 Subject: [PATCH] refactor: abstract heavy database queries (resolves #10) --- src/lib/server/db/queries.ts | 16 ++++++++++++++++ src/routes/+page.server.ts | 15 ++------------- 2 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 src/lib/server/db/queries.ts diff --git a/src/lib/server/db/queries.ts b/src/lib/server/db/queries.ts new file mode 100644 index 0000000..448d495 --- /dev/null +++ b/src/lib/server/db/queries.ts @@ -0,0 +1,16 @@ +import { db } from '$lib/server/db'; +import { aktis, ratings } from '$lib/server/db/schema'; +import { avg, eq } from 'drizzle-orm'; + +export async function getAktisWithAvgRating() { + return await db + .select({ + id: aktis.id, + title: aktis.title, + summary: aktis.summary, + rating: avg(ratings.rating) + }) + .from(aktis) + .leftJoin(ratings, eq(aktis.id, ratings.aktiId)) + .groupBy(aktis.id, aktis.title, aktis.summary); +} diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts index 4510bd3..194192e 100644 --- a/src/routes/+page.server.ts +++ b/src/routes/+page.server.ts @@ -1,19 +1,8 @@ -import { db } from '$lib/server/db'; -import { aktis, ratings } from '$lib/server/db/schema'; -import { avg, eq } from 'drizzle-orm'; +import { getAktisWithAvgRating } from '$lib/server/db/queries'; import type { PageServerLoad } from './$types'; export const load: PageServerLoad = async () => { - const a = await db - .select({ - id: aktis.id, - title: aktis.title, - summary: aktis.summary, - rating: avg(ratings.rating) - }) - .from(aktis) - .leftJoin(ratings, eq(aktis.id, ratings.aktiId)) - .groupBy(aktis.id, aktis.title, aktis.summary); + const a = await getAktisWithAvgRating(); return { aktis: a.map((a) => ({ ...a, rating: a.rating ? parseFloat(a.rating) : undefined }))