boredgame/src/routes/(app)/(protected)/collections/[id]/+page.server.ts

165 lines
3.6 KiB
TypeScript
Raw Normal View History

import { error, type Actions } from '@sveltejs/kit';
2024-03-08 19:03:34 +00:00
import { and, eq } from 'drizzle-orm';
import { zod } from 'sveltekit-superforms/adapters';
import { superValidate } from 'sveltekit-superforms/server';
import { redirect } from 'sveltekit-flash-message/server';
import { modifyListGameSchema } from '$lib/validations/zod-schemas';
import db from '$lib/drizzle.js';
import { notSignedInMessage } from '$lib/flashMessages.js';
2024-03-08 19:03:34 +00:00
import { games, wishlist_items, wishlists } from '../../../../schema.js';
export async function load(event) {
const { params, locals } = event;
if (!locals.user) {
redirect(302, '/login', notSignedInMessage, event);
}
console.log('Wishlist load User id', locals.user.id);
try {
const wishlist = await db.query.wishlists.findFirst({
where: eq(wishlists.user_id, locals.user.id)
});
if (!wishlist) {
redirect(302, '/404');
}
const items = await db.query.wishlist_items.findMany({
where: eq(wishlist_items.wishlist_id, wishlist.id),
with: {
game: {
columns: {
id: true,
name: true,
thumb_url: true
}
}
}
});
console.log('wishlist', wishlist);
return {
items
};
} catch (e) {
console.error(e);
}
redirect(302, '/404');
}
export const actions: Actions = {
// Add game to a wishlist
add: async (event) => {
const { locals } = event;
const form = await superValidate(event, zod(modifyListGameSchema));
try {
if (!locals.user) {
redirect(302, '/login', notSignedInMessage, event);
}
const game = await db.query.games.findFirst({
where: eq(games.id, form.data.id)
});
if (!game) {
// game = await prisma.game.create({
// data: {
// name: form.name
// }
// });
console.log('game not found');
redirect(302, '/404');
}
if (game) {
const wishlist = await db.query.wishlists.findFirst({
where: eq(wishlists.user_id, locals.user.id)
});
if (!wishlist) {
console.log('Wishlist not found');
return error(404, 'Wishlist not found');
}
await db.insert(wishlist_items).values({
game_id: game.id,
wishlist_id: wishlist.id
});
}
return {
form
};
} catch (e) {
console.error(e);
return error(500, 'Something went wrong');
}
},
// Create new wishlist
create: async (event) => {
const { locals } = event;
if (!locals.user) {
redirect(302, '/login', notSignedInMessage, event);
}
return error(405, 'Method not allowed');
},
// Delete a wishlist
delete: async ({ locals }) => {
if (!locals.user) {
redirect(302, '/login');
}
return error(405, 'Method not allowed');
},
// Remove game from a wishlist
remove: async (event) => {
const { locals } = event;
const form = await superValidate(event, zod(modifyListGameSchema));
try {
if (!locals.user) {
redirect(302, '/login', notSignedInMessage, event);
}
const game = await db.query.games.findFirst({
where: eq(games.id, form.data.id)
});
if (!game) {
// game = await prisma.game.create({
// data: {
// name: form.name
// }
// });
console.log('game not found');
redirect(302, '/404');
}
if (game) {
const wishlist = await db.query.wishlists.findFirst({
where: eq(wishlists.user_id, locals.user.id)
});
if (!wishlist) {
console.log('Wishlist not found');
return error(404, 'Wishlist not found');
}
await db.delete(wishlist_items).where(and(
eq(wishlist_items.wishlist_id, wishlist.id),
eq(wishlist_items.game_id, game.id)
));
}
return {
form
};
} catch (e) {
console.error(e);
return error(500, 'Something went wrong');
}
}
};