diff --git a/web/prisma/schema.prisma b/web/prisma/schema.prisma
index eae9959..592a0fc 100644
--- a/web/prisma/schema.prisma
+++ b/web/prisma/schema.prisma
@@ -28,7 +28,10 @@ enum SubmissionState {
}
model Submission {
- id Int @id @default(autoincrement())
- state SubmissionState
- message String?
+ id Int @id @default(autoincrement())
+ createdAt DateTime @default(now())
+ state SubmissionState
+ expectedOutput String
+ actualOutput String
+ message String?
}
diff --git a/web/src/routes/admin/diff/+page.server.ts b/web/src/routes/admin/diff/+page.server.ts
deleted file mode 100644
index 2c949de..0000000
--- a/web/src/routes/admin/diff/+page.server.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import type { PageServerLoad } from './$types';
-import * as Diff from 'diff';
-
-export const load = (async () => {
- let diff = Diff.createTwoFilesPatch('data', 'data', 'abc', 'abd');
- return { diff: diff };
-}) satisfies PageServerLoad;
diff --git a/web/src/routes/admin/diff/[submissionId]/+page.server.ts b/web/src/routes/admin/diff/[submissionId]/+page.server.ts
new file mode 100644
index 0000000..84a6ce7
--- /dev/null
+++ b/web/src/routes/admin/diff/[submissionId]/+page.server.ts
@@ -0,0 +1,23 @@
+import { z } from 'zod';
+import type { PageServerLoad } from './$types';
+import * as Diff from 'diff';
+import { error } from '@sveltejs/kit';
+import { db } from '$lib/server/prisma';
+
+export const load = (async ({ params }) => {
+ const submissionId = parseInt(params.submissionId);
+ if (isNaN(submissionId)) {
+ throw error(400, 'Invalid request');
+ }
+ const submission = await db.submission.findUnique({ where: { id: submissionId } });
+ if (!submission) {
+ throw error(400, 'Invalid submission');
+ }
+ let diff = Diff.createTwoFilesPatch(
+ 'expected',
+ 'actual',
+ submission.expectedOutput,
+ submission.actualOutput
+ );
+ return { diff: diff };
+}) satisfies PageServerLoad;
diff --git a/web/src/routes/admin/diff/+page.svelte b/web/src/routes/admin/diff/[submissionId]/+page.svelte
similarity index 82%
rename from web/src/routes/admin/diff/+page.svelte
rename to web/src/routes/admin/diff/[submissionId]/+page.svelte
index 5b65355..23a5236 100644
--- a/web/src/routes/admin/diff/+page.svelte
+++ b/web/src/routes/admin/diff/[submissionId]/+page.svelte
@@ -2,9 +2,10 @@
import { Diff2HtmlUI } from 'diff2html/lib/ui/js/diff2html-ui-base';
import 'diff2html/bundles/css/diff2html.min.css';
import { onMount } from 'svelte';
- import type { PageData } from './$types';
import type { DiffPostData } from './+server';
import { goto } from '$app/navigation';
+ import type { PageData } from './$types';
+ import { page } from '$app/stores';
export let data: PageData;
@@ -34,22 +35,28 @@
async function onSubmitClick() {
if (incorrectBtn.checked) {
- let data: DiffPostData = { correct: false, message: messageText.value };
- await fetch('/admin/diff', { method: 'POST', body: JSON.stringify(data) });
+ let postData: DiffPostData = {
+ correct: false,
+ message: messageText.value
+ };
+ await fetch($page.url, { method: 'POST', body: JSON.stringify(postData) });
goto('/admin/reviews');
} else if (correctBtn.checked) {
- let data: DiffPostData = { correct: true, message: messageText.value };
- await fetch('/admin/diff', { method: 'POST', body: JSON.stringify(data) });
+ let postData: DiffPostData = {
+ correct: true,
+ message: messageText.value
+ };
+ await fetch($page.url, { method: 'POST', body: JSON.stringify(postData) });
goto('/admin/reviews');
}
}