From 09b80ca78a656114388d2fc3921e62dee9a3e70f Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Wed, 6 May 2026 16:53:37 +0300 Subject: [PATCH] refactor: explicit migrate/seed scripts, no auto-init at server start MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Auto-running migrations on every server boot is dangerous — a broken migration silently corrupts data or blocks server start. Now require explicit `npm run migrate && npm run seed:permissions` before start. Boot asserts schema exists (users + role_permissions tables) and fails fast with a clear message otherwise. Co-Authored-By: Claude Sonnet 4.6 --- backend/package.json | 1 + backend/src/db/seed-permissions.js | 4 ++++ backend/src/server.js | 16 +++++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 backend/src/db/seed-permissions.js diff --git a/backend/package.json b/backend/package.json index 434b6b5..846d3bf 100644 --- a/backend/package.json +++ b/backend/package.json @@ -8,6 +8,7 @@ "dev": "nodemon src/server.js", "migrate": "node src/db/migrate.js", "seed": "node src/db/seed.js", + "seed:permissions": "node src/db/seed-permissions.js", "test": "node --test tests/*.test.js" }, "dependencies": { diff --git a/backend/src/db/seed-permissions.js b/backend/src/db/seed-permissions.js new file mode 100644 index 0000000..7f01e04 --- /dev/null +++ b/backend/src/db/seed-permissions.js @@ -0,0 +1,4 @@ +'use strict'; +require('../controllers/permissionsController').seedDefaults(); +require('../controllers/gamificationController').seedAchievements(); +console.log('[seed-permissions] OK'); diff --git a/backend/src/server.js b/backend/src/server.js index 0ac084c..ebca0c6 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -1,9 +1,19 @@ const config = require('./config'); // validates .env, fails fast on error const logger = require('./utils/logger'); // structured logging -require('./db/migrate'); // авто-миграция при каждом старте -const { seedDefaults: seedPermissions } = require('./controllers/permissionsController'); -seedPermissions(); +/* ── Schema check — fail fast if migrate hasn't been run ── */ +const _bootDb = require('./db/db'); +try { + _bootDb.prepare('SELECT 1 FROM users LIMIT 1').get(); + _bootDb.prepare('SELECT 1 FROM role_permissions LIMIT 1').get(); +} catch (e) { + process.stderr.write( + '[boot] FATAL: schema not initialized.\n' + + 'Run: npm run migrate && npm run seed:permissions\n' + ); + process.exit(1); +} + const express = require('express'); const cors = require('cors'); const path = require('path');