iac/apps/rfi/ENDPOINTS.md

101 lines
7.9 KiB
Markdown
Raw 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.

# Эндпоинты, с которыми взаимодействует rfi-frontend
Документ описывает все HTTP-эндпоинты внешних сервисов, к которым обращается модуль (микрофронтенд `rfi-frontend`).
## Как устроено взаимодействие
Все запросы собраны в реестре `module/api/index.ts` и сгруппированы по объектам-«API»: `RfiAPI`, `AttachmentsAPI`, `CoreAPI`, `ResourcesAPI` и функция `getAttributes`. Каждый вызов идёт через единый `httpService` (`module/api/http-service.ts`), созданный фабрикой `createHttpService` из `@sarex-team/sdk-js` (поверх axios).
Вызов задаётся объектом:
- `service` — логическое имя сервиса (см. таблицу хостов ниже);
- `url` — путь запроса (дописывается к базовому хосту сервиса);
- `data` — тело запроса (для POST/PUT/PATCH);
- `axiosConfig` — доп. настройки axios, чаще всего `params` (query-параметры: `limit`, `offset`, `company_id` и т.п.);
- `showErrorNotification` — показывать ли уведомление об ошибке;
- `controller``AbortController` для отмены запроса.
Методы `httpService`: `getRequest`, `postRequest`, `putRequest`, `patchRequest`, `deleteRequest`. Базовый хост подставляется по `service` из `module/api/hosts.ts` в зависимости от `BUILD_ENV`.
## Базовые хосты по сервисам и окружениям
Значения из `module/api/hosts.ts`. Итоговый URL = `<базовый хост сервиса>` + `url`. Использовано пять сервисов (остальные ключи в `hosts.ts` объявлены, но модулем не вызываются).
| Сервис (`service`) | Назначение | `stage` | `prod` |
| --- | --- | --- | --- |
| `rfi` | Собственный backend RFI (этот сервис) | `https://stage-api.sarex.io/rfi/api/v1` | `https://api.sarex.io/rfi/api/v1` |
| `sarexApi` | Gateway/API Sarex (attachments, users v2) | `https://stage-api.sarex.io` | `https://api.sarex.io` |
| `sarex` | Локальный backend Sarex (`/api/core`, `/api/client`) | `https://stage.sarex.io` | `https://lk.sarex.io` |
| `gateway_api_v1` | Gateway API v1 (resources) | `https://stage-api.sarex.io/gateway/api/v1` | `https://api.sarex.io/gateway/api/v1` |
| `eav_api_v0` | EAV — сервис атрибутов/схем | `https://stage-api.sarex.io/eav/api/v0` | `https://api.sarex.io/eav/api/v0` |
> Также определены окружения `local`, `preprod` и `contour`. В `local` сервис `sarex` проксируется на `/sarex-backend`; в `contour` используются относительные пути. Подключаемый удалённый модуль documentations описан отдельно в `module/api/module-hosts.ts` (Module Federation `remoteEntry.js`).
## Эндпоинты по сервисам
### `rfi` — Backend RFI (этот сервис)
`RfiAPI` из `module/api/index.ts`. Пути указаны относительно базы `.../rfi/api/v1`.
| Метод (`RfiAPI`) | HTTP | Путь | Назначение |
| --- | --- | --- | --- |
| `getRfi` | POST | `/rfi/filter/` | Список RFI по фильтру (query `limit`/`offset`, тело — фильтры) |
| `postRfi` | POST | `/rfi/` | Создать RFI |
| `putRfi` | PUT | `/rfi/{rfiId}/` | Полное обновление RFI |
| `patchRfi` | PATCH | `/rfi/{rfiId}/` | Частичное обновление RFI |
| `copyRfi` | POST | `/rfi/{rfiId}/copy/` | Скопировать RFI (тело `{ name }`) |
| `getRfiById` | GET | `/rfi/{id}/` | RFI по id |
| `deleteRfi` | DELETE | `/rfi/{id}/` | Удалить RFI (soft-delete) |
| `getHistory` | GET | `/rfi/history/` | История изменений по списку RFI (query-параметры фильтра) |
| `getStatusCount` | POST | `/rfi/status-count/` | Количество RFI по статусам (по `resource_id`) |
| `getPriorityCount` | POST | `/rfi/priority-count/` | Количество RFI по приоритетам (по `resource_id`) |
| `createRfiMessage` | POST | `/messages/` | Создать сообщение в RFI |
| `getMessagesByRfiId` | GET | `/messages/?request_id={id}` | Сообщения по id запроса |
| `patchRfiMessage` | PATCH | `/messages/{id}/` | Отметить сообщение решением (`is_solution`) |
| `getStatuses` | GET | `/statuses/` | Список статусов (query `company_id`, `limit`, `offset`) |
| `getStatusModels` | GET | `/status-models/` | Модели статусов компании (query `company_id`) |
| `getPriorities` | GET | `/priorities/` | Список приоритетов (query `company_id`, `limit`, `offset`) |
| `getPriorityModels` | GET | `/priority-models/` | Модели приоритетов компании (query `company_id`) |
### `sarexApi` — Gateway/API Sarex
`AttachmentsAPI` и `CoreAPI.getUsersV2`. Пути указаны относительно базы `https://(stage-)api.sarex.io`.
| Метод | HTTP | Путь | Назначение |
| --- | --- | --- | --- |
| `AttachmentsAPI.uploadFiles` | POST | `/gateway/api/v1/attachments/` | Загрузить файлы (`multipart/form-data`) |
| `AttachmentsAPI.deleteFile` | DELETE | `/gateway/api/v1/attachments/{id}` | Удалить файл |
| `AttachmentsAPI.getFilesByRfiId` | GET | `/gateway/api/v1/attachments/?company_id={companyId}&instance_id={rfiId}&model_name={ATTACHMENTS_MODEL_NAME}` | Файлы, привязанные к RFI |
| `CoreAPI.getUsersV2` | GET | `/gateway/api/v2/users/` | Пользователи (query `company_id`, `permissions`, `resource_id`, `limit`, `offset`) |
### `sarex` — Backend Sarex
`CoreAPI`. Пути указаны относительно базы `https://stage.sarex.io` / `https://lk.sarex.io`.
| Метод | HTTP | Путь | Назначение |
| --- | --- | --- | --- |
| `CoreAPI.getUsers` | GET | `/api/core/users/` | Пользователи (query `company`, `perm`, `resource_id`, `limit`, `offset`) |
| `CoreAPI.getDepartments` | GET | `/api/core/admin/departments/?company={companyId}&{query}` | Отделы компании |
| `CoreAPI.getPositions` | GET | `/api/core/admin/positions/?company={companyId}&{query}` | Должности компании |
| `CoreAPI.getSettings` | GET | `/api/client/settings/` | Клиентские настройки |
### `gateway_api_v1` — Gateway API v1
`ResourcesAPI`. База уже включает `/gateway/api/v1`.
| Метод | HTTP | Путь | Назначение |
| --- | --- | --- | --- |
| `ResourcesAPI.getResources` | GET | `/resources/` | Список ресурсов (query `company_id`) |
### `eav_api_v0` — EAV (атрибуты)
Функция `getAttributes`. База уже включает `/eav/api/v0`.
| Метод | HTTP | Путь | Назначение |
| --- | --- | --- | --- |
| `getAttributes` | GET | `/schema/?model_name=flow&company_id={companyId}` | Схема атрибутов по компании |
## Обработка ошибок
Ошибки обрабатываются в `httpService` (`@sarex-team/sdk-js`). Тип ответа с ошибкой описан в `module/api/types.ts` (`ErrorResponse` — `{ response?.data?.detail }`). Часть запросов включает показ уведомления об ошибке флагом `showErrorNotification: true` (например `getSettings`, `AttachmentsAPI.*`). Права доступа (`core.can_*_RFI`) описаны в `module/api/permissions.ts` и проверяются на стороне backend RFI (`RFITokenBasedPermission`).