refactor: explicit migrate/seed scripts, no auto-init at server start

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 <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-05-06 16:53:37 +03:00
parent d9e9e65328
commit 09b80ca78a
3 changed files with 18 additions and 3 deletions
+1
View File
@@ -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": {
+4
View File
@@ -0,0 +1,4 @@
'use strict';
require('../controllers/permissionsController').seedDefaults();
require('../controllers/gamificationController').seedAchievements();
console.log('[seed-permissions] OK');
+13 -3
View File
@@ -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');