fix(km): bind published enum compatibly
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 2s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 1m14s
CD Pipeline / build-and-deploy (push) Failing after 8m1s
CD Pipeline / post-deploy-checks (push) Has been skipped

This commit is contained in:
ogt
2026-07-14 15:35:09 +08:00
parent 0e4118551e
commit 10a19b03dc
2 changed files with 14 additions and 3 deletions

View File

@@ -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 — 支援指定 statusANTI_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)

View File

@@ -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"
)