/** * Database Schema Initialization * * Ensures normalized EAV schema is initialized before services use it. */ import { getDatabaseAdapter } from './singleton.js'; import { NORMALIZED_SCHEMA_POSTGRES, NORMALIZED_SCHEMA_SQLITE } from './normalized-schema.js'; import { logger } from '../logger.js'; let initialized = false; let initializationPromise: Promise | null = null; /** * Ensure database schema is initialized */ export async function ensureSchemaInitialized(): Promise { if (initialized) return; if (initializationPromise) { await initializationPromise; return; } initializationPromise = (async () => { try { // Use shared database adapter singleton const db = getDatabaseAdapter(); const isPostgres = db.isPostgres === true; // Execute schema const schema = isPostgres ? NORMALIZED_SCHEMA_POSTGRES : NORMALIZED_SCHEMA_SQLITE; await db.exec(schema); logger.info(`Database schema initialized (${isPostgres ? 'PostgreSQL' : 'SQLite'})`); initialized = true; } catch (error) { logger.error('Failed to initialize database schema', error); throw error; } })(); await initializationPromise; }