import { db } from '$lib/server/db'; import { blogArticles } from '$lib/server/db/schema'; import { isAdmin, requireAdmin } from '$lib/server/auth'; import { uniqueSlug } from '$lib/server/slugify'; import { createArticleSchema } from '$lib/validation/blog'; import { desc, eq } from 'drizzle-orm'; import { fail, redirect } from '@sveltejs/kit'; import type { PageServerLoad } from './$types.js'; export const load: PageServerLoad = async (event) => { const admin = isAdmin(event); const articles = admin ? await db.select().from(blogArticles).orderBy(desc(blogArticles.createdAt)) : await db .select() .from(blogArticles) .where(eq(blogArticles.status, 'published')) .orderBy(desc(blogArticles.createdAt)); return { blogArticles: articles, isAdmin: admin }; }; export const actions = { default: async (event) => { requireAdmin(event); const formData = await event.request.formData(); const parsed = createArticleSchema.safeParse({ title: formData.get('title')?.toString() }); if (!parsed.success) { return fail(400, { message: 'Title is required' }); } const slug = await uniqueSlug(parsed.data.title); await db.insert(blogArticles).values({ title: parsed.data.title, slug, status: 'draft' }); return redirect(303, `/blog/${slug}/edit`); } };