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