fix(workbench): remove synthetic check projections

This commit is contained in:
2026-09-24 12:01:01 +08:00
parent 1a6ff64bbe
commit e374b5b3cb
25 changed files with 953 additions and 935 deletions
+30 -6
View File
@@ -24,6 +24,11 @@ from .schemas import (
TRANSITIONS = {"pending": ["processing"], "processing": ["pending_review"],
"pending_review": ["processing", "completed"], "completed": []}
WORK_ORDER_FIELD_LABELS = {
"title": "标题", "summary": "说明", "status": "状态", "priority": "优先级",
"assignee": "负责人", "scheduled_at": "预约时间", "location": "位置",
"scenario_code": "场景编号", "feedback_requirements": "回执要求",
}
class PostgresStore:
@@ -268,8 +273,13 @@ class PostgresStore:
@staticmethod
def _active_managed_document(document: dict[str, Any]) -> dict[str, Any]:
"""Project a current active row without legacy soft-delete metadata."""
return {key: value for key, value in document.items()
if key not in {"deleted_at", "deleted_by"}}
active = {key: value for key, value in document.items()
if key not in {"deleted_at", "deleted_by"}}
if "work_order_id" in active:
active.pop("subtasks", None)
active.setdefault("feedback_requirements", [])
active.setdefault("activity", [])
return active
def _list_managed(self, who: Identity, table: str, id_column: str,
limit: int, cursor: UUID | None) -> dict[str, Any]:
@@ -314,6 +324,8 @@ class PostgresStore:
"work_order_id": str(uuid4()), "project_id": who.project_id, "revision": 1,
"origin": "synthetic", "created_at": now, "updated_at": now,
"created_by": who.user_id, "updated_by": who.user_id,
"activity": [{"sequence": 1, "occurred_at": now, "actor": who.user_id,
"kind": "created", "title": "工单创建", "detail": "预约工单已创建。"}],
}
return self._save_work_order(conn, who, document)
return self._mutate(who, "create_work_order", command, write)
@@ -326,7 +338,7 @@ class PostgresStore:
ensure(document["revision"] == command.expected_revision, "REVISION_CONFLICT", "工单版本已变化,请重新读取", 409)
changes = command.model_dump(mode="json", exclude_unset=True,
exclude={"request_id", "expected_revision", "clear_assignee", "clear_scheduled_at",
"clear_location", "clear_scenario_code", "clear_subtasks"})
"clear_location", "clear_scenario_code", "progress_note"})
if command.clear_assignee:
changes["assignee"] = None
if command.clear_scheduled_at:
@@ -335,10 +347,22 @@ class PostgresStore:
changes["location"] = None
if command.clear_scenario_code:
changes["scenario_code"] = None
if command.clear_subtasks:
changes["subtasks"] = None
changed_fields = [key for key, value in changes.items() if document.get(key) != value]
document.update(changes)
document.update(revision=document["revision"] + 1, updated_at=datetime.now(timezone.utc).isoformat(),
now = datetime.now(timezone.utc).isoformat()
revision = document["revision"] + 1
if command.progress_note:
title, detail, kind = "现场反馈", command.progress_note, "feedback"
elif changed_fields:
title, detail, kind = "工单信息更新", "更新了" + "、".join(
WORK_ORDER_FIELD_LABELS.get(field, field) for field in changed_fields
) + "。", "updated"
else:
title, detail, kind = "工单信息确认", "工单信息已确认,未记录新的现场进展。", "updated"
document["activity"].append({"sequence": revision, "occurred_at": now,
"actor": who.user_id, "kind": kind,
"title": title, "detail": detail})
document.update(revision=revision, updated_at=now,
updated_by=who.user_id)
return self._save_work_order(conn, who, document)
return self._mutate(who, f"update_work_order:{work_order_id}", command, write)