From e28fe2680f462f013bf6fd48e22fe0b637c3c77b Mon Sep 17 00:00:00 2001 From: Yash Mehrotra Date: Wed, 25 Sep 2024 10:21:35 +0530 Subject: [PATCH] chore: modify recursion flow in topology/save --- topology/save.go | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/topology/save.go b/topology/save.go index 4b8bafb4..b37583d1 100644 --- a/topology/save.go +++ b/topology/save.go @@ -3,7 +3,6 @@ package topology import ( "strings" - "github.com/flanksource/commons/collections/set" "github.com/flanksource/duty/context" "github.com/flanksource/duty/db" "github.com/flanksource/duty/models" @@ -14,16 +13,15 @@ import ( // Save the component and its children returing the ids that were inserted/updated func SaveComponent(ctx context.Context, c *models.Component) ([]string, error) { - ids := set.New[string]() - returnedIDs, err := saveComponentsRecursively(ctx, c, ids) - if err != nil { + var ids []string + if err := saveComponentsRecursively(ctx, c, &ids); err != nil { return nil, err } - return returnedIDs.ToSlice(), nil + return ids, nil } // We keep a list of ids to track all the insert/updated ids -func saveComponentsRecursively(ctx context.Context, c *models.Component, ids set.Set[string]) (set.Set[string], error) { +func saveComponentsRecursively(ctx context.Context, c *models.Component, ids *[]string) error { if c.ParentId != nil && !strings.Contains(c.Path, c.ParentId.String()) { if c.Path == "" { c.Path = c.ParentId.String() @@ -35,13 +33,13 @@ func saveComponentsRecursively(ctx context.Context, c *models.Component, ids set if existing, err := query.ComponentFromCache(ctx, c.ID.String(), true); err == nil { // Update component if it exists if err := ctx.DB().UpdateColumns(c).Error; err != nil { - return nil, db.ErrorDetails(err) + return db.ErrorDetails(err) } // Unset deleted_at if it was non nil if existing.DeletedAt != nil && c.DeletedAt == nil { if err := ctx.DB().Update("deleted_at", nil).Error; err != nil { - return nil, db.ErrorDetails(err) + return db.ErrorDetails(err) } } } else { @@ -53,21 +51,23 @@ func saveComponentsRecursively(ctx context.Context, c *models.Component, ids set Columns: []clause.Column{{Name: "topology_id"}, {Name: "type"}, {Name: "name"}, {Name: "parent_id"}}, UpdateAll: true, }, clause.Returning{Columns: []clause.Column{{Name: "id"}}}).Create(c).Error; err != nil { - return nil, db.ErrorDetails(err) + return db.ErrorDetails(err) } } - ids.Add(c.ID.String()) + + if ids != nil { + *ids = append(*ids, c.ID.String()) + } if len(c.Components) > 0 { for _, child := range c.Components { child.TopologyID = c.TopologyID child.ParentId = &c.ID - returnedIDs, err := saveComponentsRecursively(ctx, child, ids) + err := saveComponentsRecursively(ctx, child, ids) if err != nil { - return nil, err + return err } - ids.Union(returnedIDs) } } - return ids, nil + return nil }