/
diloytd
/
shield
Обзор
Документация
Войти
/
diloytd
/
shield
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/database/database.js
110 строк
3 KB
diloytd
first commit
15 июл 2026, 10:48
15 июл 2026, 10:48
b863286
Код
Авторство
О чём код?
/** * Модуль работы с базой данных SQLite. * Содержит только операции с БД, без бизнес-логики. * * Выбран better-sqlite3: синхронный API, высокая производительность, * нативная интеграция с SQLite. Удобен в main-процессе Electron, * где не нужны асинхронные обёртки для простых SQL-запросов. */ const fs = require('fs'); const Database = require('better-sqlite3'); const { DATABASE_FOLDER, DATABASE_PATH } = require('../constants'); const { createTables } = require('./schema'); /** @type {import('better-sqlite3').Database|null} Экземпляр подключения к SQLite. */ let db = null; /** * Создаёт папку для базы данных, если она ещё не существует. * @returns {void} */ const ensureDatabaseFolder = () => { if (!fs.existsSync(DATABASE_FOLDER)) { fs.mkdirSync(DATABASE_FOLDER, { recursive: true }); } }; /** * Настраивает режим работы SQLite после открытия подключения. * @param {import('better-sqlite3').Database} database - Экземпляр подключения к SQLite. * @returns {void} */ const configureDatabase = (database) => { database.pragma('journal_mode = WAL'); database.pragma('foreign_keys = ON'); }; /** * Инициализирует базу данных: подключается к SQLite и создаёт таблицы при первом запуске. * При повторном вызове возвращает уже открытое подключение. * @returns {import('better-sqlite3').Database} Экземпляр подключения к базе данных. */ const initializeDatabase = () => { if (db) { return db; } ensureDatabaseFolder(); db = new Database(DATABASE_PATH); configureDatabase(db); createTables(db); return db; }; /** * Возвращает открытое подключение к базе данных. * При необходимости инициализирует базу данных. * @returns {import('better-sqlite3').Database} Экземпляр подключения к базе данных. */ const getDatabase = () => { return initializeDatabase(); }; /** * Закрывает соединение с базой данных. * Вызывается при завершении работы приложения. * @returns {void} */ const closeDatabase = () => { if (!db) { return; } db.close(); db = null; }; /** * Удаляет файл базы данных и создаёт её заново. * Только для разработки — не вызывается автоматически. * @returns {import('better-sqlite3').Database} Новый экземпляр подключения к базе данных. */ const resetDatabase = () => { closeDatabase(); const filesToRemove = [ DATABASE_PATH, `${DATABASE_PATH}-wal`, `${DATABASE_PATH}-shm`, ]; filesToRemove.forEach((filePath) => { if (!fs.existsSync(filePath)) { return; } fs.unlinkSync(filePath); }); return initializeDatabase(); }; module.exports = { initializeDatabase, getDatabase, closeDatabase, resetDatabase, };