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}