service intervals email tasks

EmailService

EmailService

src/main/operator/interval-services/email.service.ts

Оператор-рівень. Перевіряє email-діалоги фаворитів і створює UnansweredEmail таски якщо є непрочитані вхідні листи.


Інтервал

~60 сек (±20% рандом для розмазування навантаження).


Логіка

  1. Якщо вже є активний UnansweredEmail таск → пропустити (не більше одного за раз)
  2. Отримати анкети з підключеним email (clientEmail.status === connected)
  3. Отримати фаворитів з contactDetails.email + clientEmail.status === connected
  4. Відфільтрувати діалоги перевірені менше 5 хв тому (кеш у checked_email_dialog SQLite)
  5. Відсортувати: нові (ще не перевірені) → найдавніше перевірені
  6. Для кожного діалогу (max 10 за тік, зупинка після першого створеного таска):
    • Отримати повідомлення через apiService.email.getMessages()
    • Знайти найновіше повідомлення по createdAt
    • Якщо вхіднеtaskFactory.tryAddTask(UnansweredEmail)
    • Якщо вихідне або немає повідомлень → пропустити
    • Записати timestamp перевірки в checked_email_dialog

Нюанси

  • Зупиняється одразу після першого створеного таска за тік — не флудить
  • Кеш checked_email_dialog зберігає ladyId_api + manId_api + timestamp в SQLite
  • Не запускається якщо мережа недоступна (networkService.isConnected())

Зв’язки