Family Backend — план і каталог логік

#TODO — робочий чернетковий каталог. Логіки й орієнтовне API треба звіряти з реальним кодом і партнерськими контрактами. Помітки shared? — кандидати на обговорення, не рішення.

Цільові сутності, сервіси, Family-логіки та workers — у Family Platform. Ця сторінка лишається каталогом вимог до нового партнера та його API.

Подвійна роль сторінки:

  1. Каталог усіх важливих логік Family — воркспейсних і поза ним (статистика, дашборд, агенція, метрики). Що є, як групується, що вже спільне.
  2. Шпаргалка нового партнера — заходить новий бренд → проходимо каталог → бачимо які логіки треба і яке партнерське API під кожну. Чого партнер не дає — просимо додати або робимо костиль з #fix.

Family-моноліт — повноцінний бек на один бренд: своя БД, свій набір ui-triggered сервісів, свої workers, інтеграція з партнерським API. Контракт — у Swagger. Зразок — stack-golden.

Як читати каталог

  • Орієнтовне API — мінімум, який партнер має дати, щоб логіку взагалі можна було зробити. = наше, не залежить від партнера. ? = ще не звірено.
  • shared? — логіка схожа в усіх Family, кандидат у спільний мікросервіс (деталі — Кандидати на спільний мікросервіс).
  • Глибше — deep-dive сторінка, де логіка розписана (умови, таймінги, вердикти уніфікації).

Каталог логік

Платформа / доступ

ЛогікаЩо цеОрієнтовне APIshared?Глибше
authFamily-авторизація поверх stack-authindex
adminFamily-адмінка (власники TU)
ladyКерування TU: закріплення operator / supervisorGET ladies/list, GET ladies/{id}
operator / supervisor / top-managerКерування ролями воркспейсуglossary
requestТочка для запитів (тікети / доступи)

Воркспейс — спільне ядро

Наша платформа (Electron ↔ stack). Не залежить від партнерського API — ціль: ідентично всюди.

ЛогікаЩо цеОрієнтовне APIshared?Глибше
Логін оператора + JWTвхід у робоче місцеUnification
Перевірка версії / часудопуск клієнта до роботиUnification
Конект контрол-сокета → список TUстарт воркспейсу, статуси анкетCurrent State
Presence / останній онлайн оператораоблік онлайну оператора (Redis)shared?
Дисконект-політикаповедінка при втраті зв’язкуCurrent State
Агрегація дій операторапідрахунок дій, кік за неактивність
Data-sync стану на бекклієнт рахує → сервер зберігаєServer Coupling

Воркспейс — партнер-залежне

Потрібне всюди; поведінку уніфікуємо, реалізацію диктує API.

ЛогікаЩо цеОрієнтовне APIshared?Глибше
Логін TU на сайтсесія анкети до партнерського APIPOST auth/login, GET auth/checkServer Coupling
Допуск анкетиперевірка стану перед логіномстатус анкети (blocked / deleted / active) ?Current State
Тримання TU онлайнтримати анкету онлайн на сайтіGET online/{ladyId} або WS keep-aliveshared?Unification
Сокет сайту (події)реалтайм: нове повідомлення / лайк / блок / typing / лімітиWebSocket подій партнераCurrent State
Таскичерга задач оператора, авто-генерація / закриттяdialogs scan + WS events + limitsCurrent State §4
Сендери (чат / мейл)авто-надсилання інвайтівPOST chats/send, GET chats/invites, POST mail/send + limitsCurrent State §5
Фаворитипостійні RU по TU, списки + флагиfavorites / bookmarks list + flags ?Favorites
Чат / мейл історіяперебудова діалогів з останнім повідомленнямGET chats/dialog/{ladyId}/{manId}, GET mail/letters
Айсбрейкерисписок / активація iceGET ice, POST ice/activate ?
Створення чатіввідкриття діалогу / лімітівendpoint створення діалогу ?
ФрілоадериRU лише з безкоштовним профітомprofit / spend per RU ?
White-list1 на TU (ladyId_api), авто-видалення при profit ≥ 10— (наша логіка поверх статистики)

Аналітика

ЛогікаЩо цеОрієнтовне APIshared?Глибше
statisticsденний бонус-журнал, рейтинги, періодиGET statistics/{ladyId}/daily/{date} + /periodStatistics
dashboardграфіки трендів Family по тижнях— (з нашої статистики)Dashboard
analyst% вчасних, швидкість, розподіл по годинах
metricscoring TU, зв’язки RU↔TU, time-series (ClickHouse)shared?
agencyактивні RU з витратами, місячний календарфінанси per RU / період ?
reportмісячний xlsx-звіт по операторах

Дані RU / TU

ЛогікаЩо цеОрієнтовне APIshared?Глибше
man / global-manпрофілі RU + крос-TU реєстрпрофіль RU з діалогівshared?
TU профіль / медіаоновлення профілю й фото анкетиPOST ladies/update, POST ladies/photos/upload
notesнотатки оператора по діалогахshared?Unification §4
ai-notesAI-нотаткиshared?

