iac/apps/django/ENDPOINTS.md

128 lines
9.4 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.

# Эндпоинты и хосты сервисов для sarex-frontend
Документ описывает базовые хосты сервисов, к которым обращается фронтенд-шелл
`sarex-frontend`, и удалённые модули (Module Federation), которые он подгружает.
Backend для этого приложения — `sarex-backend` (Django), его конфигурация и
переменные описаны в `CONFIGURATION.md`, а серверное REST API — в `openapi.yaml`.
## Как устроено взаимодействие
`sarex-frontend` — это host-приложение на **Webpack Module Federation**. Реестр
хостов задаётся декларативно в `endpoints.js` (корень репозитория): объект вида
`<сервис>.<тип>.<окружение>` → URL. Возможные типы:
- `api` / `apiV1` / `apiV2` / … — базовый URL REST API сервиса;
- `module` — URL `remoteEntry.js` удалённого микрофронтенда;
- `gateway` — базовый URL gateway.
Окружение выбирается сборочной переменной `ENDPOINT` (`process.env.ENDPOINT`,
по умолчанию `prod`) в `webpack.common.js`. Значения `endpoints.js[сервис][тип][ENDPOINT]`
пробрасываются в код как константы `process.env.<CONST>` через `DefinePlugin`
(объект `processEnvByEndpoint`), напр. `endpoints.bim.api[ENDPOINT]``BIM_API`.
Для локального запуска backend-таргет задаётся отдельно в `env.js`
(`SAREX_BACKEND`, по умолчанию `https://stage.sarex.io/`) и используется
dev-сервером (`webpack.dev.js`) как прокси; собственный Django-backend в окружении
`contour` доступен по относительным путям (пустой хост).
## Окружения (`ENDPOINT`)
| Значение | Назначение |
| --- | --- |
| `prod` | Продакшн (`https://api.sarex.io`, `https://modules.sarex.io`) |
| `stage` | Stage (`https://stage-api.sarex.io`, `https://stage-modules.sarex.io`) |
| `preprod` | Preprod (`https://api.preprod.sarex.io`, `https://modules.preprod.sarex.io`) |
| `contour` | Изолированный контур — относительные пути (пустой хост) |
| `local` | Локальная разработка (задан не у всех сервисов) |
> У части сервисов `gateway` определены также специальные ключи `contour_local`
> (`https://stage.sarex.io`) и `contour_prod` (`https://lk.sarex.io`).
## Базовые хосты API-сервисов
Итоговый URL = `<базовый хост сервиса>` + путь запроса.
| Сервис (`endpoints.*`) | Константа | `stage` | `prod` | `contour` |
| --- | --- | --- | --- | --- |
| `api.api` | `SAREX_API` | `https://stage-api.sarex.io` | `https://api.sarex.io` | `""` |
| `bim.api` | `BIM_API` | `https://stage-api.sarex.io/bim/api/v1` | `https://api.sarex.io/bim/api/v1` | `""` |
| `bim.apiV2` | `BIM_API_V2` | `…/bim/api/v2` | `…/bim/api/v2` | `""` |
| `bim.files` | `BIM_FILES` | `…/bim` | `…/bim` | `""` |
| `workspaces.api` / `workspacesV2.api` | `WORKSPACESV2_API` | `…/workspaces/` | `…/workspaces/` | `/workspaces/` |
| `workflows.api` | `WORKFLOWS_API` | `…/workflows` | `…/workflows` | `/workflows` |
| `remarks.api` | `REMARKS_API` | `…/remarks/api/v1` | `…/remarks/api/v1` | `/remarks/api/v1` |
| `issues.api` | `ISSUES_API` | `…/issues/api/v1` | `…/issues/api/v1` | `/issues/api/v1` |
| `issuesBase.api` | `ISSUES_BASE_API` | `…/issues/api` | `…/issues/api` | `/issues/api` |
| `flows.api` | — | `…/issues/api/v1` | `…/issues/api/v1` | `/issues/api/v1` |
| `inspections.api` | — | `…/inspections/api/v1` | `…/inspections/api/v1` | `/inspections/api` |
| `documentations.api` | `DOCUMENTATIONS_API` | `…/documentations/api/v1` | `…/documentations/api/v1` | `/documentations/api/v1` |
| `pm.api` | — | `…/documentations/api/v1` | `…/documentations/api/v1` | `/documentations/api/v1` |
| `analyticsV2.api` | — | `…/analytics-v2/api/v1` | `…/analytics-v2/api/v1` | `/analytics-v2/api/v1` |
| `analytics.api` | `ANALYTICS_API` | `…/analytics` | `…/analytics` | `/analytics` |
| `processes.api` | `PROCESSES_API` | `…/flows/api/v1` | `…/flows/api/v1` | `/flows/api/v1` |
| `gateway.gateway` | `GATEWAY` | `…/gateway` | `…/gateway` | (local: `http://localhost:9000/gateway`) |
| `gateway.api` | `GATEWAY_API` | `…/gateway/api/v1` | `…/gateway/api/v1` | `/gateway/api/v1` |
| `gateway.apiV2` | `GATEWAY_API_V2` | `…/gateway/api/v2` | `…/gateway/api/v2` | `/gateway/api/v2` |
| `eav.api` | `EAV_API` | `…/eav/api/v0` | `…/eav/api/v0` | `/eav/api/v0` |
| `eav.apiV1…apiV4` | `EAV_API_V1…V4` | `…/eav/api/v1…v4` | `…/eav/api/v1…v4` | `/eav/api/v1…v4` |
| `notifications.api` | `NOTIFICATIONS_API` | `…/lambdas/notification/` | `…/lambdas/notification/` | `""` |
| `lambdas.api` | `LAMBDAS_API` | `…/lambdas` | `…/lambdas` | `/lambdas` |
| `automations.api` | `AUTOMATIONS_API` | `…/automation/api/v1` | `…/automation/api/v1` | `/automation/api/v1` |
| `orchestrator.api` | `ORCHESTRATOR_API` | `…/orchestrator` | `…/orchestrator/api` | `/orchestrator/api` |
> `…` = `https://stage-api.sarex.io` (stage) или `https://api.sarex.io` (prod).
> Собственный Django-backend (`sarex-backend`) в контуре обслуживается по
> относительным путям `/api/...` — см. `openapi.yaml`.
## Удалённые модули (Module Federation, `remoteEntry.js`)
Хост подгружает микрофронтенды по URL из `endpoints.<сервис>.module[ENDPOINT]`.
Базовый хост модулей: `https://stage-modules.sarex.io` (stage) /
`https://modules.sarex.io` (prod); в контуре — относительные пути.
| Сервис | Константа | Путь `module` (относительный, контур) |
| --- | --- | --- |
| `workspaces` | `WORKSPACES_MODULE` | `/workspaces/module/remoteEntry.js` |
| `workspacesV2` | `WORKSPACESV2_MODULE` | `/workspaces-v2/module/remoteEntry.js` |
| `workflows` | `WORKFLOWS_MODULE` | `/workflows/module/remoteEntry.js` |
| `remarks` | `REMARKS_MODULE` | `/remarks/static/module/remoteEntry.js` |
| `issues` | `ISSUES_MODULE` | `/issues/static/module/remoteEntry.js` |
| `flows` | `FLOWS_MODULE` | `/flows/static/module/remoteEntry.js` |
| `inspections` | `INSPECTIONS_MODULE` | `/inspections/static/module/remoteEntry.js` |
| `documentations` | `DOCUMENTATIONS_MODULE` | `/documentations/static/module/remoteEntry.js` |
| `pm` | `PM_MODULE` | `/pm/module/remoteEntry.js` |
| `projects` | `PROJECTS_MODULE` | `/projects/static/module/remoteEntry.js` |
| `analyticsV2` | `ANALYTICS_MODULE` | `/analytics-v2/static/module/remoteEntry.js` |
| `reviews` | `REVIEWS_MODULE` | `/reviews/static/module/remoteEntry.js` |
| `administration` | `ADMINISTRATION_MODULE` | `/control-interface/modules/admin/remoteEntry.js` |
| `adminProc` | `ADMIN_PROC_MODULE` | `/admin-frontend/static/module/remoteEntry.js` |
| `assets` | `ASSETS_MODULE` | `/control-interface/modules/assets/remoteEntry.js` |
| `premises` | `PREMISES_MODULE` | `/premises/static/module/remoteEntry.js` |
| `contracts` | `CONTRACTS_MODULE` | `/cotracts/static/module/remoteEntry.js` |
| `transmittal` | `TRANSMITTAL_MODULE` | `/transmittal/static/module/remoteEntry.js` |
| `prescriptions` | `PRESCRIPTIONS_MODULE` | `/prescriptions/static/module/remoteEntry.js` |
| `rfi` | `RFI_MODULE` | `/rfi/static/module/remoteEntry.js` |
| `assistant` | — | `/assistant/static/module/remoteEntry.js` |
Список подключаемых в ЛК модулей (пункты меню) дублируется на стороне backend в
`SAREX_MODULES` (ConfigMap `django-configmap`): `remarks`, `issues`,
`documentations`, `reviews`, `processes`, `rfi`, `transmittal`.
## Backend, обслуживающий шелл
Основной API самого шелла (аутентификация, пользователи, настройки приложения,
проекты/цели/миссии, аналитика) — это `sarex-backend` под префиксом `/api/...`
`/internal/...` для внутрикластерных вызовов). Полное описание серверных
эндпоинтов приведено в `openapi.yaml`. Ключевые группы:
| Префикс | Назначение |
| --- | --- |
| `/api/token…`, `/api/auth/…`, `/api/login`, `/api/logout` | Аутентификация и JWT |
| `/api/app-settings/` | Настройки приложения |
| `/api/core/…` | Пользователи, компании, цели, миссии, ортофото, облака точек и т.д. |
| `/api/client/…` | Клиентский дашборд, загрузки, self-сервис |
| `/api/analytics/…` | Аналитические дашборды, метрики, виджеты |
| `/api/map/…` | Кадастр и заметки на карте |
| `/api/pg/…` | Облака точек, экспорт, измерения |
| `/internal/client/…` | Внутренние вызовы (настройки, токены) |