Профілі RU
src/ru-profiles/ — короткі профілі RU проєкту (ім’я, вік, аватар, satellite, останній online) для Electron і читань favorites.
Дані: project_ru_profiles · Swagger: тег RU Profiles · План: GlobalFavoriteService
Що робить модуль
- Приймає від Electron пакети профілів, побачених у TU, і пише лише нові та змінені.
- Віддає профілі за ID і стрічку змін за курсором для кешу на клієнті.
- Є джерелом профілю й online RU для favorites і глобальних favorites на читанні.
Сервіс нічого не тримає в пам’яті й працює в кластері; кеш профілів — у Electron.
Логіка
Запис
Пакет sync читає збережені профілі одним запитом і пише одним bulkWrite лише нові й змінені. Незмінний профіль не рухає updatedAt, тож сотні клієнтів, що бачать тих самих RU, не створюють повторів у стрічці змін. isSatellite змінюється, лише якщо клієнт його передав; вік 0 зберігається як null.
Online (lastOnlineAt) пише не sync, а знімок online на партнері — лише наявним профілям.
Кеш клієнта
- Профілі RU своїх favorites приходять разом із favorites.
- Невідомі RU (новий діалог, історія чату) —
findByIdsпачкою. - Після логіну —
findChangesвід збереженого курсора: лише різниця, у порядкуupdatedAt, _id; сторінка коротша заlimitозначає кінець змін. - Побачене в усіх TU клієнт збирає без дублів і раз на кілька хвилин надсилає одним
sync.
API для Electron
| Роут | Що робить | Ролі |
|---|---|---|
POST /v2/ru-profiles/sync | пакет побачених профілів; відповідь — кількість створених і змінених | director, top manager, client manager, тімлід, operator |
POST /v2/ru-profiles/findByIds | профілі вибраних RU; невідомих у відповіді немає | ті самі |
POST /v2/ru-profiles/findChanges | профілі, змінені після курсора | ті самі |
Клієнт — Electron (X-Besocial-Client: electron).
Нюанси
- Перенесення з legacy (12-migrations) пише лише відсутніх RU, тож повтор після перемикання Electron не перезаписує свіжіші профілі.
Борг
- Новий Electron ще не підключений: legacy читає і пише профілі через
stack-golden(getMenStore,saveNewMen) уgolden_man_profiles.