Overnight progress while 4h-soak runs in background:
1. ApiReferenceDocsJob.cs + scripts/gen-api-reference.py — return-type
regex теперь ловит nested generics любой глубины. Было 195
endpoint'ов в auto-gen reference; стало 240 (+45). EmployeesController
GET /api/organization/employees был пропущен из-за
Task<ActionResult<PagedResult<EmployeeDto>>>.
2. docs/observability.md — добавлен food_market_disk_free_bytes (Sprint 20)
+ раздел "quality-watchdog метрики" (5 метрик textfile exporter'a из
Sprint 26: run_total, step_failure_total, endpoint_p95_ms,
last_run_status, incidents_total). Готовые dashboards теперь содержат
оба JSON (food-market.json + quality-watchdog.json).
3. tests/integration/07-import-export-flows.spec.ts — POST 1C-CSV import
(semicolon-CSV cp1251) → создаются продукты с группой автоматом;
POST /api/org/export (НЕ /api/admin/org-export) → возвращает
{id, status}; orgB не видит export orgA. Прогон 8.2s.
4. tests/food-market.IntegrationTests/PruneQualityTestOrgsTests.cs —
2 [Fact]'a для метода из Sprint 25. Удаляет только quality-* старше
threshold, не трогает реальные org. Требует Testcontainers.
5. .forgejo/workflows/regression.yml — добавлен шаг integration suite
после flows+visual. Telegram: "35 flows + 60 visual + 8 integration".
Soak-real (4h @ 50 RPS) запущен в setsid-detach session, продолжается.
Итоговые числа добавлю в sprint28-progress.md после завершения.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
25 KiB
API endpoint reference
Сгенерировано Python-сканером (scripts/gen-api-reference.py) из src/food-market.api/Controllers/.
Sprint 28 версия: ловит endpoint'ы с nested generic return-типами.
Идентичный логике runtime-job ApiReferenceDocsJob (Sprint 24); тот пересоздаёт файл
еженедельно при cron Hangfire:Cron:ApiReferenceDocs.
Всего endpoint'ов: 240.
Контроллеров: 58.
Полная OpenAPI-спека: /swagger/v1/swagger.json. Этот reference — human-readable summary.
AbcReportController
Base route: /api/reports/abc
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/reports/abc |
— | |
| GET | /api/reports/abc/export |
— |
AdminCleanupController
Base route: /api/admin/cleanup
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/admin/cleanup/all |
— | Полная очистка данных текущей организации — всё кроме настроек: остаются Organization, пользователи,… |
| DELETE | /api/admin/cleanup/counterparties |
— | Удалить всех контрагентов текущей организации. Чтобы не нарваться на FK, сначала обнуляем ссылки (Pr… |
| GET | /api/admin/cleanup/stats |
— | |
| POST | /api/admin/cleanup/all/async |
— |
AdminJobsController
Base route: /api/admin/jobs
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/admin/jobs/recent |
— | |
| GET | /api/admin/jobs/{id:guid} |
— |
AuthForgotPasswordController
Base route: /api/auth
| Method | Route | Permission | Summary |
|---|---|---|---|
| POST | /api/auth/forgot-password |
— | |
| POST | /api/auth/reset-password |
— |
AuthSignupController
Base route: /api/auth
| Method | Route | Permission | Summary |
|---|---|---|---|
| POST | /api/auth/signup |
— |
AuthorizationController
| Method | Route | Permission | Summary |
|---|---|---|---|
| POST | /~/connect/token |
— |
CounterpartiesController
Base route: /api/catalog/counterparties
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/catalog/counterparties/{id:guid} |
— | |
| GET | /api/catalog/counterparties |
— | |
| GET | /api/catalog/counterparties/export |
— | Sprint 19: экспорт списка контрагентов. |
| GET | /api/catalog/counterparties/{id:guid} |
— | |
| POST | /api/catalog/counterparties |
— | |
| PUT | /api/catalog/counterparties/{id:guid} |
— |
CountriesController
Base route: /api/catalog/countries
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/catalog/countries/{id:guid} |
— | |
| GET | /api/catalog/countries |
— | |
| GET | /api/catalog/countries/{id:guid} |
— | |
| POST | /api/catalog/countries |
— | |
| PUT | /api/catalog/countries/{id:guid} |
— |
CurrenciesController
Base route: /api/catalog/currencies
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/catalog/currencies |
— | |
| GET | /api/catalog/currencies/{id:guid} |
— | |
| POST | /api/catalog/currencies |
— | |
| PUT | /api/catalog/currencies/{id:guid} |
— |
DashboardController
Base route: /api/dashboard
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/dashboard/low-stock |
— | Список товаров с остатком ≤ MinStock (Product.MinStock задан). Сортировка: меньший «запас в днях» → … |
| GET | /api/dashboard/margin |
— | Маржа за окно N дней: выручка минус COGS (Sum(qty * UnitCost) по строкам проданных товаров). Использ… |
| GET | /api/dashboard/recent-sales |
— | Последние N проведённых чеков (включая возвраты). Дашборд рендерит их как live-feed: SignalR SalePos… |
| GET | /api/dashboard/top-products |
— | Top-N товаров по выручке за окно последних N дней. Default: 7 дней, top-5. Только проведённые чеки (… |
DemandsController
Base route: /api/sales/demands
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/sales/demands/{id:guid} |
— | |
| GET | /api/sales/demands |
— | |
| GET | /api/sales/demands/{id:guid} |
— | |
| POST | /api/sales/demands |
— | |
| POST | /api/sales/demands/{id:guid}/post |
— | |
| POST | /api/sales/demands/{id:guid}/unpost |
— | |
| PUT | /api/sales/demands/{id:guid} |
— |
DemoSeedController
Base route: /api/admin/seed-demo
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/admin/seed-demo/status |
— | Сводка: какие демо-сущности уже наполнены. Дешёвый — только count'ы, не вызывает seed. UI использует… |
| POST | /api/admin/seed-demo |
— | Запустить seed демо-данных. Идемпотентен — если уже наполнено, возвращает existing summary без встав… |
DiagnosticController
Base route: /api/admin/diagnostic
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/admin/diagnostic/run |
— |
EmployeeRolesController
Base route: /api/organization/employee-roles
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/organization/employee-roles/{id:guid} |
— | |
| GET | /api/organization/employee-roles |
— | |
| GET | /api/organization/employee-roles/{id:guid} |
— | |
| POST | /api/organization/employee-roles |
— | |
| PUT | /api/organization/employee-roles/{id:guid} |
— |
EmployeesController
Base route: /api/organization/employees
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/organization/employees/{id:guid} |
— | |
| GET | /api/organization/employees |
— | |
| GET | /api/organization/employees/{id:guid} |
— | |
| POST | /api/organization/employees |
— | |
| PUT | /api/organization/employees/{id:guid} |
— |
EntersController
Base route: /api/inventory/enters
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/inventory/enters/{id:guid} |
— | |
| GET | /api/inventory/enters |
— | |
| GET | /api/inventory/enters/{id:guid} |
— | |
| POST | /api/inventory/enters |
— | |
| POST | /api/inventory/enters/{id:guid}/post |
— | |
| POST | /api/inventory/enters/{id:guid}/unpost |
— | |
| PUT | /api/inventory/enters/{id:guid} |
— |
ExternalAuthController
Base route: /api/auth/external
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/auth/external/callback |
— | Callback после успешного OAuth у провайдера. Читает claims и решает, что делать: связать с существую… |
| GET | /api/auth/external/providers |
— | Список доступных SSO-провайдеров. Web-фронт по этому списку решает, какие кнопки рисовать на /login. |
| GET | /api/auth/external/{provider} |
— | Инициирует OAuth challenge на провайдере. Если провайдер не сконфигурирован — 503 с подсказкой. |
FeedbackController
Base route: /api/feedback
| Method | Route | Permission | Summary |
|---|---|---|---|
| POST | /api/feedback |
— |
GlobalSearchController
Base route: /api/search
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/search/global |
— |
InventoriesController
Base route: /api/inventory/inventories
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/inventory/inventories/{id:guid} |
— | |
| GET | /api/inventory/inventories |
— | |
| GET | /api/inventory/inventories/{id:guid} |
— | |
| POST | /api/inventory/inventories |
— | |
| POST | /api/inventory/inventories/{id:guid}/post |
— | |
| POST | /api/inventory/inventories/{id:guid}/unpost |
— | |
| PUT | /api/inventory/inventories/{id:guid} |
— |
LossesController
Base route: /api/inventory/losses
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/inventory/losses/{id:guid} |
— | |
| GET | /api/inventory/losses |
— | |
| GET | /api/inventory/losses/{id:guid} |
— | |
| POST | /api/inventory/losses |
— | |
| POST | /api/inventory/losses/{id:guid}/post |
— | |
| POST | /api/inventory/losses/{id:guid}/unpost |
— | |
| PUT | /api/inventory/losses/{id:guid} |
— |
LoyaltyCardsController
Base route: /api/loyalty/cards
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/loyalty/cards/{id:guid} |
— | |
| GET | /api/loyalty/cards |
— | |
| GET | /api/loyalty/cards/lookup |
— | Lookup по CardNumber — используется кассой при оплате. Возвращает 404 если карты нет, 409 если карта… |
| POST | /api/loyalty/cards/issue |
— | |
| POST | /api/loyalty/cards/{id:guid}/block |
— | |
| POST | /api/loyalty/cards/{id:guid}/unblock |
— |
LoyaltyProgramsController
Base route: /api/loyalty/programs
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/loyalty/programs/{id:guid} |
— | |
| GET | /api/loyalty/programs |
— | |
| GET | /api/loyalty/programs/{id:guid} |
— | |
| POST | /api/loyalty/programs |
— | |
| PUT | /api/loyalty/programs/{id:guid} |
— |
MeAccountController
Base route: /api/me
| Method | Route | Permission | Summary |
|---|---|---|---|
| POST | /api/me/change-password |
— | Сменить пароль текущему юзеру. Требует текущий пароль для защиты от случайного/злонамеренного измене… |
MeSessionsController
Base route: /api/me/sessions
| Method | Route | Permission | Summary |
|---|---|---|---|
| POST | /api/me/sessions/revoke-all |
— | Гасит все refresh-токены текущего юзера. Использовать когда есть подозрение на угон cookies/пароля. |
MoySkladImportController
Base route: /api/admin/moysklad
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/admin/moysklad/settings |
— | |
| POST | /api/admin/moysklad/import-counterparties |
— | |
| POST | /api/admin/moysklad/import-products |
— | |
| POST | /api/admin/moysklad/test |
— | |
| PUT | /api/admin/moysklad/settings |
— |
MoySkladSyncStatusController
Base route: /api/moysklad
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/moysklad/sync-status |
— |
OrgAuditLogController
Base route: /api/admin/audit-log
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/admin/audit-log |
— | |
| POST | /api/admin/audit-log/export |
— | Sprint 22: streaming-export audit-log для compliance / расследований. Multi-tenant — query-filter пр… |
OrgExportController
Base route: /api/org/export
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/org/export |
— | |
| GET | /api/org/export/download/{token} |
— | Anonymous download по токену. Не требует авторизации — security через 256-битный random token + TTL … |
| GET | /api/org/export/{id:guid} |
— | |
| POST | /api/org/export |
— | Создать новый экспорт. Возвращает 202 + Id; полезно сразу polled'ить GET /api/org/export/{id} до Sta… |
OrgFiscalSettingsController
Base route: /api/organization/fiscal
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/organization/fiscal |
— | |
| GET | /api/organization/fiscal/providers |
— | Доступные значения провайдера для select'а в UI. Возвращаем массив, потому что enum-значения мы НЕ х… |
| POST | /api/organization/fiscal/test-send |
— | Тестовая отправка: создаёт «фейк-чек» (in-memory, не в БД) и отправляет через выбранного провайдера.… |
| PUT | /api/organization/fiscal |
— |
OrganizationSettingsController
Base route: /api/organization
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/organization/settings |
— | |
| PUT | /api/organization/settings |
— |
PlatformSettingsController
Base route: /api/super-admin/platform-settings
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/super-admin/platform-settings |
— | |
| POST | /api/super-admin/platform-settings/test-send |
— | |
| PUT | /api/super-admin/platform-settings |
— |
PosController
Base route: /api/pos/v1
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/pos/v1/sync |
— | |
| POST | /api/pos/v1/sales |
— |
PriceTypesController
Base route: /api/catalog/price-types
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/catalog/price-types/{id:guid} |
— | |
| GET | /api/catalog/price-types |
— | |
| GET | /api/catalog/price-types/{id:guid} |
— | |
| POST | /api/catalog/price-types |
— | |
| PUT | /api/catalog/price-types/{id:guid} |
— |
ProductGroupsController
Base route: /api/catalog/product-groups
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/catalog/product-groups/{id:guid} |
— | |
| GET | /api/catalog/product-groups |
— | |
| GET | /api/catalog/product-groups/{id:guid} |
— | |
| POST | /api/catalog/product-groups |
— | |
| PUT | /api/catalog/product-groups/{id:guid} |
— |
ProductImagesController
Base route: /api/catalog/products/{productId:guid}/images
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/catalog/products/{productId:guid}/images/{imageId:guid} |
— | |
| GET | /api/catalog/products/{productId:guid}/images |
— | |
| POST | /api/catalog/products/{productId:guid}/images |
— | |
| POST | /api/catalog/products/{productId:guid}/images/{imageId:guid}/main |
— |
ProductsController
Base route: /api/catalog/products
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/catalog/products/{id:guid} |
— | |
| GET | /api/catalog/products |
— | |
| GET | /api/catalog/products/barcode-duplicates |
— | Находит штрихкоды, привязанные к более чем одному товару в текущей организации. Уникальный индекс эт… |
| GET | /api/catalog/products/by-barcode/{value} |
— | Точный поиск по штрихкоду (для сканера). 0 → 404, 1 → объект, несколько → { items: [...] } чтобы UI … |
| GET | /api/catalog/products/export |
— | Sprint 19: экспорт списка товаров с теми же фильтрами что и /api/catalog/products. Сервер-side генер… |
| GET | /api/catalog/products/quick-search |
— | Лёгкий поиск для inline-добавления строк в документы (приёмка, продажа). Ранжирует точное совпадение… |
| GET | /api/catalog/products/{id:guid} |
— | |
| PATCH | /api/catalog/products/{id:guid}/price |
— | |
| POST | /api/catalog/products |
— | |
| POST | /api/catalog/products/bulk-update |
— | |
| POST | /api/catalog/products/import-csv |
— | |
| POST | /api/catalog/products/import/1c-csv |
— | |
| POST | /api/catalog/products/{id:guid}/recalc-retail |
— | «Привести розничную к себестоимости»: ставит дефолтную розничную цену = ceil(Cost * (1 + Group.Marku… |
| PUT | /api/catalog/products/{id:guid} |
— |
ProfitReportController
Base route: /api/reports/profit
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/reports/profit |
— | |
| GET | /api/reports/profit/export |
— |
PromotionsController
Base route: /api/promotions
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/promotions/{id:guid} |
— | |
| GET | /api/promotions |
— | |
| GET | /api/promotions/{id:guid} |
— | |
| POST | /api/promotions |
— | |
| PUT | /api/promotions/{id:guid} |
— |
RetailPointsController
Base route: /api/catalog/retail-points
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/catalog/retail-points/{id:guid} |
— | |
| GET | /api/catalog/retail-points |
— | |
| GET | /api/catalog/retail-points/{id:guid} |
— | |
| POST | /api/catalog/retail-points |
— | |
| PUT | /api/catalog/retail-points/{id:guid} |
— |
RetailSalesController
Base route: /api/sales/retail
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/sales/retail/{id:guid} |
— | |
| GET | /api/sales/retail |
— | |
| GET | /api/sales/retail/export |
— | Sprint 19: экспорт списка чеков с фильтрами status/storeId/from/to. |
| GET | /api/sales/retail/stats |
— | Aggregated sales metrics + daily series for the dashboard. Series buckets are days; defaults to last… |
| GET | /api/sales/retail/{id:guid} |
— | |
| POST | /api/sales/retail |
— | |
| POST | /api/sales/retail/{id:guid}/create-return |
— | POST /create-return — копирует строки проведённого чека в новый Draft с IsReturn=true и ReferenceSal… |
| POST | /api/sales/retail/{id:guid}/post |
— | |
| POST | /api/sales/retail/{id:guid}/unpost |
— | |
| PUT | /api/sales/retail/{id:guid} |
— |
SalesReportController
Base route: /api/reports/sales
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/reports/sales |
— | |
| GET | /api/reports/sales/export |
— |
StockController
Base route: /api/inventory
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/inventory/movements |
— | |
| GET | /api/inventory/stock |
— | |
| GET | /api/inventory/stock/export |
— | Sprint 19: экспорт остатков. |
StockReportController
Base route: /api/reports/stock
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/reports/stock |
— | |
| GET | /api/reports/stock/export |
— |
StoresController
Base route: /api/catalog/stores
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/catalog/stores/{id:guid} |
— | |
| GET | /api/catalog/stores |
— | |
| GET | /api/catalog/stores/{id:guid} |
— | |
| POST | /api/catalog/stores |
— | |
| PUT | /api/catalog/stores/{id:guid} |
— |
SuperAdminController
Base route: /api/super-admin
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/super-admin/audit-log |
— | |
| GET | /api/super-admin/dashboard |
— | |
| GET | /api/super-admin/settings |
— | |
| GET | /api/super-admin/setup-status |
— | |
| PUT | /api/super-admin/settings |
— |
SuperAdminEmployeesController
Base route: /api/super-admin/organizations/{orgId:guid}/employees
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/super-admin/organizations/{orgId:guid}/employees/{id:guid} |
— | |
| GET | /api/super-admin/organizations/{orgId:guid}/employees |
— | |
| GET | /api/super-admin/organizations/{orgId:guid}/employees/{id:guid} |
— | |
| POST | /api/super-admin/organizations/{orgId:guid}/employees |
— | |
| POST | /api/super-admin/organizations/{orgId:guid}/employees/{id:guid}/account/toggle-active |
— | |
| POST | /api/super-admin/organizations/{orgId:guid}/employees/{id:guid}/reset-password |
— | |
| POST | /api/super-admin/organizations/{orgId:guid}/employees/{id:guid}/toggle-active |
— | |
| PUT | /api/super-admin/organizations/{orgId:guid}/employees/{id:guid} |
— |
SuperAdminOrganizationsController
Base route: /api/super-admin/organizations
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/super-admin/organizations/{id:guid} |
— | |
| GET | /api/super-admin/organizations |
— | |
| GET | /api/super-admin/organizations/{id:guid} |
— | |
| POST | /api/super-admin/organizations |
— | |
| POST | /api/super-admin/organizations/{id:guid}/archive |
— | |
| POST | /api/super-admin/organizations/{id:guid}/change-owner |
— | |
| POST | /api/super-admin/organizations/{id:guid}/restore |
— | |
| PUT | /api/super-admin/organizations/{id:guid} |
— |
SuperAdminUnitsOfMeasureController
Base route: /api/super-admin/units-of-measure
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/super-admin/units-of-measure/{id:guid} |
— | Soft-delete: IsActive=false. Если на единицу ссылаются продукты или активные org-junction'ы — 409 со… |
| GET | /api/super-admin/units-of-measure |
— | |
| GET | /api/super-admin/units-of-measure/{id:guid} |
— | |
| POST | /api/super-admin/units-of-measure |
— | |
| PUT | /api/super-admin/units-of-measure/{id:guid} |
— |
SupplierReturnsController
Base route: /api/purchases/supplier-returns
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/purchases/supplier-returns/{id:guid} |
— | |
| GET | /api/purchases/supplier-returns |
— | |
| GET | /api/purchases/supplier-returns/{id:guid} |
— | |
| POST | /api/purchases/supplier-returns |
— | |
| POST | /api/purchases/supplier-returns/{id:guid}/post |
— | |
| POST | /api/purchases/supplier-returns/{id:guid}/unpost |
— | |
| PUT | /api/purchases/supplier-returns/{id:guid} |
— |
SuppliesController
Base route: /api/purchases/supplies
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/purchases/supplies/{id:guid} |
— | |
| GET | /api/purchases/supplies |
— | |
| GET | /api/purchases/supplies/export |
— | Sprint 19: экспорт списка приёмок с теми же фильтрами. |
| GET | /api/purchases/supplies/{id:guid} |
— | |
| POST | /api/purchases/supplies |
— | |
| POST | /api/purchases/supplies/{id:guid}/post |
— | |
| POST | /api/purchases/supplies/{id:guid}/unpost |
— | |
| PUT | /api/purchases/supplies/{id:guid} |
— |
TelegramBindingController
Base route: /api/organization/telegram
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/organization/telegram |
— | |
| GET | /api/organization/telegram/status |
— | |
| PUT | /api/organization/telegram/bind |
— |
TransfersController
Base route: /api/inventory/transfers
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/inventory/transfers/{id:guid} |
— | |
| GET | /api/inventory/transfers |
— | |
| GET | /api/inventory/transfers/{id:guid} |
— | |
| POST | /api/inventory/transfers |
— | |
| POST | /api/inventory/transfers/{id:guid}/post |
— | |
| POST | /api/inventory/transfers/{id:guid}/unpost |
— | |
| PUT | /api/inventory/transfers/{id:guid} |
— |
TwoFactorController
Base route: /api/me/2fa
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/me/2fa/status |
— | |
| POST | /api/me/2fa/disable |
— | |
| POST | /api/me/2fa/enroll |
— | |
| POST | /api/me/2fa/verify |
— |
UnitsOfMeasureController
Base route: /api/catalog/units-of-measure
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/catalog/units-of-measure/{id:guid}/enable |
— | Отключить global для текущей орги. Если на эту единицу ссылаются продукты орги — 409 со списком назв… |
| GET | /api/catalog/units-of-measure |
— | Список единиц для текущей орги: только включённые active globals. Для SuperAdmin без override — все … |
| GET | /api/catalog/units-of-measure/{id:guid} |
— | |
| POST | /api/catalog/units-of-measure/{id:guid}/enable |
— | Включить global для текущей орги. Идемпотентно: повторный вызов отдаёт 204 и не плодит дубликатов ju… |
UploadsController
Base route: /uploads
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /uploads/{*path} |
— |
UserPresetsController
Base route: /api/user/presets
| Method | Route | Permission | Summary |
|---|---|---|---|
| DELETE | /api/user/presets/{id:guid} |
— | |
| GET | /api/user/presets |
— | |
| POST | /api/user/presets |
— | |
| PUT | /api/user/presets/{id:guid} |
— |
WhatsNewController
Base route: /api/whats-new
| Method | Route | Permission | Summary |
|---|---|---|---|
| GET | /api/whats-new |
— |