From 183b4d02bbfe00dbb98a2307a640307b2069f004 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Tue, 6 Oct 2026 15:43:39 +0400 Subject: [PATCH] =?UTF-8?q?docs(dev):=20Authorize=20=D0=B2=20Swagger=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=8F=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D1=81=20arm-core=20#29;=20=D0=BF=D1=83=D1=82=D1=8C=20=D1=80?= =?UTF-8?q?=D1=83=D1=87=D0=BA=D0=B8=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B0=D0=BB=D0=B8=D0=B0=D1=81=D0=B0=20=D1=81=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B5=D1=84=D0=B8=D0=BA=D1=81=D0=BE=D0=BC=20/direc?= =?UTF-8?q?tories?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit frontend-auth-guide §8 и qa-guide §4.5: кнопка Authorize есть только со схемой bearerAuth (arm-core #29), публичные ручки без замка; на стенде старше — curl. Исправлен путь DELETE /directories/legal-entities/{id}/aliases/{alias_id} в api-contract-slice-4 §4 п. 18 и qa-guide N8 (неточность PR #31). Closes #32 Co-Authored-By: Claude Fable 5.1 Claude-Session: cedd7915-2efe-41e5-988c-a9117033598b --- dev/api-contract-slice-4.md | 2 +- dev/frontend-auth-guide.md | 5 ++++- dev/qa-guide.md | 5 ++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/dev/api-contract-slice-4.md b/dev/api-contract-slice-4.md index 80a5ca3..56055ba 100644 --- a/dev/api-contract-slice-4.md +++ b/dev/api-contract-slice-4.md @@ -143,7 +143,7 @@ alias_moved_from (uuid | null)}`. `period_year` = год конца диапазона, а `period_quarter` и `is_cumulative` — `null`. Такой документ не подходит ни одной версии (привязка идёт по кварталу), в чек-листе и своде не участвует, подтверждать его можно. В списке документов показывайте год и пометку «период не определён», не подставляйте квартал сами. Границы периода появятся в контракте v1.2 (Срез 2b). -18. **Удаление алиаса** (`DELETE /legal-entities/{id}/aliases/{alias_id}`) во время переноса этого же алиаса ручным сопоставлением +18. **Удаление алиаса** (`DELETE /directories/legal-entities/{id}/aliases/{alias_id}`) во время переноса этого же алиаса ручным сопоставлением (`move_alias: true`) теперь ждёт блокировку и отвечает 404 `NOT_FOUND`, если алиас уже переехал (arm-core #26, T11.3) — это не ошибка клиента, перечитайте список алиасов. diff --git a/dev/frontend-auth-guide.md b/dev/frontend-auth-guide.md index f33f496..4d4c675 100644 --- a/dev/frontend-auth-guide.md +++ b/dev/frontend-auth-guide.md @@ -225,7 +225,10 @@ curl -s localhost:8000/api/v1/admin/users -H "Authorization: Bearer $TOKEN" curl -s localhost:8000/api/v1/no-such-route -H "Authorization: Bearer $TOKEN" ``` -В Swagger (`/docs`, только при `DEBUG=true`): **Authorize** → вставить токен без слова `Bearer`. +В Swagger (`/docs`, только при `DEBUG=true`): **Authorize** (замок справа вверху) → вставить токен без слова `Bearer` → все +защищённые ручки получают заголовок. Кнопка есть с arm-core #29 (схема `bearerAuth` в `openapi.json`, +`components.securitySchemes`); на стенде старше этого PR кнопки нет — проверяйте curl. Публичные ручки без замка: `POST /dev/token`, +`GET /healthcheck`. ## 9. Открытые вопросы, которые затронут фронт diff --git a/dev/qa-guide.md b/dev/qa-guide.md index df0ec79..bc4c5da 100644 --- a/dev/qa-guide.md +++ b/dev/qa-guide.md @@ -142,6 +142,9 @@ REACT_APP_API_URL=http://localhost:8000 REACT_APP_ROOT_PATH=/ npm run start ### 4.5 Токен для Swagger и curl +В Swagger (`/docs`) токен подставляется кнопкой **Authorize** (замок справа вверху): вставьте значение `access_token` без слова +`Bearer`, дальше все защищённые ручки отправляют заголовок сами. Кнопка появилась с arm-core #29; если её нет — бэкенд старше, используйте curl: + ```bash TOKEN=$(curl -s -X POST localhost:8000/api/v1/dev/token -H 'Content-Type: application/json' \ -d '{"email":"ka_go@armka.local"}' | python3 -c 'import sys,json;print(json.load(sys.stdin)["access_token"])') @@ -262,7 +265,7 @@ docker compose -f ../docs/dev/docker-compose.yml exec postgres \ | N5 | `PUT /consolidations/versions/{id}/members` с 501 `legal_entity_ids` (можно повторить один id) | 422, тело — массив pydantic `detail[] {loc: ["body", "legal_entity_ids"], …}`, без `code` | | N6 | `POST …/status` с `comment` длиннее 1000 символов | 422, массив pydantic с `loc: ["body", "comment"]` | | N7 | `GET …/osv?q=<501 символ>` и `GET …/osv/export?q=<501 символ>` | 422, массив pydantic с `loc: ["query", "q"]`; 500 символов — 200 | -| N8 | `DELETE /legal-entities/{id}/aliases/{alias_id}` для уже перенесённого алиаса | 404 `NOT_FOUND`, записи аудита об удалении нет | +| N8 | `DELETE /directories/legal-entities/{id}/aliases/{alias_id}` для уже перенесённого алиаса | 404 `NOT_FOUND`, записи аудита об удалении нет | ### 6.6 Загрузка ОСВ и просмотр строк через API (Срез 2c)