diff --git a/web/prisma/schema.prisma b/web/prisma/schema.prisma
index 23c8013..3a91c05 100644
--- a/web/prisma/schema.prisma
+++ b/web/prisma/schema.prisma
@@ -56,6 +56,7 @@ model Team {
name String @unique
Submission Submission[]
contests Contest[] @relation("TeamContestRelation")
+ password String
}
model Contest {
diff --git a/web/src/routes/admin/teams/+page.svelte b/web/src/routes/admin/teams/+page.svelte
index 2f64e8d..736a78d 100644
--- a/web/src/routes/admin/teams/+page.svelte
+++ b/web/src/routes/admin/teams/+page.svelte
@@ -76,7 +76,7 @@
{#each data.teams as team}
-
+
{/each}
diff --git a/web/src/routes/admin/teams/[teamId]/+page.server.ts b/web/src/routes/admin/teams/[teamId]/+page.server.ts
new file mode 100644
index 0000000..c4e1267
--- /dev/null
+++ b/web/src/routes/admin/teams/[teamId]/+page.server.ts
@@ -0,0 +1,38 @@
+import { db } from '$lib/server/prisma';
+import { error } from 'console';
+import type { Actions, PageServerLoad } from './$types';
+import { redirect } from '@sveltejs/kit';
+
+export const load = (async ({ params }) => {
+ const teamId = parseInt(params.teamId);
+ if (isNaN(teamId)) {
+ throw error(400, 'Invalid request');
+ }
+ const team = await db.team.findUnique({
+ where: { id: teamId },
+ select: { id: true, name: true, password: true }
+ });
+ if (!team) {
+ throw redirect(302, '/admin/teams');
+ }
+ return { team: team };
+}) satisfies PageServerLoad;
+
+export const actions = {
+ password: async ({ request, params }) => {
+ const data = await request.formData();
+ const newPass = data.get('password');
+ if (!newPass) {
+ return { success: false };
+ }
+ try {
+ await db.team.update({
+ where: { id: parseInt(params.teamId) },
+ data: { password: newPass.toString() }
+ });
+ } catch {
+ return { success: false };
+ }
+ return { success: true };
+ }
+} satisfies Actions;
diff --git a/web/src/routes/admin/teams/[teamId]/+page.svelte b/web/src/routes/admin/teams/[teamId]/+page.svelte
new file mode 100644
index 0000000..f4e5ebf
--- /dev/null
+++ b/web/src/routes/admin/teams/[teamId]/+page.svelte
@@ -0,0 +1,69 @@
+
+
+
+ Team
+
+
+{data.team.name}
+
+All Teams
+
+
+
+
+ Name |
+ Id |
+ Password |
+
+
+
+
+ {data.team.name} |
+ {data.team.id} |
+ {data.team.password} |
+
+
+
+
+{#if form && !form.success}
+ Invalid entry
+{/if}
+
+{#if !changingPassword}
+
+{:else}
+
+{/if}