service intervals

DataSyncService

DataSyncService

src/main/operator/interval-services/data-sync.service.ts

Синхронізує локальну SQLite базу даних із сервером. Забезпечує що дані не загубляться якщо програма закривається або мережа тимчасово недоступна.


Інтервал

60 секунд між синками. Якщо залишилось більше 200 записів (batch overflow) — повторює через 3 секунди без очікування.


Що синкається і звідки

Поле в запитіДжерело в кодіЩо зберігає
streamsstreamTrackingService.getSteamsToSync()Інтервали стрімів per анкета per день
onlineladyOnlineRepository.findAll()Записи онлайн-статусів анкет
chatschatSenderRepository.findAll()Відправлені chat-інвайти
mailsmailSenderRepository.findAll()Відправлені листи
viewsladyViewsRepository.findAll()Перегляди профілів
criticalLogscriticalLogsRepository.findAll()Критичні помилки
actionsoperatorActionsRepository.findAll()Дії оператора (для ActivityService)

Також передається supervisorFamilyIdgetUser()) — ідентифікатор сімейства для прив’язки даних на сервері.


Умови відправки

Перед запитом перевіряється batch overflow: якщо будь-яка таблиця має більше 200 записів — кожна таблиця обрізається до 200 (slice(0, BATCH_LIMIT)).

  • Якщо overflow — після успішного синку одразу запускається повторний через 3 сек (щоб відправити залишок)
  • Якщо не overflow — наступний синк через стандартні 60 сек

Після успішного синку

Сервер повертає ISyncDataResponse з масивами ID що були прийняті:

streamIds, chatIds, mailIds, onlineIds, viewsIds, logIds, actionIds

Ці записи видаляються з локальної БД через deleteMany(ids) / removeSyncedIntervals(ids). Решта залишається і піде в наступний батч.


При зупинці (logout)

stop() → виконує фінальний syncData() перед виходом — забезпечує що дані не загубляться. Це останній крок в OperatorRunner.stop().


Failure режим

  • Кожна невдала спроба → attempts++
  • Перед синком: criticalLogsRepository.updateBugged() — маркує “зависші” записи
  • 3 помилки поспільsaveLog({ title: 'Sync data failed!', isError: true })app.quit()
  • При успіху → attempts = 0

Зв’язки