feat: add schema validation and event table checks in scenario seeder

This commit is contained in:
2026-01-18 18:13:55 +00:00
parent 4647b67ba3
commit 9ac59893c4
3 changed files with 56 additions and 4 deletions
@@ -37,12 +37,37 @@ type ScenarioSeederPrismaClient = {
};
};
const requiredTables = [
'world_state',
'nation',
'city',
'general',
'diplomacy',
'troop',
'event',
];
const hasRequiredTables = async (prisma: ScenarioSeederPrismaClient, schemaName: string): Promise<boolean> => {
for (const table of requiredTables) {
const result = (await prisma.$queryRawUnsafe(
`SELECT to_regclass('${schemaName}.${table}') as regclass`
)) as Array<{ regclass: string | null }>;
if (!Array.isArray(result) || result.length === 0 || result[0]?.regclass === null) {
return false;
}
}
return true;
};
const canConnectToDatabase = async (url: string): Promise<boolean> => {
const connector = createGamePostgresConnector({ url });
try {
await connector.connect();
const prisma = connector.prisma as unknown as ScenarioSeederPrismaClient;
await prisma.$queryRawUnsafe('SELECT 1');
if (!(await hasRequiredTables(prisma, schema))) {
return false;
}
return true;
} catch {
return false;