From e43e3f617f3efb7d8057f3ac4f762635f14b2086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=97=D0=B8=D0=BC=D0=B8=D0=BD?= Date: Thu, 14 May 2026 22:41:45 +0000 Subject: [PATCH] fix(schema-drafts): /drafts/active returns 200+null instead of 404 (no console spam) --- .../restapi/web/SchemaDraftController.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/ordinis-rest-api/src/main/java/cloud/nstart/terravault/ordinis/restapi/web/SchemaDraftController.java b/ordinis-rest-api/src/main/java/cloud/nstart/terravault/ordinis/restapi/web/SchemaDraftController.java index ea583d1..4b6793b 100644 --- a/ordinis-rest-api/src/main/java/cloud/nstart/terravault/ordinis/restapi/web/SchemaDraftController.java +++ b/ordinis-rest-api/src/main/java/cloud/nstart/terravault/ordinis/restapi/web/SchemaDraftController.java @@ -169,15 +169,24 @@ public class SchemaDraftController { /** * Convenience endpoint: фронт хочет ОДИН query'ом узнать "есть ли active * draft на этом dict'е и в каком он state'е". Returns 200 с draft body - * либо 404 если нет active. + * либо 200 с {@code null} если активного draft нет. + * + *

Why 200 + null instead of 404: "no active draft" — это normal + * state, не error condition. Раньше возвращали 404 {@code no_active_draft}, + * frontend silently mapped to null, но browser console всё равно logs 4xx + * network failures на каждый poll (refetchInterval=20s + invalidate after + * mutations). Spam'ило console. 200 + null body = clean console + same + * frontend behavior. + * + *

Frontend (queries.ts dictActiveSchemaDraftQuery) сохраняет 404→null + * fallback для backward compat и robustness — если кто-то откатит этот + * change или старый client с новым backend ещё не deployed. */ @GetMapping("/api/v1/dictionaries/{name}/drafts/active") public SchemaDraftResponse active(@PathVariable String name) { - DictionarySchemaDraft draft = draftService.findActive(name).orElseThrow(() -> - cloud.nstart.terravault.ordinis.restapi.error.OrdinisException.notFound( - "no_active_draft", - "У справочника " + name + " нет активного draft'а.")); - return SchemaDraftResponse.from(draft, name); + return draftService.findActive(name) + .map(d -> SchemaDraftResponse.from(d, name)) + .orElse(null); } /** Single draft по id (drilling в reviewer queue). */