iac/apps/prescriptions/ENDPOINTS.md

14 KiB
Raw Permalink Blame History

Эндпоинты, с которыми взаимодействует prescriptions-frontend

Документ описывает все HTTP-эндпоинты внешних сервисов, к которым обращается модуль (микрофронтенд prescriptions-frontend, Module Federation srx_prescriptions, экспонирует ./PrescriptionsPage).

Как устроено взаимодействие

Запросы выполняются через единый httpService (module/api/http-service.ts), созданный фабрикой createHttpService из @sarex-team/sdk-js поверх axios. Каждый вызов задаётся объектом с полями:

  • service — логическое имя сервиса (см. таблицу хостов ниже);
  • url — путь запроса (дописывается к базовому хосту сервиса);
  • data — тело запроса (для POST/PUT/PATCH);
  • queryKey, axiosConfig (в т.ч. responseType: "blob" для файлов), params — опции кеширования/повторов и параметры запроса.

Метод HTTP определяется вызываемой функцией httpService: getRequest/postRequest/putRequest/patchRequest/deleteRequest.

Базовый хост подставляется SDK по паре (BUILD_ENV, service) из реестра module/api/hosts.ts. Значение BUILD_ENV задаётся на этапе сборки (webpack.config.jsDefinePlugin, глобальная константа BUILD_ENV), по умолчанию — prod (http-service.ts: BUILD_ENV ?? "prod"). В окружении local тип сервиса переключается на original (setTypeOfHttpService("original")).

Итоговый URL = <базовый хост сервиса> + url.

