30 lines
1.5 KiB
JavaScript
30 lines
1.5 KiB
JavaScript
// Служебные команды. В Docker:
|
|||
|
|
// docker compose exec bingo node server/cli.mjs backup — копия базы прямо сейчас
|
||
|
|
// docker compose exec bingo node server/cli.mjs reset --yes — стереть все отметки и ответы (после тестов)
|
||
|
|
import { mkdirSync } from 'node:fs';
|
||
|
|
import { join } from 'node:path';
|
||
|
|
import { openDb } from './db.mjs';
|
||
|
|
|
||
|
|
const dataDir = process.env.DATA_DIR || new URL('../data', import.meta.url).pathname;
|
||
|
|
const [cmd, flag] = process.argv.slice(2);
|
||
|
|
|
||
|
|
mkdirSync(dataDir, { recursive: true });
|
||
|
|
const db = openDb(join(dataDir, 'bingo.sqlite'));
|
||
|
|
|
||
|
|
if (cmd === 'backup') {
|
||
|
|
mkdirSync(join(dataDir, 'backups'), { recursive: true });
|
||
|
|
const file = join(dataDir, 'backups', `bingo-manual-${new Date().toISOString().replace(/[:.]/g, '-')}.sqlite`);
|
||
|
|
db.prepare('VACUUM INTO ?').run(file);
|
||
|
|
console.log(`Копия сохранена: ${file}`);
|
||
|
|
} else if (cmd === 'reset') {
|
||
|
|
if (flag !== '--yes') {
|
||
|
|
console.log('Это сотрёт все отметки, ответы опроса и обнулит батарейку. Повторите с --yes, чтобы подтвердить.');
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
db.exec("BEGIN; DELETE FROM marks; DELETE FROM pulse; UPDATE totals SET value = 0 WHERE key = 'steps'; COMMIT;");
|
||
|
|
console.log('Данные очищены, батарейка обнулена.');
|
||
|
|
} else {
|
||
|
|
console.log('Команды: backup | reset --yes');
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
db.close();
|