Сервіс блокувань
Окремий екземпляр для кожної TU. Тримає індекс блокувань для швидкої перевірки RU.
BlockState {
blockedByTU
blockedByRU
}Методи
isBlockedByRU(ruId)isBlockedByTU(ruId)isBlocked(ruId)— будь-який напрямок блокування;replaceBlockedByRU(ruIds)— повна заміна списку;updateMany(blockedRuIds, unblockedRuIds)— оновлення всіх RU, для яких прохід повернув явний стан;update(ruId, state)— точкове оновлення; якщо RU є фаворитом, змінені поля також передаються у фаворит-сервіс.
Кожен прохід діалогів збирає два списки: blockedRuIds та unblockedRuIds, і передає їх у updateMany. Оновлюються тільки RU з цих списків. Відсутність RU у пройденій колонці не змінює його стан: він міг зникнути з неї з іншої причини, наприклад перестати бути активним фаворитом.
Точкова перевірка передає в update актуальне значення true або false.
Golden отримує повний актуальний список через окреме API та передає його у replaceBlockedByRU.
Таски та сендер перевіряють блокування тільки через цей сервіс.
blockedByTU і blockedByRU однаково називаються та працюють у всіх проєктах.
Інших статусів блокування сервіс не має.
Для фаворитів джерелом цих полів є фаворит-сервіс. Block-сервіс лише будує з них runtime-індекс і далі отримує точкові або повні оновлення.
Golden може повернути blockedByRU для RU, якого ще немає у фаворитах. Такі id сервіс тримає у своєму списку; якщо RU стане фаворитом, значення переноситься в його blockedByRU.