34 lines
2.1 KiB
JavaScript
34 lines
2.1 KiB
JavaScript
|
|
// 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())
|