From 3068b626d03d36ac61fb24d341895c4d21082883 Mon Sep 17 00:00:00 2001 From: N1neSun <13716571+N1neSun@users.noreply.github.com> Date: Thu, 30 Jul 2026 16:16:37 +0800 Subject: [PATCH] fix(flows): allow pending trace IDs --- backend/pkg/server/docs/docs.go | 2 - backend/pkg/server/docs/swagger.json | 4 +- backend/pkg/server/docs/swagger.yaml | 2 - backend/pkg/server/models/flows.go | 2 +- backend/pkg/server/models/flows_test.go | 15 ++++++++ backend/pkg/server/services/flows_test.go | 46 +++++++++++++++++++++++ 6 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 backend/pkg/server/services/flows_test.go diff --git a/backend/pkg/server/docs/docs.go b/backend/pkg/server/docs/docs.go index b1561c30..95e59614 100644 --- a/backend/pkg/server/docs/docs.go +++ b/backend/pkg/server/docs/docs.go @@ -8436,7 +8436,6 @@ const docTemplate = `{ "status", "title", "tool_call_id_template", - "trace_id", "user_id" ], "properties": { @@ -8590,7 +8589,6 @@ const docTemplate = `{ "tasks", "title", "tool_call_id_template", - "trace_id", "user_id" ], "properties": { diff --git a/backend/pkg/server/docs/swagger.json b/backend/pkg/server/docs/swagger.json index 803e56ac..99d7b97d 100644 --- a/backend/pkg/server/docs/swagger.json +++ b/backend/pkg/server/docs/swagger.json @@ -8428,7 +8428,6 @@ "status", "title", "tool_call_id_template", - "trace_id", "user_id" ], "properties": { @@ -8582,7 +8581,6 @@ "tasks", "title", "tool_call_id_template", - "trace_id", "user_id" ], "properties": { @@ -10473,4 +10471,4 @@ "in": "header" } } -} \ No newline at end of file +} diff --git a/backend/pkg/server/docs/swagger.yaml b/backend/pkg/server/docs/swagger.yaml index ef648a1a..5c00a172 100644 --- a/backend/pkg/server/docs/swagger.yaml +++ b/backend/pkg/server/docs/swagger.yaml @@ -633,7 +633,6 @@ definitions: - status - title - tool_call_id_template - - trace_id - user_id type: object models.FlowExecutionStats: @@ -746,7 +745,6 @@ definitions: - tasks - title - tool_call_id_template - - trace_id - user_id type: object models.FlowUsageResponse: diff --git a/backend/pkg/server/models/flows.go b/backend/pkg/server/models/flows.go index b28052a4..ded458e1 100644 --- a/backend/pkg/server/models/flows.go +++ b/backend/pkg/server/models/flows.go @@ -56,7 +56,7 @@ type Flow struct { Language string `form:"language" json:"language" validate:"max=70,required" gorm:"type:TEXT;NOT NULL"` Functions *tools.Functions `form:"functions,omitempty" json:"functions,omitempty" validate:"omitempty,valid" gorm:"type:JSON;NOT NULL;default:'{}'"` ToolCallIDTemplate string `form:"tool_call_id_template" json:"tool_call_id_template" validate:"max=70,required" gorm:"type:TEXT;NOT NULL"` - TraceID *string `form:"trace_id" json:"trace_id" validate:"max=70,required" gorm:"type:TEXT;NOT NULL"` + TraceID *string `form:"trace_id" json:"trace_id" validate:"omitempty,max=70" gorm:"type:TEXT"` UserID uint64 `form:"user_id" json:"user_id" validate:"min=0,numeric,required" gorm:"type:BIGINT;NOT NULL"` CreatedAt time.Time `form:"created_at,omitempty" json:"created_at,omitempty" validate:"omitempty" gorm:"type:TIMESTAMPTZ;default:CURRENT_TIMESTAMP"` UpdatedAt time.Time `form:"updated_at,omitempty" json:"updated_at,omitempty" validate:"omitempty" gorm:"type:TIMESTAMPTZ;default:CURRENT_TIMESTAMP"` diff --git a/backend/pkg/server/models/flows_test.go b/backend/pkg/server/models/flows_test.go index ace56c2e..d823b2b2 100644 --- a/backend/pkg/server/models/flows_test.go +++ b/backend/pkg/server/models/flows_test.go @@ -374,6 +374,21 @@ func TestFlowValid(t *testing.T) { assert.NoError(t, validFlow.Valid()) }) + t.Run("valid flow while trace id is pending", func(t *testing.T) { + t.Parallel() + f := validFlow + f.TraceID = nil + assert.NoError(t, f.Valid()) + }) + + t.Run("trace id exceeds maximum length", func(t *testing.T) { + t.Parallel() + traceID := "trace-id-that-is-longer-than-the-supported-seventy-character-validation-limit-123" + f := validFlow + f.TraceID = &traceID + assert.Error(t, f.Valid()) + }) + t.Run("missing title", func(t *testing.T) { t.Parallel() f := validFlow diff --git a/backend/pkg/server/services/flows_test.go b/backend/pkg/server/services/flows_test.go new file mode 100644 index 00000000..4fd81c83 --- /dev/null +++ b/backend/pkg/server/services/flows_test.go @@ -0,0 +1,46 @@ +package services + +import ( + "encoding/json" + "net/http" + "testing" + + "pentagi/pkg/server/models" + + "github.com/stretchr/testify/require" +) + +func TestGetFlowsAllowsPendingTraceID(t *testing.T) { + db := setupFlowFileServiceTestDB(t) + require.NoError(t, db.Exec(` + INSERT INTO flows ( + id, user_id, model, model_provider_name, model_provider_type, + tool_call_id_template, trace_id + ) VALUES (1, 42, 'gpt', 'openai', 'openai', 'tcid', NULL) + `).Error) + + c, w := newFlowFileTestContext( + http.MethodGet, + "/flows/?page=1&pageSize=5&type=init", + nil, + []string{"flows.view"}, + 42, + 0, + ) + + NewFlowService(db, nil, nil, nil).GetFlows(c) + + require.Equal(t, http.StatusOK, w.Code) + var resp struct { + Status string `json:"status"` + Data struct { + Flows []models.Flow `json:"flows"` + Total uint64 `json:"total"` + } `json:"data"` + } + require.NoError(t, json.Unmarshal(w.Body.Bytes(), &resp)) + require.Equal(t, "success", resp.Status) + require.Equal(t, uint64(1), resp.Data.Total) + require.Len(t, resp.Data.Flows, 1) + require.Nil(t, resp.Data.Flows[0].TraceID) +}