overview

Архітектура проєкту

Мапа всіх сервісів і їх взаємодій. Тут описуємо топологію — хто з ким говорить і яким каналом. Глибина окремого сервісу — у його власному <service>/docs/.

Візуальна мапа — Canvas.


Сервіси

СервісТипРоль у системі
stackБек, точка входуОркестратор, auth, маршрутизація між проєктами
stack-clientФронт (web)Веб-інтерфейс для всіх ролей
stack-electronЕлектрон-клієнтРобоче місце оператора
stack-goldenБекЛогіка проєкту goldenbride
stack-primeБекЛогіка проєкту prime
stack-udateБекЛогіка проєкту udate
stack-chathouseБекЛогіка проєкту chathouse
stack-academyБекВнутрішня школа
stack-aiБекAI-функції
stack-commonsБібліотекаСпільні middleware, types, утиліти. Власних docs не має.

Сервіси golden / prime / udate / chathouse структурно схожі — кожен реалізує бізнес-логіку для свого партнерського проєкту. Спільні патерни описуємо тут, специфічне — у локальних доках.


Канали взаємодії

  • HTTP — синхронні виклики, переважно фронт ↔ бек і electron ↔ бек.
  • RMQ — асинхронна шина для обміну подіями між бек-сервісами. (TODO: задокументувати схему черг)
  • Спільна БД / Redis / ClickHouse(TODO: де які стори, що шарується)

Auth і ролі

Авторизація проходить через stack, видається JWT. Кожен бек-сервіс розгортає MiddlevareAuthstack-commons) який кладе req.user якщо токен валідний — не блокуючи запит без токена. Захист на рівні ендпоінта — через guard([roles]).

Ролі — у roles.


Конвенція HTTP-відповідей

Усі бек-сервіси відповідають HTTP 200 з body одного з форматів:

// success
{ "success": true, "data": <payload> }
 
// error (через ExeptionFilter або throw HTTPError з stack-commons)
{ "success": false, "data": null|<data>, "message": "...", "statusCode": <code>, "context": "..." }

Виняток: MiddlevareGuard без потрібної ролі віддає HTTP 400 + {success:false, data:{message:'Not allow role'}}. Без токена — HTTP 401 з порожнім body.


Стан міграції на auto-Swagger

СервісСтатус
stack-goldenу процесі — частина контролерів на routing-controllers, v2 Swagger
stackTODO
stack-primeTODO
stack-udateTODO
stack-chathouseTODO
stack-aiTODO
stack-academyTODO

Кінцева мета — у кожному бек-сервісі один auto-Swagger UI на /<service>/api-docs/v2. Чек-ліст міграції — у CLAUDE.md репо стартового сервісу (stack-golden).