iac/apps/flows/ENDPOINTS.md

143 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Эндпоинты, с которыми взаимодействует 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` — на относительные пути контура.