From 1e84b541769f231058694b410949c487641a5596 Mon Sep 17 00:00:00 2001 From: orosmatthew Date: Sun, 7 May 2023 16:30:56 -0400 Subject: [PATCH] [web] Run java files --- web/prisma/schema.prisma | 1 + .../admin/contests/[contestId]/+page.svelte | 7 ++++- .../admin/contests/create/+page.server.ts | 13 ++++++--- .../problems/[problemId]/+page.server.ts | 4 ++- .../admin/problems/[problemId]/+page.svelte | 11 +++++++- .../admin/problems/create/+page.server.ts | 26 ++++++++++------- .../routes/admin/problems/create/+page.svelte | 6 +++- .../routes/api/contest/[session]/+server.ts | 28 +++++++++++++++++++ 8 files changed, 78 insertions(+), 18 deletions(-) create mode 100644 web/src/routes/api/contest/[session]/+server.ts diff --git a/web/prisma/schema.prisma b/web/prisma/schema.prisma index 08338b2..df365c8 100644 --- a/web/prisma/schema.prisma +++ b/web/prisma/schema.prisma @@ -43,6 +43,7 @@ model Submission { model Problem { id Int @id @default(autoincrement()) friendlyName String @unique + pascalName String @unique sampleInput String sampleOutput String realInput String diff --git a/web/src/routes/admin/contests/[contestId]/+page.svelte b/web/src/routes/admin/contests/[contestId]/+page.svelte index 8a4fb63..f404483 100644 --- a/web/src/routes/admin/contests/[contestId]/+page.svelte +++ b/web/src/routes/admin/contests/[contestId]/+page.svelte @@ -1,8 +1,9 @@ @@ -11,6 +12,10 @@

{data.name}

+{#if form && !form.success} +
An error occured
+{/if} +
All Contests diff --git a/web/src/routes/admin/contests/create/+page.server.ts b/web/src/routes/admin/contests/create/+page.server.ts index c8c453d..10b304e 100644 --- a/web/src/routes/admin/contests/create/+page.server.ts +++ b/web/src/routes/admin/contests/create/+page.server.ts @@ -34,7 +34,7 @@ function copyFolderSync(source: string, target: string) { }); } export const actions = { - create: async ({ request, params }) => { + create: async ({ request }) => { const data = await request.formData(); const name = data.get('name'); const problems = (await db.problem.findMany()).filter((problem) => { @@ -75,9 +75,14 @@ export const actions = { await git.init(); await git.checkoutLocalBranch('master'); createdContest.problems.forEach((problem) => { - copyFolderSync( - 'templates/java/problem', - join('temp', team.id.toString(), problem.friendlyName) + fs.mkdirSync(join('temp', team.id.toString(), problem.pascalName)); + fs.writeFileSync( + join('temp', team.id.toString(), problem.pascalName, problem.pascalName + '.java'), + `public class ${problem.pascalName} { + public static void main(String[] args) { + System.out.println("Hello ${problem.pascalName}!"); + } +}` ); }); await git.add('.'); diff --git a/web/src/routes/admin/problems/[problemId]/+page.server.ts b/web/src/routes/admin/problems/[problemId]/+page.server.ts index 9f0727d..cb87d39 100644 --- a/web/src/routes/admin/problems/[problemId]/+page.server.ts +++ b/web/src/routes/admin/problems/[problemId]/+page.server.ts @@ -22,17 +22,19 @@ export const actions = { } const data = await request.formData(); const name = data.get('name'); + const pascalName = data.get('pascalName'); const sampleInput = data.get('sampleInput'); const sampleOutput = data.get('sampleOutput'); const realInput = data.get('realInput'); const realOutput = data.get('realOutput'); - if (!name || !sampleInput || !sampleOutput || !realInput || !realOutput) { + if (!name || !pascalName || !sampleInput || !sampleOutput || !realInput || !realOutput) { return { success: false }; } await db.problem.update({ where: { id: problemId }, data: { + pascalName: pascalName.toString(), friendlyName: name.toString(), sampleInput: sampleInput.toString(), sampleOutput: sampleOutput.toString(), diff --git a/web/src/routes/admin/problems/[problemId]/+page.svelte b/web/src/routes/admin/problems/[problemId]/+page.svelte index b00588e..ea1c09f 100644 --- a/web/src/routes/admin/problems/[problemId]/+page.svelte +++ b/web/src/routes/admin/problems/[problemId]/+page.svelte @@ -61,8 +61,8 @@ {/if}
-

Name

+

Name

+

PascalCase Name (for filenames)

+
+ +

Sample Data

diff --git a/web/src/routes/admin/problems/create/+page.server.ts b/web/src/routes/admin/problems/create/+page.server.ts index dfe03af..ac725e7 100644 --- a/web/src/routes/admin/problems/create/+page.server.ts +++ b/web/src/routes/admin/problems/create/+page.server.ts @@ -5,23 +5,29 @@ export const actions = { create: async ({ request }) => { const data = await request.formData(); const name = data.get('name'); + const pascalName = data.get('pascalName'); const sampleInput = data.get('sampleInput'); const sampleOutput = data.get('sampleOutput'); const realInput = data.get('realInput'); const realOutput = data.get('realOutput'); - if (!name || !sampleInput || !sampleOutput || !realInput || !realOutput) { + if (!name || !pascalName || !sampleInput || !sampleOutput || !realInput || !realOutput) { return { success: false }; } - await db.problem.create({ - data: { - friendlyName: name.toString(), - sampleInput: sampleInput.toString(), - sampleOutput: sampleOutput.toString(), - realInput: realInput.toString(), - realOutput: realOutput.toString() - } - }); + try { + await db.problem.create({ + data: { + pascalName: pascalName.toString(), + friendlyName: name.toString(), + sampleInput: sampleInput.toString(), + sampleOutput: sampleOutput.toString(), + realInput: realInput.toString(), + realOutput: realOutput.toString() + } + }); + } catch { + return { success: false }; + } return { success: true }; } diff --git a/web/src/routes/admin/problems/create/+page.svelte b/web/src/routes/admin/problems/create/+page.svelte index 4b6cf84..75b4465 100644 --- a/web/src/routes/admin/problems/create/+page.svelte +++ b/web/src/routes/admin/problems/create/+page.svelte @@ -27,11 +27,15 @@ {/if} -

Name

+

Name