From 1c9950d29f8d38214c3c6cd2a95c21c82d8410f8 Mon Sep 17 00:00:00 2001 From: Daniel Volz Date: Sat, 20 Dec 2025 21:14:43 +0100 Subject: [PATCH] feat: refactor migration handling to ensure server waits for database migrations before starting --- backend/src/db/client.ts | 6 +++--- backend/src/index.ts | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) 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)) {