From 10a19b03dc29db268ca9460cbde0b97023244385 Mon Sep 17 00:00:00 2001 From: ogt Date: Tue, 14 Jul 2026 15:35:09 +0800 Subject: [PATCH] fix(km): bind published enum compatibly --- apps/api/src/repositories/knowledge_repository.py | 13 ++++++++++--- .../tests/test_knowledge_repository_read_model.py | 4 ++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/apps/api/src/repositories/knowledge_repository.py b/apps/api/src/repositories/knowledge_repository.py index b8cac6c34..ff7ef5e45 100644 --- a/apps/api/src/repositories/knowledge_repository.py +++ b/apps/api/src/repositories/knowledge_repository.py @@ -163,6 +163,12 @@ def _knowledge_enum_db_label(value): return value +def _knowledge_enum_db_value(value): + if isinstance(value, EntryStatus) and value is EntryStatus.PUBLISHED: + return sa_text("'published'::entrystatus") + return _knowledge_enum_db_label(value) + + def _enum_member(value, enum_cls): if value is None: return _ENUM_FALLBACKS.get(enum_cls) @@ -301,7 +307,7 @@ class KnowledgeDBRepository: "category": data.category, "tags": data.tags, "source": _knowledge_enum_db_label(data.source), - "status": _knowledge_enum_db_label(data.status), + "status": _knowledge_enum_db_value(data.status), "related_incident_id": data.related_incident_id, "related_playbook_id": data.related_playbook_id, "related_approval_id": data.related_approval_id, @@ -323,7 +329,7 @@ class KnowledgeDBRepository: "title": data.title, "content": data.content, "tags": data.tags, - "status": _knowledge_enum_db_label(data.status), + "status": _knowledge_enum_db_value(data.status), "related_approval_id": data.related_approval_id, }, ) @@ -354,7 +360,7 @@ class KnowledgeDBRepository: tags=data.tags, source=_knowledge_enum_db_label(data.source), # 2026-04-04 ogt: Phase 25 P1 — 支援指定 status(ANTI_PATTERN 直接 PUBLISHED) - status=_knowledge_enum_db_label(data.status), + status=_knowledge_enum_db_value(data.status), related_incident_id=data.related_incident_id, related_playbook_id=data.related_playbook_id, related_approval_id=data.related_approval_id, @@ -366,6 +372,7 @@ class KnowledgeDBRepository: ) self.db.add(record) await self.db.flush() + await self.db.refresh(record) logger.info("knowledge_entry_created", entry_id=record.id, title=record.title) return self._to_model(record) diff --git a/apps/api/tests/test_knowledge_repository_read_model.py b/apps/api/tests/test_knowledge_repository_read_model.py index 632e43633..5b8dc07f3 100644 --- a/apps/api/tests/test_knowledge_repository_read_model.py +++ b/apps/api/tests/test_knowledge_repository_read_model.py @@ -13,6 +13,7 @@ from src.repositories.knowledge_repository import ( KnowledgeDBRepository, _enum_text, _knowledge_enum_db_label, + _knowledge_enum_db_value, ) @@ -273,3 +274,6 @@ def test_knowledge_enum_db_labels_match_deployed_postgresql_contract() -> None: assert _knowledge_enum_db_label(EntrySource.HUMAN) == "HUMAN" assert _knowledge_enum_db_label(EntryStatus.DRAFT) == "DRAFT" assert _knowledge_enum_db_label(EntryStatus.PUBLISHED) == "published" + assert str(_knowledge_enum_db_value(EntryStatus.PUBLISHED)) == ( + "'published'::entrystatus" + )