ProjectFavoriteService
Сервіс, який перетворює платну активність конкретного проєкту у ProjectFavorite.
Задача
- Визначити TU, RU, час і вид платної дії у даних проєкту.
- Без дублювання створити або оновити пару
TU + RU. - Оновити
firstPaidAt,lastPaidAt,profitіgifts. - Оновити
blockedByRU, коли проєкт повертає стан блокування у діалозі або окремому списку. - Після успішного запису опублікувати малу подію
ProjectFavoriteChangedзprojectіruId.
Джерела
| Проєкт | Створення й оновлення favorite | Результат |
|---|---|---|
| Golden | Оперативна й денна статистика з RU та часом операції | profit, gifts, firstPaidAt, lastPaidAt |
| Prime | Платні вхідні повідомлення з історії діалогу та live-подій | profit, firstPaidAt, lastPaidAt |
| Chathouse | Оперативна й денна статистика з RU та часом операції | profit, gifts, firstPaidAt, lastPaidAt |
| Udate | Платні вхідні повідомлення з історії діалогу та live-подій | profit, firstPaidAt, lastPaidAt |
Golden і Chathouse отримують дані після Statistics Sync Worker. Prime і Udate отримують повідомлення через Project TU API. Окремий Project Favorite API не потрібен.
Оновлення
- Створювати favorite тільки після платної дії RU для TU.
- Повторна вигрузка статистики замінює агрегат за період, а не додає його повторно.
- Повторне повідомлення з тим самим partner message ID не збільшує
profit. firstPaidAtможе тільки зменшуватися,lastPaidAt— тільки збільшуватися.
Спільні правила
- Favorite існує для пари
TU + RUпісля першої платної дії. New RU— перша платна дія цієї пари, незалежно від інших TU.- Active Favorite рахується за однією platform-настройкою; default
7днів. isBlackListпоточних проєктів таblockedByTUGolden зводяться до одного поляblockedByTU.- Freeloader визначається глобально для RU і не належить ProjectFavoriteService.
Незакриті інтеграції
- Prime і Udate не мають RU в admin statistics, тому використовують платні повідомлення з TU-логік.
- TODO: реалізувати отримання
blockedByRUу Prime. - TODO: визначити джерело gifts для Udate або не повертати його для цього проєкту.
Заповнити
- Вибрати формат зберігання нормалізованої paid activity, з якої FavoriteService рахуватиме календар без логіки, специфічної для проєкту.