VersionManagerService
src/main/services/version-manager.service.ts
Для чого це
Виявляє що змінилось між запусками — версія або оператор. Очищає локальну БД щоб старі дані не заважали новій сесії. Викликається на кроці Login (крок 2).
Логіка checkVersionOnLogin(operatorFamilyId)
Читає app_version таблицю → порівнює версію і operatorFamilyId:
| Ситуація | Дія |
|---|---|
| Запису немає (перший запуск) | Зберігає поточну версію і operatorFamilyId |
Змінився operatorFamilyId | clearDataTables() — DELETE з усіх таблиць |
| Змінилась версія | handleVersionChange() → db.initializeTables() (зараз без DROP) |
| Змінилось обидва | Спрацьовують обидва кейси |
| Нічого не змінилось | Нічого не робить |
Після змін → repository.updateVersion(currentVersion, operatorFamilyId).
Методи для ручних операцій
| Метод | Що робить |
|---|---|
clearTables(names[]) | DELETE FROM table для кожної — очищає дані, структура залишається |
dropTables(names[]) | DROP TABLE IF EXISTS — повне видалення |
dropAllTables(keep[]) | DROP всіх крім keep (default: ['app_version']) |
Нюанси
- Singleton через
getInstance() - Зміна оператора = повне очищення — щоб дані одного оператора не змішувались з іншим на тому ж ПК.
getAllTables()динамічно читає список зsqlite_master— очищає навіть нові таблиці handleVersionChange—tablesToDrop = []зараз порожній. Місце для майбутніх міграцій при оновленні схеми- Всі помилки логуються і поглинаються — не блокують логін