diff --git a/backend/app/main.py b/backend/app/main.py index c779e335..5f6507ed 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -521,6 +521,11 @@ async def health() -> dict[str, str]: # дублировать сборку payload) — RFC 9110 §9.3.2 разрешает опускать payload- # заголовки (Content-Length) для HEAD, требует совпадения только заголовков # представления (Content-Type). -@app.head("/health") +# include_in_schema=False: HEAD-проба — инфраструктура (uptime-monitor), а не часть +# контракта, по которому фронт генерирует типы. Без этого флага операция попадает в +# app.openapi(), и job `openapi-codegen-check` краснеет, требуя перегенерации +# frontend/src/types/api-types.ts — правки в сгенерированном файле ради маршрута, +# который фронт никогда не вызывает. +@app.head("/health", include_in_schema=False) async def health_head() -> Response: return Response(status_code=200, media_type="application/json") diff --git a/tradein-mvp/backend/app/main.py b/tradein-mvp/backend/app/main.py index 8a48c7c3..d9b7aaff 100644 --- a/tradein-mvp/backend/app/main.py +++ b/tradein-mvp/backend/app/main.py @@ -222,7 +222,10 @@ def health() -> dict[str, str]: # сознательно НЕ вычисляем под байт GET-ответа (дублировало бы сборку payload) # — RFC 9110 §9.3.2 разрешает опускать payload-заголовки (Content-Length) для # HEAD, требует совпадения только заголовков представления (Content-Type). -@app.head("/health") +# include_in_schema=False — по той же причине, что и у Site Finder: HEAD-проба это +# инфраструктура, а не контракт API. Здесь codegen-джоба пока нет, флаг ставим +# симметрично, чтобы схема двух бэкендов не разъезжалась. +@app.head("/health", include_in_schema=False) def health_head() -> Response: return Response(status_code=200, media_type="application/json")