65 lines
5.4 KiB
Markdown
65 lines
5.4 KiB
Markdown
# Эндпоинты, с которыми взаимодействует contracts-frontend
|
||
|
||
Документ описывает все HTTP-эндпоинты внешних сервисов, к которым обращается модуль (микрофронтенд `contracts-frontend`).
|
||
|
||
## Как устроено взаимодействие
|
||
|
||
Запросы сгруппированы по доменам в каталоге `src/shared/api/fetch/*.api.ts`. Каждая функция вызывает соответствующий метод `httpService` (`src/shared/api/http-service.ts`), который создаётся фабрикой `createHttpService` из `@sarex-team/sdk-js` (поверх `axios`). Для запроса указываются:
|
||
|
||
- `service` — логическое имя сервиса (см. таблицу хостов ниже);
|
||
- `url` — путь запроса (добавляется к базовому хосту сервиса);
|
||
- `data` — тело запроса (для `post`/`put`);
|
||
- `axiosConfig.params` — query-параметры;
|
||
- `cache`, `queryKey` — опции кеширования (react-query-подобные ключи из `src/shared/api/keys/*`);
|
||
- `isCSRF` — включение CSRF-обработки (для `departments`).
|
||
|
||
Базовый хост подставляется по значению `service` и текущему окружению `__BUILD_ENV__` (`local`/`stage`/`preprod`/`prod`, по умолчанию `prod`; см. `http-service.ts`). В режиме `local` для http-сервиса устанавливается тип `zitadel` (`setTypeOfHttpService("zitadel")`). Итоговый URL = `<базовый хост сервиса>` + `url`.
|
||
|
||
## Базовые хосты по сервисам и окружениям
|
||
|
||
Значения из `src/shared/api/hosts.ts`. Ниже перечислены сервисы, **фактически используемые** запросами модуля; в реестре хостов определены и другие сервисы (`bim`, `bimv2`, `workflows`, `workspaces`, `documentations`, `comparisons`, `remarks`, `projects`, `eavV1`, `notifications`, `google`, `sarexApi`, `zitadel`), но обращений к ним в `fetch/*` нет.
|
||
|
||
| Сервис (`service`) | Назначение | `stage` | `prod` |
|
||
| --- | --- | --- | --- |
|
||
| `contracts` | Сервис договоров (contracts-backend) | `https://stage-api.sarex.io/contracts` | `https://api.sarex.io/contracts` |
|
||
| `sarex` | Локальный backend Sarex (core/admin) | `""` (относительные пути) | `""` |
|
||
| `gateway` | Gateway/API Sarex (ресурсы/проекты) | `https://stage-api.sarex.io/gateway` | `https://api.sarex.io/gateway` |
|
||
|
||
> Также определены окружения `local` и `preprod`. В `local` сервисы проксируются на относительные пути (`contracts` → `/sarex-contracts`, `sarex` → `/sarex-backend`, `gateway` → `/sarex-gateway`, `zitadel` → `/zitadel`). Значения `preprod` используют домен `api.preprod.sarex.io`.
|
||
|
||
## Эндпоинты по сервисам
|
||
|
||
### `contracts` — Сервис договоров
|
||
|
||
Определены в `src/shared/api/fetch/contract.api.ts`.
|
||
|
||
| Функция | Метод | Путь | Назначение |
|
||
| --- | --- | --- | --- |
|
||
| `fetchContractsByResourceId` | GET | `/api/v0/contracts` | Список договоров (query: `limit`, `offset`, `resource_id`, `tenant_id`) |
|
||
| `fetchCreateContractByResourceId` | POST | `/api/v0/contracts` | Создать договор |
|
||
| `fetchUpdateContract` | PUT | `/api/v0/contracts/{contract.id}` | Обновить договор по id |
|
||
|
||
> Функция удаления `fetchDeleteContract` (`DELETE /api/v0/contracts/{contractId}`) присутствует в коде, но закомментирована.
|
||
|
||
### `sarex` — Локальный backend Sarex (core/admin)
|
||
|
||
Определены в `company.api.ts`, `contractor.api.ts`, `department.api.ts`.
|
||
|
||
| Функция | Метод | Путь | Назначение |
|
||
| --- | --- | --- | --- |
|
||
| `fetchCompanies` | GET | `/api/core/admin/companies/` | Список компаний (кешируется, ключ `companies`) |
|
||
| `fetchContractors` | GET | `/api/core/admin/contractors/?company_id={companyId}` | Контрагенты компании (кешируется, ключ `contractors`) |
|
||
| `fetchDepartments` | GET | `/api/core/admin/departments/` | Отделы (кешируется, ключ `departments`, `isCSRF: true`) |
|
||
|
||
### `gateway` — Gateway/API Sarex
|
||
|
||
Определён в `project.api.ts`.
|
||
|
||
| Функция | Метод | Путь | Назначение |
|
||
| --- | --- | --- | --- |
|
||
| `fetchProjects` | GET | `/api/v1/resources/?company_id={companyId}` | Список ресурсов/проектов компании (кешируется, ключ `projects`) |
|
||
|
||
## Обработка запросов и кеширование
|
||
|
||
Кеширование включается флагом `cache: true` с ключом `queryKey` (значения ключей — в `src/shared/api/keys/*.ts`: `companies`, `projects`, `contractors`, `departments`). Обработка ошибок и авторизация (в т.ч. режим `zitadel` для `local`) выполняются внутри `httpService` из `@sarex-team/sdk-js`.
|