diff --git a/backend/src/db/client.ts b/backend/src/db/client.ts index a97e0f7..56f6707 100644 --- a/backend/src/db/client.ts +++ b/backend/src/db/client.ts @@ -9,7 +9,7 @@ const client = createClient({ url }); export const db = drizzle(client); -// Auto-run migrations on import (self-healing database) +// Auto-run migrations (self-healing database) async function runMigrations() { const migrations = [ { name: "image_url", sql: "ALTER TABLE medications ADD COLUMN image_url TEXT" }, @@ -28,5 +28,5 @@ async function runMigrations() { } } -// Run migrations immediately -runMigrations().catch(console.error); +// Export promise so server can await it before starting +export const migrationsReady = runMigrations(); diff --git a/backend/src/index.ts b/backend/src/index.ts index 13b4131..1e55fea 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -10,6 +10,7 @@ import fastifyStatic from "@fastify/static"; import { resolve } from "path"; import { existsSync, mkdirSync } from "fs"; import { env } from "./plugins/env.js"; +import { migrationsReady } from "./db/client.js"; import { healthRoutes } from "./routes/health.js"; import { authRoutes } from "./routes/auth.js"; import { medicationRoutes } from "./routes/medications.js"; @@ -17,6 +18,10 @@ import { settingsRoutes } from "./routes/settings.js"; import { plannerRoutes } from "./routes/planner.js"; import { startReminderScheduler } from "./services/reminder-scheduler.js"; +// Wait for database migrations before anything else +await migrationsReady; +console.log("[DB] Migrations complete, starting server..."); + // Ensure images directory exists const imagesDir = resolve(process.cwd(), "data/images"); if (!existsSync(imagesDir)) {