diff --git a/drip/api.gen.go b/drip/api.gen.go index a6af079..a059d45 100644 --- a/drip/api.gen.go +++ b/drip/api.gen.go @@ -2428,6 +2428,15 @@ func (response CreateComfyNodes404JSONResponse) VisitCreateComfyNodesResponse(w return json.NewEncoder(w).Encode(response) } +type CreateComfyNodes409JSONResponse ErrorResponse + +func (response CreateComfyNodes409JSONResponse) VisitCreateComfyNodesResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(409) + + return json.NewEncoder(w).Encode(response) +} + type CreateComfyNodes500JSONResponse ErrorResponse func (response CreateComfyNodes500JSONResponse) VisitCreateComfyNodesResponse(w http.ResponseWriter) error { @@ -4865,109 +4874,110 @@ func (sh *strictHandler) GetWorkflowResult(ctx echo.Context, workflowResultId st // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", + "wQAA", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/integration-tests/registry_integration_test.go b/integration-tests/registry_integration_test.go index 9cb0172..caffa77 100644 --- a/integration-tests/registry_integration_test.go +++ b/integration-tests/registry_integration_test.go @@ -976,6 +976,17 @@ func TestRegistryComfyNode(t *testing.T) { } }) + t.Run("Conflict", func(t *testing.T) { + body := drip.CreateComfyNodesJSONRequestBody(comfyNodes) + res, err := withMiddleware(authz, impl.CreateComfyNodes)(ctx, drip.CreateComfyNodesRequestObject{ + NodeId: *node.Id, + Version: *nodeVersion.Version, + Body: &body, + }) + require.NoError(t, err) + require.IsType(t, drip.CreateComfyNodes409JSONResponse{}, res) + }) + t.Run("GetNodeVersion", func(t *testing.T) { res, err := withMiddleware(authz, impl.GetNodeVersion)(ctx, drip.GetNodeVersionRequestObject{ NodeId: *node.Id, diff --git a/openapi.yml b/openapi.yml index 36bbc3f..df240cd 100644 --- a/openapi.yml +++ b/openapi.yml @@ -1803,6 +1803,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ErrorResponse' + '409': + description: Existing Comfy Nodes exists + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: diff --git a/server/implementation/registry.go b/server/implementation/registry.go index 3ffc37b..78b83b6 100644 --- a/server/implementation/registry.go +++ b/server/implementation/registry.go @@ -2,6 +2,7 @@ package implementation import ( "context" + "errors" "registry-backend/drip" "registry-backend/ent" "registry-backend/ent/publisher" @@ -1023,6 +1024,10 @@ func (impl *DripStrictServerImplementation) CreateComfyNodes(ctx context.Context log.Ctx(ctx).Error().Msgf("Node or node version not found w/ err: %v", err) return drip.CreateComfyNodes404JSONResponse{Message: "Node or node version not found", Error: err.Error()}, nil } + if errors.Is(err, drip_services.ErrComfyNodesAlreadyExist) { + log.Ctx(ctx).Error().Msgf("Comfy nodes for %s %s exist", request.NodeId, request.Version) + return drip.CreateComfyNodes409JSONResponse{Message: "Comfy nodes already exist", Error: err.Error()}, nil + } if err != nil { log.Ctx(ctx).Error().Msgf("Failed to create comfy nodes w/ err: %v", err) return drip.CreateComfyNodes500JSONResponse{Message: "Failed to create comfy nodes", Error: err.Error()}, nil diff --git a/services/registry/registry_svc.go b/services/registry/registry_svc.go index d0bd607..479d199 100644 --- a/services/registry/registry_svc.go +++ b/services/registry/registry_svc.go @@ -626,52 +626,64 @@ func (s *RegistryService) GetLatestNodeVersion(ctx context.Context, client *ent. return nodeVersion, nil } -func (s *RegistryService) CreateComfyNodes(ctx context.Context, client *ent.Client, nodeID string, nodeVersion string, comfyNodes map[string]drip.ComfyNode) (err error) { - nv, err := client.NodeVersion.Query(). - Where(nodeversion.VersionEQ(nodeVersion)). - Where(nodeversion.NodeIDEQ(nodeID)).Only(ctx) - if err != nil { - return err - } - - comfyNodesCreates := make([]*ent.ComfyNodeCreate, 0, len(comfyNodes)) - for k, n := range comfyNodes { - comfyNodeCreate := client.ComfyNode.Create(). - SetID(k). - SetNodeVersionID(nv.ID) +var ErrComfyNodesAlreadyExist = errors.New("comfy nodes already exist") - if n.Category != nil { - comfyNodeCreate.SetCategory(*n.Category) - } - if n.Description != nil { - comfyNodeCreate.SetDescription(*n.Description) - } - if n.InputTypes != nil { - comfyNodeCreate.SetInputTypes(*n.InputTypes) - } - if n.Deprecated != nil { - comfyNodeCreate.SetDeprecated(*n.Deprecated) - } - if n.Experimental != nil { - comfyNodeCreate.SetExperimental(*n.Experimental) - } - if n.OutputIsList != nil { - comfyNodeCreate.SetOutputIsList(*n.OutputIsList) - } - if n.ReturnNames != nil { - comfyNodeCreate.SetReturnNames(*n.ReturnNames) +func (s *RegistryService) CreateComfyNodes(ctx context.Context, client *ent.Client, nodeID string, nodeVersion string, comfyNodes map[string]drip.ComfyNode) (err error) { + return db.WithTx(ctx, client, func(tx *ent.Tx) error { + nv, err := client.NodeVersion.Query(). + Where(nodeversion.VersionEQ(nodeVersion)). + Where(nodeversion.NodeIDEQ(nodeID)). + WithComfyNodes(). + ForUpdate(). + Only(ctx) + if err != nil { + return err } - if n.ReturnTypes != nil { - comfyNodeCreate.SetReturnTypes(*n.ReturnTypes) + + if len(nv.Edges.ComfyNodes) > 0 { + return ErrComfyNodesAlreadyExist } - if n.Function != nil { - comfyNodeCreate.SetFunction(*n.Function) + + comfyNodesCreates := make([]*ent.ComfyNodeCreate, 0, len(comfyNodes)) + for k, n := range comfyNodes { + comfyNodeCreate := client.ComfyNode.Create(). + SetID(k). + SetNodeVersionID(nv.ID) + + if n.Category != nil { + comfyNodeCreate.SetCategory(*n.Category) + } + if n.Description != nil { + comfyNodeCreate.SetDescription(*n.Description) + } + if n.InputTypes != nil { + comfyNodeCreate.SetInputTypes(*n.InputTypes) + } + if n.Deprecated != nil { + comfyNodeCreate.SetDeprecated(*n.Deprecated) + } + if n.Experimental != nil { + comfyNodeCreate.SetExperimental(*n.Experimental) + } + if n.OutputIsList != nil { + comfyNodeCreate.SetOutputIsList(*n.OutputIsList) + } + if n.ReturnNames != nil { + comfyNodeCreate.SetReturnNames(*n.ReturnNames) + } + if n.ReturnTypes != nil { + comfyNodeCreate.SetReturnTypes(*n.ReturnTypes) + } + if n.Function != nil { + comfyNodeCreate.SetFunction(*n.Function) + } + comfyNodesCreates = append(comfyNodesCreates, comfyNodeCreate) } - comfyNodesCreates = append(comfyNodesCreates, comfyNodeCreate) - } - return client.ComfyNode. - CreateBulk(comfyNodesCreates...). - Exec(ctx) + return client.ComfyNode. + CreateBulk(comfyNodesCreates...). + Exec(ctx) + }) + } func (s *RegistryService) GetComfyNode(ctx context.Context, client *ent.Client, nodeID string, nodeVersion string, comfyNodeID string) (*ent.ComfyNode, error) {