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:
@@ -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();
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user