diff --git a/src/lib/server/database/entities/MrX.entity.ts b/src/lib/server/database/entities/MrX.entity.ts index 2095160a611fd3af1d86ae5d1b4675232853655c..bafad280338d71b5c13536428b3b12fb8b5f95ef 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 ce7ee21c1f9f2f341ccbc4dd352f30a0bd14c9dc..f03638a544a423d097378564838e7b51115f9f31 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 615929a63fa6d20e7ac395c49b0a999d0b9575bb..bf238bc3aaf8148ac77b9c8f649d3c3df4ee5a51 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 37091d68bc297646e498f7ecced3fd3515abc400..4cd88eef238aedeeee0552135d423661ca55d94c 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>