diff --git a/src/routes/(app)/mappools/+page.server.ts b/src/routes/(app)/mappools/+page.server.ts new file mode 100644 index 0000000..0120554 --- /dev/null +++ b/src/routes/(app)/mappools/+page.server.ts @@ -0,0 +1,32 @@ +import { db } from '$lib/server/db'; +import { redirect } from '@sveltejs/kit'; +import type { PageServerLoad, Actions } from './$types'; +import { mappool } from '$lib/server/db/schema'; + +export const load: PageServerLoad = async ({ locals }) => { + if (!locals.user) redirect(302, '/'); + + const mappools = await db.query.mappool.findMany({ + with: { slots: true }, + orderBy: (m, { desc }) => [desc(m.createdAt)] + }); + + return { mappools }; +}; + +export const actions: Actions = { + create: async ({ request, locals }) => { + if (!locals.user) redirect(302, '/'); + + const form = await request.formData(); + const name = form.get('name')?.toString()?.trim(); + if (!name) return { error: 'Name is required' }; + + const [created] = await db + .insert(mappool) + .values({ name, createdBy: locals.user.id }) + .returning(); + + redirect(303, `/mappools/${created.id}`); + } +}; diff --git a/src/routes/(app)/mappools/+page.svelte b/src/routes/(app)/mappools/+page.svelte new file mode 100644 index 0000000..d54b111 --- /dev/null +++ b/src/routes/(app)/mappools/+page.svelte @@ -0,0 +1,66 @@ + + +
Create and manage your beatmap pools
++ {pool.slots.length} map{pool.slots.length !== 1 ? 's' : ''} + · Created {new Date(pool.createdAt).toLocaleDateString()} +
+No mappools yet. Create one to get started.
++ {data.pool.slots.length} map{data.pool.slots.length !== 1 ? 's' : ''} +
+Beatmap #{slot.beatmapId}
+ {/if} +No maps yet. Add your first map above.
+