From a46e9a02574c3f7af52f7b35f1339fc60467c294 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aaron=20D=C3=B6tsch?= <aaron@fsmpi.rwth-aachen.de> Date: Mon, 23 Sep 2024 16:40:51 +0200 Subject: [PATCH] update --- src/lib/server/database/entities/MrX.entity.ts | 4 ++-- .../mr-x/[id=number]/data/+server.ts | 5 +++-- .../admin/mr-x/[id=number]/+page.server.ts | 2 +- src/routes/admin/mr-x/[id=number]/+page.svelte | 17 ++++++++++------- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/lib/server/database/entities/MrX.entity.ts b/src/lib/server/database/entities/MrX.entity.ts index 2095160..bafad28 100644 --- a/src/lib/server/database/entities/MrX.entity.ts +++ b/src/lib/server/database/entities/MrX.entity.ts @@ -15,7 +15,7 @@ export class MrXEntry { return (await sql`INSERT INTO mrx_entries ${sql(entry)} RETURNING id`)[0].id; } static async update(id: number, entry: Partial<MrXEntry>): Promise<void> { - await sql`UPDATE mrx_entries SET ${sql(entry)} WHERE id = ${id}`; + await sql`UPDATE mrx_entries SET ${sql(entry)} WHERE id=${id}`; } static async delete(id: number): Promise<void> { await sql`DELETE FROM mrx_entries WHERE id = ${id}`; @@ -33,7 +33,7 @@ export class MrX { m.entries = (data.entries as any[] || []) .map(e => MrXEntry.parse(e)) .filter(e=>!!e) - .sort((a,b)=>a.time.getTime()-b.time.getTime()); + .sort((a,b)=>b.time.getTime()-a.time.getTime()); return m; } static async getById(id: number): Promise<MrX|undefined> { diff --git a/src/routes/(non-admin)/mr-x/[id=number]/data/+server.ts b/src/routes/(non-admin)/mr-x/[id=number]/data/+server.ts index ce7ee21..f03638a 100644 --- a/src/routes/(non-admin)/mr-x/[id=number]/data/+server.ts +++ b/src/routes/(non-admin)/mr-x/[id=number]/data/+server.ts @@ -13,10 +13,11 @@ export async function GET(event){ if(!mrX) error(404, 'Mr. X not found'); const images = await getImages<never>(path.join('mrx', String(id))); const now = new Date(); - const firstFutureEntryIndex = mrX.entries.findLastIndex(e => e.time <= now) + 1; + const lastFutureEntryIndex = mrX.entries.findLastIndex(e => e.time > now); // TODO maybe add next entry time? - const entries = mrX.entries.slice(0, firstFutureEntryIndex).map(e => ({ + const entries = mrX.entries.slice(lastFutureEntryIndex + 1).map(e => ({ ...e, + time: e.time.toISOString(), image: e.image ? images.find(i => i.identifier === e.image) : undefined, })); return new Response(JSON.stringify({ mrX: { ...mrX, entries } } satisfies MrXData)); diff --git a/src/routes/admin/mr-x/[id=number]/+page.server.ts b/src/routes/admin/mr-x/[id=number]/+page.server.ts index 615929a..bf238bc 100644 --- a/src/routes/admin/mr-x/[id=number]/+page.server.ts +++ b/src/routes/admin/mr-x/[id=number]/+page.server.ts @@ -27,7 +27,7 @@ export const actions = { const mrX = await MrX.getById(Number(event.params.id)); if(!mrX) error(404, 'Mr. X not found'); const data = await event.request.formData(); - const datetime = data.get('datetime'); + const datetime = data.get('time'); const text = data.get('text'); const image = data.get('image'); if(!datetime || typeof datetime !== 'string') error(400, 'Invalid datetime'); diff --git a/src/routes/admin/mr-x/[id=number]/+page.svelte b/src/routes/admin/mr-x/[id=number]/+page.svelte index 37091d6..4cd88ee 100644 --- a/src/routes/admin/mr-x/[id=number]/+page.svelte +++ b/src/routes/admin/mr-x/[id=number]/+page.svelte @@ -17,14 +17,14 @@ <H1>{data.mrX.name}</H1> <div class="w-full flex flex-col items-center gap-3"> - {#each data.mrX.entries as entry (entry.id)} - <Entry {entry} /> - {/each} <Card class="w-full max-w-2xl"> - <form method="post" action="?/new" enctype="multipart/form-data" use:enhance={({formData})=>{ - const datetime = new Date(formData.get("datetime") as string); - formData.set("datetime", datetime.toISOString()); // Convert to ISO string to add timezone information - return ()=>invalidateAll(); + <form method="post" action="?/new" enctype="multipart/form-data" use:enhance={({formData, formElement})=>{ + const datetime = new Date(formData.get("time") as string); + formData.set("time", datetime.toISOString()); // Convert to ISO string to add timezone information + return ()=>{ + formElement.reset(); + invalidateAll(); + }; }}> <Input name="time" type="datetime-local" class="mb-2" required /> <Textarea name="text" class="mb-2" /> @@ -32,4 +32,7 @@ <Button type="submit" class="w-full">Erstellen</Button> </form> </Card> + {#each data.mrX.entries as entry (entry.id)} + <Entry {entry} /> + {/each} </div> -- GitLab