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