# Эндпоинты, с которыми взаимодействует flows-frontend Документ описывает все HTTP-эндпоинты внешних сервисов, к которым обращается модуль (микрофронтенд `flows-frontend`). ## Как устроено взаимодействие В отличие от единого реестра эндпоинтов, запросы во `flows-frontend` выполняются **точечно** из MobX-сторов (`module/store/stores/*.ts`) через общий HTTP-клиент `httpService`. `httpService` создаётся в `module/api/http-service.ts` фабрикой `createHttpService` из `@sarex-team/sdk-js`. Клиент предоставляет методы `getRequest`, `postRequest`, `putRequest`, `patchRequest`, `deleteRequest`, каждый из которых принимает объект вида: ```ts httpService.getRequest({ service: "flows", // логическое имя сервиса (ключ из hosts.ts) url: `/flows/${id}/?full=true`, // путь запроса относительно базового хоста сервиса data: { ... }, // тело запроса (для post/put/patch) // ...прочие опции axios }); ``` Базовый хост сервиса подставляется по ключу `service` из `module/api/hosts.ts` в зависимости от `BUILD_ENV`. Итоговый URL = `<базовый хост сервиса>` + `url`. Окружение выбирается переменной `BUILD_ENV` (`module/env.js`): одно из `local`, `stage`, `prod`, `preprod`, `contour`, `severstal`, `uralchem`. В `webpack.config.js` значение прокидывается в бандл через `DefinePlugin`. Значение по умолчанию при резолве хоста — `prod`. Подключаемый удалённый модуль (`documentations`) описан отдельно в `module/api/modules-hosts.ts` и резолвится функцией `getModuleHost` (Module Federation, `remoteEntry.js`). ## Базовые хосты по сервисам и окружениям Значения из `module/api/hosts.ts`. Показаны `stage` и `prod`; дополнительно определены `local`, `preprod` и `contour` (в `contour` — относительные пути для изолированного контура; в `local` сервис `sarex` проксируется на `/sarex-backend`). | Сервис (`service`) | Назначение | `stage` | `prod` | | --- | --- | --- | --- | | `flows` | Сервис процессов согласования (flows, reviews, steps, statuses) | `https://stage-api.sarex.io/flows/api/v1` | `https://api.sarex.io/flows/api/v1` | | `sarex` | Локальный backend (Django `core`/`client`) | `""` (относительные пути) | `""` | | `gateway_api_v1` | Gateway API v1 (ресурсы) | `https://stage-api.sarex.io/gateway/api/v1` | `https://api.sarex.io/gateway/api/v1` | | `gateway_api_v2` | Gateway API v2 (пользователи) | `https://stage-api.sarex.io/gateway/api/v2` | `https://api.sarex.io/gateway/api/v2` | | `documentations` | Сервис документации (диски, документы) | `https://stage-api.sarex.io/documentations/api/v1` | `https://api.sarex.io/documentations/api/v1` | | `eav_api_v0` | Сервис EAV (атрибуты/схемы) | `https://stage-api.sarex.io/eav/api/v0` | `https://api.sarex.io/eav/api/v0` | | `checklists` | Сервис чек-листов | `https://stage-api.sarex.io/checklists/api/v1` | `https://api.sarex.io/checklists/api/v1` | | `transmittals` | Сервис передачи документации (шаблоны) | `https://stage-api.sarex.io/transmittals/api/v1` | `https://api.sarex.io/transmittals/api/v1` | | `zitadel` | IdP (аутентификация) | `https://idp.dev.stage.sarex.io` | `https://login.sarex.io` | Удалённые модули (`module/api/modules-hosts.ts`): | Модуль | `stage` | `prod` | | --- | --- | --- | | `documentations` | `https://stage-modules.sarex.io/documentations/static/module/remoteEntry.js` | `https://modules.sarex.io/documentations/static/module/remoteEntry.js` | ## Эндпоинты по сервисам ### `flows` — Сервис процессов согласования Источник: `module/store/stores/processes.ts`, `module/store/stores/resources.ts`. | Метод (`*Request`) | Путь | Стор / метод | Назначение | | --- | --- | --- | --- | | GET | `/flows/{id}/?full=true` | `processes.loadFlow` | Маршрут по id (с шагами/статусами) | | POST | `/flows/filter/` | `processes` (фильтр) | Список маршрутов по фильтру | | POST | `/flows/count_flows_by_resource/` | `processes` | Количество маршрутов по ресурсам | | POST | `/flows/count_flows_by_resource/` | `processes.getCountByResourceId` | Количество маршрутов для одного ресурса | | POST | `/flows/` | `processes.createFlow` | Создать маршрут | | POST | `/flows/{id}/copy/?full=true` | `processes` (копирование) | Копировать маршрут | | PUT | `/flows/{id}/?full=true` | `processes` (обновление) | Обновить маршрут | | PATCH | `/flows/bulk-update/` | `processes.bulkUpdateFlow` | Массовое обновление маршрутов | | POST | `/steps/` | `processes.createStep` | Создать шаг | | PUT | `/steps/{id}/?full=true` | `processes.updateStep` | Обновить шаг | | PATCH | `/steps/{stepId}/update_reviewers/` | `processes` | Обновить согласующих шага | | GET | `/steps/{id}/active_reviews/` | `processes.getActiveReviewsForReviewer` | Активные review на шаге | | POST | `/statuses/` | `processes.createStatus` | Создать статус | | DELETE | `/statuses/{id}/` | `processes.deleteStatus` | Удалить статус | | POST | `/reviews/count_by_resource_id/` | `resources` | Количество review по ресурсу | ### `sarex` — Локальный backend (Django) Источник: `module/store/stores/users.ts`. | Метод | Путь | Стор / метод | Назначение | | --- | --- | --- | --- | | GET | `/api/client/settings/` | `users.getCurrentUser` | Настройки/данные текущего пользователя | | GET | `/api/core/users/?company={id}&{query}` | `users.getUsers` / `getUsersByCompanyId` / `getAllUsersByCompanyId` | Пользователи компании | | GET | `/api/core/admin/departments/?{query}` | `users.fetchDepartmentsSA` | Департаменты (service account) | | GET | `/api/core/admin/departments/?company={id}&{query}` | `users.fetchDepartmentsByCompanyId` | Департаменты компании | | GET | `/api/core/admin/positions/?{query}` | `users.fetchPositionsSA` | Должности (service account) | | GET | `/api/core/admin/positions/?company={id}&{query}` | `users.fetchPositionsByCompanyId` | Должности компании | ### `gateway_api_v1` — Gateway API v1 (ресурсы) Источник: `module/store/stores/resources.ts`. | Метод | Путь | Стор / метод | Назначение | | --- | --- | --- | --- | | GET | `/resources/?{query}` | `resources` | Список ресурсов (по фильтру) | | GET | `/resources/?company_id={id}` | `resources` | Ресурсы компании | ### `gateway_api_v2` — Gateway API v2 (пользователи) Источник: `module/store/stores/users.ts`. | Метод | Путь | Стор / метод | Назначение | | --- | --- | --- | --- | | GET | `/users/?{query}` | `users.getUsersByResourceId` | Пользователи по ресурсу | ### `documentations` — Сервис документации Источник: `module/store/stores/documents.ts`. | Метод | Путь | Стор / метод | Назначение | | --- | --- | --- | --- | | GET | `/disks/{id}/documents` | `documents.fetchDocumentsByDiskId` | Документы диска | ### `eav_api_v0` — Сервис EAV (атрибуты) Источник: `module/store/stores/attributes.ts`. | Метод | Путь | Стор / метод | Назначение | | --- | --- | --- | --- | | GET | `/schema/?model_name=flow&company_id={id}` | `attributes.fetchFlowsAttributes` | Схема атрибутов для модели `flow` | ### `checklists` — Сервис чек-листов Источник: `module/store/stores/checklists.ts`. | Метод | Путь | Стор / метод | Назначение | | --- | --- | --- | --- | | POST | `/checklists/filter/` | `checklists.fetchChecklists` | Список чек-листов по фильтру | ### `transmittals` — Сервис передачи документации Источник: `module/store/stores/transmittals.ts`. | Метод | Путь | Стор / метод | Назначение | | --- | --- | --- | --- | | POST | `/transmittal_templates` | `transmittals` | Шаблоны трансмитталов (пагинация по `next`, фильтр по `resources`) | ### `zitadel` — IdP Хост определён в `hosts.ts` для аутентификации через SDK; прямых вызовов из сторов в текущей версии модуля нет (используется инфраструктурой `@sarex-team/sdk-js`). ## Замечания - Единого файла-реестра эндпоинтов (`endpoints.ts`) во `flows-frontend` нет — вызовы разбросаны по сторам `module/store/stores/*`. При добавлении нового запроса указывайте `service` строго из ключей `hosts.ts`. - Часть путей содержит завершающий слэш и query-параметры прямо в строке `url` (напр. `/flows/{id}/?full=true`) — это соответствует поведению backend (`flows-backend`), где роуты объявлены со слэшем на конце. - Сервис `sarex` в `stage`/`prod` имеет пустой базовый хост (`""`), то есть запросы идут по относительным путям того же origin; в `local` он проксируется на `/sarex-backend`, в `contour` — на относительные пути контура.