Сервіс

ЛогікаЩо цеОрієнтовне APIshared?Глибше
error-reportжурнал доменних помилок: створення + resolve
debugCPU-профайлер (start / stop / status)
log-usersжурнал дій lady / operator / supervisor

Інтеграції

ЛогікаЩо цеОрієнтовне APIshared?Глибше
official-apiHTTP-клієнт до партнерського APIвесь контракт нижче
official-api-wsWebSocket живих подій партнераWebSocket подійServer Coupling
clickhouseOLAP: метрики + логи запитівshared?
deeplпереклад повідомлень чату / поштиshared?
rmqшина подій між сервісами

Фонові задачі (воркери)

Окремими рядками не виношу — прив’язані до логік вище. Ключові крони/черги нового Family: завантаження статистики (download-main / download-temp), синк профілів TU (update-data-family-ladies, check-family-ladies), збір онлайну (getting-onlineshared?), генерація дашборду, закриття тасків оператора після дисконекту.


Очікуваний партнерський API (консолідовано)

Канонічний контракт, на який посилається колонка «Орієнтовне API». Мінімум, щоб побудувати Family-бек. Чого нема — просимо в партнерів або костиль + #fix.

Еталон контракту — Prime / Chathouse (стабільні). Goldenbride — повний обсяг, але контракт нестабільний (#fix у golden/integrations/official-api). UDate — поки не задокументовано.

Auth

  • POST /auth/login{id_api, password} → JSESSIONID + cookie
  • GET /auth/check — перевірка сесії
  • Stack кешує session per TU (ladyId_api).

TU (профіль і медіа)

  • GET /ladies/list — список TU агенції
  • GET /ladies/{ladyId} — деталі TU
  • POST /ladies/update — оновити профіль / фото
  • POST /ladies/photos/upload — завантажити фото

Чати

  • GET /chats/dialog/{ladyId}/{manId} — повний діалог
  • POST /chats/send — відправити повідомлення
  • GET /chats/invites/{ladyId} — список запрошень

Mail

  • GET /mail/folders/{ladyId} — папки (inbox / sent / draft / trash)
  • GET /mail/letters/{ladyId}/{folder} — список листів
  • POST /mail/send — відправити лист
  • POST /mail/attachments/upload — вкладення

Online + статистика

  • GET /online/{ladyId} — поточний онлайн-статус
  • GET /statistics/{ladyId}/daily/{date} — статистика дня
  • GET /statistics/{ladyId}/period?from=&to= — період

Живі події (WebSocket)

  • Канал подій партнера: нове повідомлення, лайк / подарунок, блок, typing, зміна лімітів. Транспорт різний (Centrifuge / raw WS) — нормалізуємо в спільний набір подій.

Якщо новий партнер пропонує сильно інший контракт — потрібен окремий integration-шар, що нормалізує під цей набір.

Кандидати на спільний мікросервіс

Логіка, що зараз дублюється в кожному Family-беку (флаг shared? вище) — варта винесення в окремий сервіс, спільний для всіх.

ЛогікаПоточний станКуди винести
Збір і облік онлайн-статусівДублюється: getting-online worker + online-time / online-analysis в кожній FamilyНовий stack-online — централізовано пулить, віддає API всім Family
Метрики поверх ClickHouseКожен Family пише й читає clickhouse самНовий stack-metrics
DeepL перекладиПоки в Electronstack-ai або окремий stack-translate
Global Man реєстрДублюється логікою в кожній FamilyНовий stack-man-registry
Нотатки + AI-нотаткиЧастково в notes / ai-notes кожної FamilyСпільна колекція + stack-ai
Recruit / онбординг операторівВже в stackOK

Чек-ліст для нового Family

  1. Створити репо stack-<family> за патерном golden
  2. Налаштувати CLAUDE.md за шаблоном
  3. Створити docs/ каркас (див. CONVENTIONS)
  4. Додати в API Map як TBD
  5. Запитати в партнерів API-контракт. Звірити з каталогом логік вище: чого нема — окремий integration-шар / #fix.
  6. Зібрати мінімум логік з каталогу (платформа + воркспейс-ядро + партнер-залежні під наявне API).
  7. Зібрати воркери (download-statistics, update-data-ladies, getting-online, …)
  8. Підняти Mongo-колекції <family>_*
  9. Інтегрувати у stack як новий маршрут
  10. Додати UI у stack-client/docs/ui-family/ і stack-electron/docs/ui/

Зв’язки

  • Проектування воркспейсу → Workspace (уніфікація, поточний стан, прив’язки до серверу)
  • Карта Swagger-ів → API Map
  • Де яка фіча реалізована й ким → Feature Matrix
  • Правила формату → CONVENTIONS · Процес заповнення → AUTHORING