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— для швидкої фільтрації