food-market/docs/api-reference.md
nns 99b84132ba
Some checks failed
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Has been cancelled
Docker API / Deploy API on stage (push) Has been cancelled
fix(s28): api-reference handle ~/path ASP.NET convention
ASP.NET Core convention для HttpX-атрибутов: `~/path` означает
'absolute from root, ignore class [Route]'. До фикса генератор клеил
`base-route` + `~/path` → невалидный `/~/connect/token`.

Теперь tilde корректно срезается, /connect/token виден в reference.

Также добавлен unit test ApiReferenceDocsJobTests (Sprint 28) для
lock-down regex behavior на double-nested generics.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 03:41:15 +05:00

25 KiB
Raw Blame History

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