From b0a0a71cfe97ea6a73fbe2c8548aab525f430cf3 Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 9 Jun 2026 15:33:25 +0200 Subject: [PATCH] chore(final-docs): script to configure the 4 grand-final file requirements --- .../configure-grand-final-requirements.mjs | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 scripts/configure-grand-final-requirements.mjs diff --git a/scripts/configure-grand-final-requirements.mjs b/scripts/configure-grand-final-requirements.mjs new file mode 100644 index 0000000..44e65fa --- /dev/null +++ b/scripts/configure-grand-final-requirements.mjs @@ -0,0 +1,33 @@ +// scripts/configure-grand-final-requirements.mjs +// Usage: node scripts/configure-grand-final-requirements.mjs (dry-run, prints plan) +// node scripts/configure-grand-final-requirements.mjs --apply (writes) +import { PrismaClient } from '@prisma/client' +const p = new PrismaClient() +const APPLY = process.argv.includes('--apply') + +const TARGET = [ + { name: 'Final Presentation', acceptedMimeTypes: ['application/pdf'], sortOrder: 1, renameFrom: 'PDF presentation support' }, + { name: 'Final Business Plan', acceptedMimeTypes: ['application/pdf'], sortOrder: 2 }, + { name: '1-minute Video', acceptedMimeTypes: ['video/*'], sortOrder: 3, renameFrom: '1 minute video' }, + { name: 'Executive Summary', acceptedMimeTypes: ['application/pdf'], sortOrder: 4 }, +] + +const run = async () => { + const round = await p.round.findFirst({ where: { roundType: 'LIVE_FINAL' }, orderBy: { sortOrder: 'desc' } }) + if (!round) throw new Error('No LIVE_FINAL round') + const existing = await p.fileRequirement.findMany({ where: { roundId: round.id } }) + console.log(`Round "${round.name}" (${round.id}); existing reqs: ${existing.map((r) => r.name).join(', ') || 'none'}`) + + for (const t of TARGET) { + const match = existing.find((r) => r.name === t.name || (t.renameFrom && r.name === t.renameFrom)) + if (match) { + console.log(`UPDATE "${match.name}" -> name="${t.name}" required=true sort=${t.sortOrder} mimes=${t.acceptedMimeTypes}`) + if (APPLY) await p.fileRequirement.update({ where: { id: match.id }, data: { name: t.name, acceptedMimeTypes: t.acceptedMimeTypes, isRequired: true, sortOrder: t.sortOrder } }) + } else { + console.log(`CREATE "${t.name}" required=true sort=${t.sortOrder} mimes=${t.acceptedMimeTypes}`) + if (APPLY) await p.fileRequirement.create({ data: { roundId: round.id, name: t.name, acceptedMimeTypes: t.acceptedMimeTypes, isRequired: true, sortOrder: t.sortOrder } }) + } + } + console.log(APPLY ? 'APPLIED.' : 'DRY-RUN (pass --apply to write).') +} +run().catch((e) => { console.error(e); process.exit(1) }).finally(() => p.$disconnect())