From 1e3434d76ecc0bd7b7ff9b44d0b29a00e581ace0 Mon Sep 17 00:00:00 2001 From: "Eric 1549169735@qq.com" <1549169735@qq.com> Date: Wed, 19 Aug 2026 22:08:54 +0800 Subject: [PATCH] feat: project public runs to multitable outbox --- internal/audit/audit.go | 2 +- internal/run/public.go | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/internal/audit/audit.go b/internal/audit/audit.go index 991ae9b..cdd0d51 100644 --- a/internal/audit/audit.go +++ b/internal/audit/audit.go @@ -57,7 +57,7 @@ func isProjected(resource, action string) bool { case "scenario_field": return action == "create" || action == "update" || action == "delete" case "sop": - return action == "publish" || action == "offline" + return action == "publish" || action == "offline" || action == "save_graph" case "scenario_rule", "knowledge_item", "knowledge_relation": return action == "create" || action == "update" || action == "delete" || action == "archive" case "sop_run": diff --git a/internal/run/public.go b/internal/run/public.go index f6304cd..7051574 100644 --- a/internal/run/public.go +++ b/internal/run/public.go @@ -9,6 +9,8 @@ import ( "strings" "time" + "git.iwork-ai.com/xdc/iqudo-top1/internal/audit" + "git.iwork-ai.com/xdc/iqudo-top1/internal/auth" "git.iwork-ai.com/xdc/iqudo-top1/internal/model" "git.iwork-ai.com/xdc/iqudo-top1/internal/response" "git.iwork-ai.com/xdc/iqudo-top1/internal/resultcontract" @@ -104,7 +106,10 @@ func (h *Handler) PublicStart(c *gin.Context) { return err } payload, _ := json.Marshal(gin.H{"source": "public_sdk", "mapped_field_keys": sortedKeys(normalized), "matched_rule_keys": matchedRules}) - return tx.Create(&model.SOPRunEvent{TenantID: scenario.TenantID, RunID: run.ID, NodeKey: run.CurrentNodeKey, Action: "start", Payload: datatypes.JSON(payload)}).Error + if err := tx.Create(&model.SOPRunEvent{TenantID: scenario.TenantID, RunID: run.ID, NodeKey: run.CurrentNodeKey, Action: "start", Payload: datatypes.JSON(payload)}).Error; err != nil { + return err + } + return audit.RecordTx(tx, auth.Principal{TenantID: scenario.TenantID, UserID: scenario.CreatedBy}, "start", "sop_run", run.ID, gin.H{"source": "public_sdk"}) }) if err != nil { if body.ExternalRef != "" { @@ -178,7 +183,13 @@ func (h *Handler) PublicSubmit(c *gin.Context) { if err := tx.Create(&model.SOPRunEvent{TenantID: run.TenantID, RunID: run.ID, NodeKey: run.CurrentNodeKey, Action: "answer", Payload: datatypes.JSON(payload)}).Error; err != nil { return err } - return advancePublicRun(tx, &run) + if err := advancePublicRun(tx, &run); err != nil { + return err + } + if run.Status == "completed" { + return audit.RecordTx(tx, auth.Principal{TenantID: run.TenantID, UserID: run.OperatorID}, "finish", "sop_run", run.ID, gin.H{"source": "public_sdk", "result": run.Result}) + } + return nil }) if err != nil { h.respondPublicMutationError(c, err, "提交节点失败") @@ -275,7 +286,7 @@ func (h *Handler) PublicFinish(c *gin.Context) { return err } run.Status, run.Result, run.FinalResult, run.CompletedAt = "completed", body.Result, datatypes.JSON(finalRaw), completedAt - return nil + return audit.RecordTx(tx, auth.Principal{TenantID: run.TenantID, UserID: run.OperatorID}, "finish", "sop_run", run.ID, gin.H{"source": "public_sdk", "result": body.Result}) }) if err != nil { h.respondPublicMutationError(c, err, "结束执行失败")