07-ru-profiles

Профілі 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 на партнері — лише наявним профілям.

Кеш клієнта

  1. Профілі RU своїх favorites приходять разом із favorites.
  2. Невідомі RU (новий діалог, історія чату) — findByIds пачкою.
  3. Після логіну — findChanges від збереженого курсора: лише різниця, у порядку updatedAt, _id; сторінка коротша за limit означає кінець змін.
  4. Побачене в усіх 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.