A social knowledge tool for researchers built on ATProto
1import { drizzle } from 'drizzle-orm/postgres-js';
2import { migrate } from 'drizzle-orm/postgres-js/migrator';
3import postgres from 'postgres';
4import { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
5import { databaseConfig, configService } from '../config';
6
7export class DatabaseFactory {
8 private static instance: PostgresJsDatabase | null = null;
9
10 public static createConnection(
11 dbConfig = databaseConfig,
12 ): PostgresJsDatabase {
13 if (!this.instance) {
14 const connectionString = dbConfig.url;
15
16 const queryClient = postgres(connectionString, {
17 ssl: configService.get().environment === 'local' ? false : 'require',
18 });
19 this.instance = drizzle(queryClient);
20 }
21
22 return this.instance;
23 }
24
25 public static async runMigrations(db: PostgresJsDatabase): Promise<void> {
26 await migrate(db, {
27 migrationsFolder: './src/shared/infrastructure/database/migrations',
28 });
29 }
30}