Files
freeCodeCamp/api/tools/exam-environment/test/index.ts
2025-09-19 13:28:06 +05:30

43 lines
1.4 KiB
TypeScript

//! Check the records on the database matches the Prisma schema
//!
//! This script should be run, before any deployments with Exam schema changes.
//! WARNING: This script queries every single record in the `Env<>` collections.
import { PrismaClient } from '@prisma/client';
import { PrismaClientKnownRequestError } from '@prisma/client/runtime/library.js';
import { MONGOHQ_URL } from '../../../src/utils/env.js';
const prisma = new PrismaClient({
datasources: {
db: {
url: MONGOHQ_URL
}
}
});
async function main() {
await prisma.$connect();
try {
const examEnvironmentExam = await prisma.examEnvironmentExam.findMany();
const examEnvironmentGeneratedExam =
await prisma.examEnvironmentGeneratedExam.findMany();
const examEnvironmentExamAttempt =
await prisma.examEnvironmentExamAttempt.findMany();
console.log('Number of exams:', examEnvironmentExam.length);
console.log(
'Number of generated exams:',
examEnvironmentGeneratedExam.length
);
console.log('Number of exam attempts:', examEnvironmentExamAttempt.length);
// NOTE: This is not strictly true. E.g. If a `Boolean` becomes an `Int`, Prisma converts it instead of throwing.
console.log('\nSUCCESS! The database schema matches the Prisma schema.');
} catch (error) {
if (error instanceof PrismaClientKnownRequestError) {
console.log(error.message);
console.info('\nCHECK DATABASE SCHEMA!');
}
}
}
void main();