Определения вызовов сосредоточены в module/api/* (index.ts, contractsApi.ts, resourcesApi.ts, templatesApi.ts, marks.ts) и частично в сторах (module/store/stores/resources.ts, module/store/stores/users.ts).

Базовые хосты по сервисам и окружениям

Значения из module/api/hosts.ts. Помимо stage/prod определены окружения local, preprod и contourcontour — относительные пути для изолированного контура).

Сервис (service) Назначение stage prod
prescriptions Предписания (поверх issues) https://stage-api.sarex.io/issues/api/prescriptions https://api.sarex.io/issues/api/prescriptions
issues Сервис замечаний/issues https://stage-api.sarex.io/issues/api https://api.sarex.io/issues/api
documentations Сервис документации (документы, бандлы, диски) https://stage-api.sarex.io/documentations/api/v1 https://api.sarex.io/documentations/api/v1
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
sarex Основной backend (core/client) https://stage.sarex.io https://lk.sarex.io
sarexApi API Sarex (contracts) https://stage-api.sarex.io https://api.sarex.io
eav_api_v0 Сервис атрибутов (EAV) https://stage-api.sarex.io/eav/api/v0 https://api.sarex.io/eav/api/v0
orchestrator Оркестратор процессов (маркировка, подпись) https://stage-api.sarex.io/orchestrator https://api.sarex.io/orchestrator/api
files Сервис файлов (скачивание) https://stage-api.sarex.io/files/api/v1 https://api.sarex.io/files/api/v1
lambdas Лямбды (экспорт reviews) https://stage-api.sarex.io/lambdas https://api.sarex.io/lambdas
checklists Сервис чек-листов https://stage-api.sarex.io/checklists/api/v1 https://api.sarex.io/checklists/api/v1
zitadel IdP (аутентификация) https://idp.dev.stage.sarex.io https://login.sarex.io

Подключаемый удалённый модуль (Module Federation) описан отдельно в module/api/module-hosts.ts: documentationsremoteEntry.js (stage: https://stage-modules.sarex.io/documentations/static/module/remoteEntry.js, prod: https://modules.sarex.io/documentations/static/module/remoteEntry.js). Хост выбирается функцией getModuleHost(moduleName) по BUILD_ENV.

Эндпоинты по сервисам

prescriptions — Предписания

Функция Метод Путь Назначение
getPrescriptions GET /?{query} Список предписаний (фильтры/поиск, сериализация в serializePrescriptionParams)
createPrescription POST /prescription/ Создать предписание ⚠ вызывается с service: "prescription" (см. замечания)
getPrescriptionById GET /{id}/ Предписание по id
editPrescription PATCH /{id}/ Редактировать предписание
deletePrescription DELETE /{id}/ Удалить предписание
exportPrescriptionById GET /{id}/export/?file_format={docx|pdf} Экспорт предписания в docx/pdf
getStatusCount GET /status-count/?{query} Счётчики по статусам
getHistoryByCompanyId GET /history/?company_id={id} История предписаний компании
getHistoryByPrescriptionId GET /{id}/history/ История конкретного предписания

issues — Замечания / статусы

Функция Метод Путь Назначение
getStatusModels GET /prescription-status-models/?company_id={id} Модели статусов предписаний
getCompanyStatuses GET /prescription-statuses/?company_id={id} Статусы предписаний компании
getIssues GET /issues/?{params} Список замечаний
getCustomStatuses GET /companies/{companyId}/status-model/v2/ Кастомная модель статусов компании

documentations — Сервис документации

Функция Метод Путь Назначение
getDocument GET /documents/{id} Документ по id
getDisks GET /disks Список дисков (используется в DocumentAPI и TemplatesApi)
mark PUT /bundles/{bundleId}/marks Добавить штампы/QR/подписи в бандл
sign POST /bundles/{bundleId}/sign Подписать бандл
downloadFile GET /bundles/{bundleId}/{key}/download Скачать файл бандла (responseType: blob)

gateway_api_v1 — Gateway API v1

Функция Метод Путь Назначение
getResources (store) GET /resources/?company_id={id} Список ресурсов компании
fetchParentDocumentByResourceId GET /resources-rpc/parent-document-by-resource-id/{resourceId}/ Родительский документ по resource id
fetchDocumentsBundleVersions POST /documents/bundle_versions Версии бандлов документов
getDocumentAncestors POST /documents/ancestors Предки документов
getTemplates GET /disks/{diskId}/flat_documents/?type={type} Шаблоны диска (плоский список)

gateway_api_v2 — Gateway API v2

Функция Метод Путь Назначение
getUsersByResourceId GET /users/?{query} Пользователи по фильтру ресурса
getResourceFullInfo GET /resources/{resourceId}/ Полная информация о ресурсе

sarex — Основной backend (core/client)

Функция Метод Путь Назначение
getUsersByCompanyId GET /api/core/users/?company={id}&{query} Пользователи компании
getDepartments GET /api/core/admin/departments/?company={id} Отделы компании
getDepartmentsV2 GET /api/core/admin/departments/?company={id}&{query} Отделы компании (с доп. query)
getPositions GET /api/core/admin/positions/?company={id} Должности компании
getPositionsV2 GET /api/core/admin/positions/?company={id}&{query} Должности компании (с доп. query)
getSettings (store) GET /api/client/settings/ Клиентские настройки

sarexApi — API Sarex (contracts)

Функция Метод Путь Назначение
getContracts GET /contracts/api/v0/contracts/?tenant_id={companyId} Договоры компании
getContractsByContractorId GET /contracts/api/v0/contracts/?tenant_id={companyId}&contractor_id={id} Договоры по контрагенту

eav_api_v0 — Сервис атрибутов (EAV)

Функция Метод Путь Назначение
getAttributes GET /attribute/?company_id={id} Атрибуты компании

orchestrator — Оркестратор процессов

Функция Метод Путь Назначение
createMarkFlow POST /process Запустить процесс маркировки
getMarkFlow GET /process/{id} Процесс по id
startSign POST /sign Запустить подписание

files — Сервис файлов

Функция Метод Путь Назначение
downloadDocuments POST /documents/ Скачать документы по bundle_ids (responseType: blob)

lambdas — Лямбды (экспорт)

Функция Метод Путь Назначение
fetchExportReviewsByResourceIDs GET /export-reviews/{params} Экспорт reviews (xlsx)
fetchExportReview GET /export-reviews/{reviewId}/report/ Отчёт по review (pdf)

flows — Процессы (⚠ сервис не задан в hosts.ts)

Функция Метод Путь Назначение
changeCopyPaths PATCH /documents/change-copy-paths/ Изменить пути копий документов

Обработка ошибок

Отдельного модуля-маппера ошибок (errors.ts) в проекте нет — обработка распределена:

  • часть обёрток (ContractsApi, ResourcesApi, TemplatesApi) при ошибке пробрасывают throw new Error(error);
  • часть функций (fetchParentDocumentByResourceId, fetchExportReview*) гасят ошибку через console.error и не пробрасывают её;
  • тип ответа об ошибке — ErrorResponse (module/api/types.ts): читается response.data.detail;
  • статусы запроса в сторах: RequestStatusinit/loading/success/fetching/error/permissionError.

Права доступа (module/api/permissions.ts)

Модуль оперирует правами core.*: can_view_prescription, can_add_prescription, can_edit_prescription, can_delete_prescription, can_view_all_prescriptions, can_admin_prescription. Группы (FG_PERMISSIONS): ADMIN (все права), AUTHOR (просмотр + создание), RESPONSIBLE и VIEW_ALL (просмотр).

Замечания и потенциальные проблемы

  • prescription (единственное число)createPrescription вызывается с service: "prescription", но такого ключа в module/api/hosts.ts нет (есть только prescriptions). Базовый хост не резолвится корректно — вероятно опечатка, следует использовать prescriptions.
  • flowschangeCopyPaths использует service: "flows", который также не задан в hosts.ts. Ключ нужно добавить в реестр либо исправить.
  • contour — в окружении contour не определён сервис sarexApi, поэтому getContracts/getContractsByContractorId в этом контуре работать не будут.
  • orchestrator — в prod базовый URL с суффиксом /api (.../orchestrator/api), а в stage/local/preprod — без него. Пути эндпоинтов (/process, /sign) следует проверять с учётом этого различия.
  • checklists и zitadel заданы в hosts.ts, но напрямую через httpService в модуле не вызываются (zitadel — IdP, используется SDK для авторизации; checklists в текущем коде модуля не используется).