50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import type { PageServerLoad, Actions } from './$types';
|
|
import { db } from '$lib/server/db';
|
|
import { wishlists } from '$lib/db/schema';
|
|
import { createId } from '@paralleldrive/cuid2';
|
|
import { fail } from '@sveltejs/kit';
|
|
import { wishlistSchema } from '$lib/server/validation';
|
|
|
|
export const load: PageServerLoad = async (event) => {
|
|
const session = await event.locals.auth();
|
|
return {
|
|
session
|
|
};
|
|
};
|
|
|
|
export const actions: Actions = {
|
|
createWishlist: async ({ request, locals }) => {
|
|
const formData = await request.formData();
|
|
const rawData = Object.fromEntries(formData);
|
|
|
|
const result = wishlistSchema.safeParse(rawData);
|
|
if (!result.success) {
|
|
return fail(400, { success: false, error: result.error.errors.map(e => e.message).join(', ') });
|
|
}
|
|
|
|
const session = await locals.auth();
|
|
const userId = session?.user?.id || null;
|
|
|
|
const ownerToken = createId();
|
|
const publicToken = createId();
|
|
|
|
const [wishlist] = await db
|
|
.insert(wishlists)
|
|
.values({
|
|
...result.data,
|
|
ownerToken,
|
|
publicToken,
|
|
userId
|
|
})
|
|
.returning();
|
|
|
|
return {
|
|
success: true,
|
|
ownerToken,
|
|
publicToken,
|
|
title: wishlist.title,
|
|
createdAt: wishlist.createdAt
|
|
};
|
|
}
|
|
};
|