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 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): def _enum_member(value, enum_cls):
if value is None: if value is None:
return _ENUM_FALLBACKS.get(enum_cls) return _ENUM_FALLBACKS.get(enum_cls)
@@ -301,7 +307,7 @@ class KnowledgeDBRepository:
"category": data.category, "category": data.category,
"tags": data.tags, "tags": data.tags,
"source": _knowledge_enum_db_label(data.source), "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_incident_id": data.related_incident_id,
"related_playbook_id": data.related_playbook_id, "related_playbook_id": data.related_playbook_id,
"related_approval_id": data.related_approval_id, "related_approval_id": data.related_approval_id,
@@ -323,7 +329,7 @@ class KnowledgeDBRepository:
"title": data.title, "title": data.title,
"content": data.content, "content": data.content,
"tags": data.tags, "tags": data.tags,
"status": _knowledge_enum_db_label(data.status), "status": _knowledge_enum_db_value(data.status),
"related_approval_id": data.related_approval_id, "related_approval_id": data.related_approval_id,
}, },
) )
@@ -354,7 +360,7 @@ class KnowledgeDBRepository:
tags=data.tags, tags=data.tags,
source=_knowledge_enum_db_label(data.source), source=_knowledge_enum_db_label(data.source),
# 2026-04-04 ogt: Phase 25 P1 — 支援指定 statusANTI_PATTERN 直接 PUBLISHED # 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_incident_id=data.related_incident_id,
related_playbook_id=data.related_playbook_id, related_playbook_id=data.related_playbook_id,
related_approval_id=data.related_approval_id, related_approval_id=data.related_approval_id,
@@ -366,6 +372,7 @@ class KnowledgeDBRepository:
) )
self.db.add(record) self.db.add(record)
await self.db.flush() await self.db.flush()
await self.db.refresh(record)
logger.info("knowledge_entry_created", entry_id=record.id, title=record.title) logger.info("knowledge_entry_created", entry_id=record.id, title=record.title)
return self._to_model(record) return self._to_model(record)

View File

@@ -13,6 +13,7 @@ from src.repositories.knowledge_repository import (
KnowledgeDBRepository, KnowledgeDBRepository,
_enum_text, _enum_text,
_knowledge_enum_db_label, _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(EntrySource.HUMAN) == "HUMAN"
assert _knowledge_enum_db_label(EntryStatus.DRAFT) == "DRAFT" assert _knowledge_enum_db_label(EntryStatus.DRAFT) == "DRAFT"
assert _knowledge_enum_db_label(EntryStatus.PUBLISHED) == "published" assert _knowledge_enum_db_label(EntryStatus.PUBLISHED) == "published"
assert str(_knowledge_enum_db_value(EntryStatus.PUBLISHED)) == (
"'published'::entrystatus"
)