system

Database

Database (SQLite)

src/main/database/database.service.ts


Для чого це

Локальний буфер для даних які ще не дійшли до бекенду. Клієнт записує події (відправки, стріми, дії оператора) в SQLite, а DataSyncService відправляє їх на сервер. Якщо оператор перелогінився або програма впала — дані не губляться, синк відбудеться при наступному старті.


Що робить

  • Singleton через DatabaseService.getInstance()
  • Використовує better-sqlite3 (синхронний SQLite) + Drizzle ORM для типізованих запитів
  • Надає getDb() → Drizzle instance для ORM-запитів
  • Надає getSqlite() → нативний sqlite3 для прямих SQL запитів
  • Надає transaction() → обгортка для транзакцій

Таблиці

ТаблицяЩо зберігає
app_versionПоточна версія і operatorFamilyId (для VersionManagerService)
stream_intervalsІнтервали стріму по анкетах (start/stop/isActive)
chat_sendersВідправлені чат-повідомлення (mongo_id, ladyId, manId, тип)
mail_sendersВідправлені листи
lady_onlineПодії онлайн-статусу анкет
lady_viewsПерегляди анкет манами
critical_logsКритичні логи (помилки вкладок, JSESSIONID події)
operator_actionsДії оператора (для аудиту)

Нюанси

  • WAL mode (journal_mode = WAL) — дозволяє паралельне читання і запис без блокувань
  • 64 MB кеш + memory-mapped I/O — максимальна швидкість читання
  • База лежить в app.getPath('userData') через DatabaseConfig
  • Директорія створюється автоматично якщо відсутня
  • Індекси на ladyId_api, manId_api, timestamp у chat_senders і mail_senders — для швидкої фільтрації