Files
freeCodeCamp/api/tools/exam-environment/generate/index.ts
2025-04-24 10:27:23 +05:30

62 lines
1.5 KiB
TypeScript

import { PrismaClient } from '@prisma/client';
import { generateExam } from '../../../src/exam-environment/utils/exam';
import { MONGOHQ_URL } from '../../../src/utils/env';
const args = process.argv.slice(2);
const ENV_EXAM_ID = args[0];
const NUMBER_OF_EXAMS_TO_GENERATE = Number(args[1]);
if (!ENV_EXAM_ID) {
throw Error('First argument must be the EnvExam _id');
}
if (!NUMBER_OF_EXAMS_TO_GENERATE) {
throw Error('Second argument must be an unsigned integer');
}
const prisma = new PrismaClient({
datasources: {
db: {
url: MONGOHQ_URL
}
}
});
/// TODO:
/// 1. Deprecate all previous generated exams for a given exam id?
async function main() {
console.info('Connecting to cluster...');
await prisma.$connect();
console.info('Connected.');
const exam = await prisma.envExam.findUnique({
where: {
id: ENV_EXAM_ID
}
});
if (!exam) {
throw Error(`No exam with id "${ENV_EXAM_ID}" found.`);
}
let numberOfExamsGenerated = 0;
console.info(
`Exam with _id ${ENV_EXAM_ID} found. Generating ${NUMBER_OF_EXAMS_TO_GENERATE} exams...`
);
while (numberOfExamsGenerated < NUMBER_OF_EXAMS_TO_GENERATE) {
try {
const generatedExam = generateExam(exam);
await prisma.envGeneratedExam.create({
data: generatedExam
});
numberOfExamsGenerated++;
console.info(`Generated ${numberOfExamsGenerated} exams`);
} catch (e) {
console.log(e);
}
}
console.log(`Finished generating exams.`);
}
void main();