feat: refactor database connection handling and add legacy map loading functionality

- Updated check-connections.mts to use Prisma with PostgreSQL adapter.
- Introduced databaseUrl.ts for resolving database URLs from environment variables.
- Added legacyMapLoader.ts to load and parse legacy map data.
- Implemented scenarioSeeder.ts to seed scenario data into the database.
- Created tests for scenario seeding in scenarioSeeder.test.ts.
- Configured Prisma datasource in prisma.config.ts to support dynamic database URLs.
This commit is contained in:
2025-12-29 05:49:25 +00:00
parent 7124483001
commit 9fe4c8f96c
12 changed files with 1863 additions and 81 deletions
+23 -7
View File
@@ -1,4 +1,6 @@
import { Prisma, PrismaClient } from '@prisma/client';
import { PrismaPg } from '@prisma/adapter-pg';
import { Pool } from 'pg';
export interface PostgresConfig {
url: string;
@@ -11,10 +13,21 @@ export interface PostgresConnector {
disconnect(): Promise<void>;
}
const buildDatabaseUrlFromEnv = (
env: NodeJS.ProcessEnv
): string => {
const host = env.POSTGRES_HOST ?? '127.0.0.1';
const port = env.POSTGRES_PORT ?? '15432';
const user = env.POSTGRES_USER ?? 'sammo';
const password = env.POSTGRES_PASSWORD ?? '';
const dbName = env.POSTGRES_DB ?? 'sammo';
return `postgresql://${user}:${password}@${host}:${port}/${dbName}?schema=public`;
};
export const resolvePostgresConfigFromEnv = (
env: NodeJS.ProcessEnv = process.env
): PostgresConfig => {
const url = env.DATABASE_URL ?? '';
const url = env.DATABASE_URL ?? buildDatabaseUrlFromEnv(env);
if (!url) {
throw new Error('DATABASE_URL is required to create a Postgres client.');
}
@@ -25,18 +38,21 @@ export const resolvePostgresConfigFromEnv = (
export const createPostgresConnector = (
config: PostgresConfig
): PostgresConnector => {
const pool = new Pool({
connectionString: config.url,
});
const adapter = new PrismaPg(pool);
const prisma = new PrismaClient({
datasources: {
db: {
url: config.url,
},
},
adapter,
log: config.log,
});
return {
prisma,
connect: () => prisma.$connect(),
disconnect: () => prisma.$disconnect(),
disconnect: async () => {
await prisma.$disconnect();
await pool.end();
},
};
};