initial production version

This commit is contained in:
2025-11-25 16:08:50 +01:00
parent 44ce6e38dd
commit 0144e8df1a
108 changed files with 5502 additions and 1780 deletions

View File

@@ -0,0 +1,111 @@
import { redirect } from '@sveltejs/kit';
import type { PageServerLoad, Actions } from './$types';
import { db } from '$lib/server/db';
import { wishlists, savedWishlists } from '$lib/server/schema';
import { eq, and } from 'drizzle-orm';
export const load: PageServerLoad = async (event) => {
const session = await event.locals.auth();
if (!session?.user?.id) {
throw redirect(303, '/signin');
}
const userWishlists = await db.query.wishlists.findMany({
where: eq(wishlists.userId, session.user.id),
with: {
items: {
orderBy: (items, { asc }) => [asc(items.order)]
},
user: true
},
orderBy: (wishlists, { desc }) => [desc(wishlists.createdAt)]
});
const saved = await db.query.savedWishlists.findMany({
where: eq(savedWishlists.userId, session.user.id),
with: {
wishlist: {
with: {
items: {
orderBy: (items, { asc }) => [asc(items.order)]
},
user: true
}
}
},
orderBy: (savedWishlists, { desc }) => [desc(savedWishlists.createdAt)]
});
return {
user: session.user,
wishlists: userWishlists,
savedWishlists: saved
};
};
export const actions: Actions = {
toggleFavorite: async ({ request, locals }) => {
const session = await locals.auth();
if (!session?.user?.id) {
throw redirect(303, '/signin');
}
const formData = await request.formData();
const wishlistId = formData.get('wishlistId') as string;
const isFavorite = formData.get('isFavorite') === 'true';
if (!wishlistId) {
return { success: false, error: 'Wishlist ID is required' };
}
await db.update(wishlists)
.set({ isFavorite: !isFavorite })
.where(eq(wishlists.id, wishlistId));
return { success: true };
},
toggleSavedFavorite: async ({ request, locals }) => {
const session = await locals.auth();
if (!session?.user?.id) {
throw redirect(303, '/signin');
}
const formData = await request.formData();
const savedWishlistId = formData.get('savedWishlistId') as string;
const isFavorite = formData.get('isFavorite') === 'true';
if (!savedWishlistId) {
return { success: false, error: 'Saved wishlist ID is required' };
}
await db.update(savedWishlists)
.set({ isFavorite: !isFavorite })
.where(eq(savedWishlists.id, savedWishlistId));
return { success: true };
},
unsaveWishlist: async ({ request, locals }) => {
const session = await locals.auth();
if (!session?.user?.id) {
throw redirect(303, '/signin');
}
const formData = await request.formData();
const savedWishlistId = formData.get('savedWishlistId') as string;
if (!savedWishlistId) {
return { success: false, error: 'Saved wishlist ID is required' };
}
await db.delete(savedWishlists)
.where(and(
eq(savedWishlists.id, savedWishlistId),
eq(savedWishlists.userId, session.user.id)
));
return { success: true };
}
};