Фаворит-сервіс
Окремий екземпляр для кожної TU. Тримає базовий знімок фаворитів і актуальний стан після накладання поточних витрат.
- Фаворит — RU хоча б раз витрачав кошти на конкретну TU.
- Активний фаворит — остання витрата була не раніше ніж
Nднів тому. N— одна спільна настройка; зараз7, розглядається5.
Дані
Favorite {
ruId
firstPaidAt
lastPaidAt
profit?
gifts?
paidActions?
isActive
isFreeloader
isWhite
blockedByTU
blockedByRU
chatLimit
mailLimit
followUpChat?: {
sourceUnansweredTaskId
step
nextCheckAt
}
followUpMail?: {
postChatSourceTaskId?
postChatDueAt?
lastBurstSourceTaskId?
lastReadEventKey?
}
}base: Map<ruId, Favorite>— останній знімок із нашого сервера;overlay: Map<ruId, FavoriteUpdate>— поточні витрати, яких ще немає в базі;favorites: Map<ruId, Favorite>— результатbase + overlay.
Логіка
- Ініціалізується фаворитами зі стартових даних.
- Періодичний базовий знімок повністю замінює
base. - Новий знімок поточних витрат повністю замінює
overlayі заново накладається на чисту базу. - Новий RU з overlay одразу додається у поточні фаворити.
- Після кожного оновлення сервіс перераховує
isActive,isFreeloaderтаisWhite. - Змінені поля фаворита зберігаються в БД через наш механізм синку.
Сервіс не виконує запитів. Golden і Chathouse отримують оновлення від сервісу статистики. Джерело оновлень Prime — TODO після проєктування проходу діалогів.
Freeloader
isFreeloader ставиться і знімається автоматично:
| Проєкт | Правило |
|---|---|
| Golden | бонусний фаворит із сумою 0 |
| Chathouse | витрачав тільки бонусні кредити |
| Prime | менше 11 платних дій |
Freeloader залишається звичайним фаворитом. Окремий виняток — Follow-up Mail для нього не створюється.
White-list
isWhite зберігається прямо у фавориті.
- у white-list входять неактивні фаворити від
Nднів до3місяців та активні фаворити з малим глобальним балансом; - вручну додавати або знімати можна тільки активного фаворита з малим глобальним балансом;
senderIgnoreу глобальному фавориті RU вимикає сендери незалежно відisWhite;- зміна активності, балансу або
senderIgnoreзапускає повторний перерахунокisWhite.
Блокування
blockedByTU і blockedByRU зберігаються у фавориті. Сервіс блокувань використовує їх для спільної перевірки тасків і сендера.
Зв’язки
- Використовується у фаворитах та чат-хісторі, Task Factory і сендері.