import type { PageServerLoad } from './$types'; import { ensureAuth } from '$lib/server/session'; import { error, redirect, type Actions } from '@sveltejs/kit'; import { extractFormData } from '$lib/extractFormData'; import { aktis, ratings } from '$lib/server/db/schema'; import { eq } from 'drizzle-orm'; import * as v from 'valibot'; import { db } from '$lib/server/db'; import { resolve } from '$app/paths'; export const load: PageServerLoad = async (event) => { const user = await ensureAuth(event); const res = await db .select({ authorId: aktis.author }) .from(aktis) .where(eq(aktis.id, event.params.aktiId)); if (!res[0]) return error(404); if (res[0].authorId === user.id) return error(403); return; }; export const actions = { default: async (event) => { const user = await ensureAuth(event); if (!event.params.aktiId) return error(404); const akti = await db .select({ id: aktis.id, version: aktis.version, author: aktis.author }) .from(aktis) .limit(1) .where(eq(aktis.id, event.params.aktiId)); if (!akti || akti.length == 0) return error(404); if (akti[0].author == user.id) return error(403); const rating = ( await extractFormData( event.request, v.object({ comment: v.pipe(v.string(), v.minLength(5)), rating: v.pipe( v.string(), v.transform((i) => Number.parseFloat(i)), v.minValue(0), v.maxValue(5) ) }) ) ).data; if (!rating) return error(400); await db.insert(ratings).values({ ...rating, userId: user.id, aktiId: event.params.aktiId, aktiVersion: akti[0].version }); return redirect(303, resolve(`/akti/[aktiId]`, { aktiId: event.params.aktiId })); } } satisfies Actions;