add blog editor
This commit is contained in:
@@ -1,29 +1,50 @@
|
||||
import { db } from '$lib/server/db';
|
||||
import { blogArticles } from '$lib/server/db/schema';
|
||||
import { redirect } from '@sveltejs/kit';
|
||||
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 () => {
|
||||
const articles = await db.select().from(blogArticles);
|
||||
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
|
||||
blogArticles: articles,
|
||||
isAdmin: admin
|
||||
};
|
||||
};
|
||||
|
||||
export const actions = {
|
||||
default: async ({ request }): Promise<Response> => {
|
||||
const formData = await request.formData();
|
||||
default: async (event) => {
|
||||
requireAdmin(event);
|
||||
|
||||
const blogArticle = await db
|
||||
.insert(blogArticles)
|
||||
.values({
|
||||
title: formData.get('title')?.toString(),
|
||||
slug: formData.get('slug')?.toString(),
|
||||
content: formData.get('content')?.toString()
|
||||
})
|
||||
.returning();
|
||||
const formData = await event.request.formData();
|
||||
const parsed = createArticleSchema.safeParse({
|
||||
title: formData.get('title')?.toString()
|
||||
});
|
||||
|
||||
return redirect(303, `/blog/${blogArticle[0].slug}`);
|
||||
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`);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user