diff --git a/web/src/routes/+page.svelte b/web/src/routes/+page.svelte
index b6402fe..cdb5790 100644
--- a/web/src/routes/+page.svelte
+++ b/web/src/routes/+page.svelte
@@ -25,13 +25,13 @@
{i.student_id}
- {i.grade}
+ {i.grade ?? 'Not submitted'}
{/each}
diff --git a/web/src/routes/+page.ts b/web/src/routes/+page.ts
index 4724a7e..f423ca5 100644
--- a/web/src/routes/+page.ts
+++ b/web/src/routes/+page.ts
@@ -2,7 +2,7 @@ import type { PageLoad } from './$types';
type GradeInfo = {
student_id: string;
- grade: number;
+ grade: number | null;
};
type LatestData = {
diff --git a/web/src/routes/homework/[semester]/[homework_name]/+page.svelte b/web/src/routes/homework/[semester]/[homework_name]/+page.svelte
new file mode 100644
index 0000000..cdb5790
--- /dev/null
+++ b/web/src/routes/homework/[semester]/[homework_name]/+page.svelte
@@ -0,0 +1,39 @@
+
+
+
+ {data.data.semester.toUpperCase()}
+ {data.data.name}
+
+
+
+
+
+
+ Student ID
+ Grade
+
+
+
+
+ {#each data.data.info as i}
+
+
+
+ {i.student_id}
+
+
+ {i.grade ?? 'Not submitted'}
+
+ {/each}
+
+
+
diff --git a/web/src/routes/homework/[semester]/[homework_name]/+page.ts b/web/src/routes/homework/[semester]/[homework_name]/+page.ts
new file mode 100644
index 0000000..3243bad
--- /dev/null
+++ b/web/src/routes/homework/[semester]/[homework_name]/+page.ts
@@ -0,0 +1,24 @@
+import { error } from '@sveltejs/kit';
+import type { PageLoad } from './$types';
+
+type GradeInfo = {
+ student_id: string;
+ grade: number | null;
+};
+
+export const load: PageLoad = async ({ params, fetch }) => {
+ const res = await fetch(`/api/grade/${params.semester}/${params.homework_name}`);
+ if (!res.ok) {
+ error(res.status, await res.json());
+ }
+
+ const info: GradeInfo[] = await res.json();
+
+ return {
+ data: {
+ semester: params.semester,
+ name: params.homework_name,
+ info
+ }
+ };
+};
diff --git a/web/src/routes/[semester]/[student_id]/+page.svelte b/web/src/routes/student/[semester]/[student_id]/+page.svelte
similarity index 70%
rename from web/src/routes/[semester]/[student_id]/+page.svelte
rename to web/src/routes/student/[semester]/[student_id]/+page.svelte
index 3e545d5..258a354 100644
--- a/web/src/routes/[semester]/[student_id]/+page.svelte
+++ b/web/src/routes/student/[semester]/[student_id]/+page.svelte
@@ -23,8 +23,15 @@
{#each data.data.info as i}
- {i.name}
- {i.grade}
+
+
+ {i.name}
+
+
+ {i.grade ?? 'Not submitted'}
{/each}
diff --git a/web/src/routes/[semester]/[student_id]/+page.ts b/web/src/routes/student/[semester]/[student_id]/+page.ts
similarity index 75%
rename from web/src/routes/[semester]/[student_id]/+page.ts
rename to web/src/routes/student/[semester]/[student_id]/+page.ts
index e6c181b..d3c7d60 100644
--- a/web/src/routes/[semester]/[student_id]/+page.ts
+++ b/web/src/routes/student/[semester]/[student_id]/+page.ts
@@ -1,12 +1,17 @@
+import { error } from '@sveltejs/kit';
import type { PageLoad } from './$types';
type GradeInfo = {
name: string;
- grade: number;
+ grade: number | null;
};
export const load: PageLoad = async ({ params, fetch }) => {
const res = await fetch(`/api/student/${params.semester}/${params.student_id}`);
+ if (!res.ok) {
+ error(res.status, await res.json());
+ }
+
const info: GradeInfo[] = await res.json();
return {