From 276c0612d8da6a11e29a12d2193844f73e5dd3a7 Mon Sep 17 00:00:00 2001 From: wangbo Date: Tue, 21 Jul 2026 23:51:09 +0800 Subject: [PATCH] =?UTF-8?q?refactor(task):=20=E5=A4=8D=E7=94=A8=E7=BD=91?= =?UTF-8?q?=E5=85=B3=E4=BB=BB=E5=8A=A1=E5=88=9B=E5=BB=BA=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/httpapi/gateway_task_creation.go | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 apps/api/internal/httpapi/gateway_task_creation.go diff --git a/apps/api/internal/httpapi/gateway_task_creation.go b/apps/api/internal/httpapi/gateway_task_creation.go new file mode 100644 index 0000000..76b3c7e --- /dev/null +++ b/apps/api/internal/httpapi/gateway_task_creation.go @@ -0,0 +1,68 @@ +package httpapi + +import ( + "context" + "fmt" + "net/http" + + "github.com/easyai/easyai-ai-gateway/apps/api/internal/auth" + "github.com/easyai/easyai-ai-gateway/apps/api/internal/store" +) + +type gatewayTaskCreationStage string + +const ( + gatewayTaskCreationPrepare gatewayTaskCreationStage = "prepare" + gatewayTaskCreationStore gatewayTaskCreationStage = "store" +) + +type gatewayTaskCreationError struct { + Stage gatewayTaskCreationStage + Err error +} + +func (e *gatewayTaskCreationError) Error() string { + if e == nil || e.Err == nil { + return "gateway task creation failed" + } + return e.Err.Error() +} + +func (e *gatewayTaskCreationError) Unwrap() error { + if e == nil { + return nil + } + return e.Err +} + +func (s *Server) prepareAndCreateGatewayTask( + ctx context.Context, + r *http.Request, + user *auth.User, + kind string, + model string, + body map[string]any, + async bool, +) (store.GatewayTask, error) { + prepared, err := s.prepareTaskRequest(ctx, r, user, body) + if err != nil { + return store.GatewayTask{}, &gatewayTaskCreationError{Stage: gatewayTaskCreationPrepare, Err: err} + } + task, err := s.store.CreateTask(ctx, store.CreateTaskInput{ + Kind: kind, + Model: model, + RunMode: runModeFromRequest(prepared.Body), + Async: async, + Request: prepared.Body, + ConversationID: prepared.ConversationID, + NewMessageCount: prepared.NewMessageCount, + MessageRefs: prepared.MessageRefs, + }, user) + if err != nil { + return store.GatewayTask{}, &gatewayTaskCreationError{ + Stage: gatewayTaskCreationStore, + Err: fmt.Errorf("create task: %w", err), + } + } + return task, nil +}