diff --git a/src/lib/server/db/queries.ts b/src/lib/server/db/queries.ts index 448d495..558a25a 100644 --- a/src/lib/server/db/queries.ts +++ b/src/lib/server/db/queries.ts @@ -2,7 +2,7 @@ import { db } from '$lib/server/db'; import { aktis, ratings } from '$lib/server/db/schema'; import { avg, eq } from 'drizzle-orm'; -export async function getAktisWithAvgRating() { +export async function getAktisWithAvgRating(limit = 20, offset = 0) { return await db .select({ id: aktis.id, @@ -12,5 +12,7 @@ export async function getAktisWithAvgRating() { }) .from(aktis) .leftJoin(ratings, eq(aktis.id, ratings.aktiId)) - .groupBy(aktis.id, aktis.title, aktis.summary); + .groupBy(aktis.id, aktis.title, aktis.summary) + .limit(limit) + .offset(offset); } diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts index 194192e..8c12aaf 100644 --- a/src/routes/+page.server.ts +++ b/src/routes/+page.server.ts @@ -1,8 +1,11 @@ import { getAktisWithAvgRating } from '$lib/server/db/queries'; import type { PageServerLoad } from './$types'; -export const load: PageServerLoad = async () => { - const a = await getAktisWithAvgRating(); +export const load: PageServerLoad = async ({ url }) => { + const offset = Number(url.searchParams.get('offset')) || 0; + const limit = 20; + + const a = await getAktisWithAvgRating(limit, offset); return { aktis: a.map((a) => ({ ...a, rating: a.rating ? parseFloat(a.rating) : undefined })) diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 4cc3b10..cbb8d38 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,12 +1,55 @@
- {#each data.aktis as akti (akti.id)} + {#each aktis as akti (akti.id)} {/each}
+ +
+ {#if loading} + + {:else if hasMore} +
+ {/if} +
diff --git a/src/routes/api/aktis/+server.ts b/src/routes/api/aktis/+server.ts new file mode 100644 index 0000000..4f18197 --- /dev/null +++ b/src/routes/api/aktis/+server.ts @@ -0,0 +1,11 @@ +import { getAktisWithAvgRating } from '$lib/server/db/queries'; +import { json, type RequestHandler } from '@sveltejs/kit'; + +export const GET: RequestHandler = async ({ url }) => { + const offset = Number(url.searchParams.get('offset')) || 0; + const limit = 20; + + const a = await getAktisWithAvgRating(limit, offset); + + return json(a.map((a) => ({ ...a, rating: a.rating ? parseFloat(a.rating) : undefined }))); +};