diff --git a/app/resources.cue b/app/resources.cue index 449aba012..ff71a12c4 100644 --- a/app/resources.cue +++ b/app/resources.cue @@ -74,6 +74,17 @@ resources: { value: {} } + filter: { + expIdent: "LabelFilter" + struct: { + kind: {} + rel_resource: { goType: "[]uint64", ident: "resourceID" } + limit: { goType: "uint" } + } + + byValue: ["kind" , "rel_resource", ] + } + store: { api: { lookups: [ diff --git a/pkg/label/label.go b/pkg/label/label.go index e27c60a1e..007c175f4 100644 --- a/pkg/label/label.go +++ b/pkg/label/label.go @@ -158,9 +158,6 @@ func Create(ctx context.Context, s store.Labels, r LabeledResource) error { // Update updates or creates all labels on labeled resource and removes all non explicitly defined func Update(ctx context.Context, s store.Labels, r LabeledResource) error { - // @tmp - return nil - var ( err error labels = r.GetLabels() diff --git a/store/adapters/rdbms/filter.go b/store/adapters/rdbms/filter.go index ed6471822..c0ebb299e 100644 --- a/store/adapters/rdbms/filter.go +++ b/store/adapters/rdbms/filter.go @@ -11,6 +11,7 @@ import ( "github.com/cortezaproject/corteza-server/pkg/actionlog" discoveryType "github.com/cortezaproject/corteza-server/pkg/discovery/types" "github.com/cortezaproject/corteza-server/pkg/filter" + labelsType "github.com/cortezaproject/corteza-server/pkg/label/types" systemType "github.com/cortezaproject/corteza-server/system/types" "github.com/doug-martin/goqu/v9" "github.com/doug-martin/goqu/v9/exp" @@ -131,6 +132,24 @@ func DefaultFilters() (f *extendedFilters) { return ee, f, nil } + f.Label = func(store *Store, f labelsType.LabelFilter) (ee []goqu.Expression, _ labelsType.LabelFilter, err error) { + if ee, f, err = LabelFilter(f); err != nil { + return + } + + if len(f.Filter) > 0 { + values := make([]goqu.Expression, 0, len(f.Filter)) + + for k, v := range f.Filter { + values = append(values, exp.Ex{"name": k, "value": v}) + } + + ee = append(ee, goqu.Or(values...)) + } + + return ee, f, nil + } + f.Reminder = func(s *Store, f systemType.ReminderFilter) (ee []goqu.Expression, _ systemType.ReminderFilter, err error) { if ee, f, err = ReminderFilter(f); err != nil { return diff --git a/store/adapters/rdbms/filters.gen.go b/store/adapters/rdbms/filters.gen.go index a662f79bf..ae0e78f1b 100644 --- a/store/adapters/rdbms/filters.gen.go +++ b/store/adapters/rdbms/filters.gen.go @@ -931,6 +931,14 @@ func FlagFilter(f flagType.FlagFilter) (ee []goqu.Expression, _ flagType.FlagFil // This function is auto-generated func LabelFilter(f labelsType.LabelFilter) (ee []goqu.Expression, _ labelsType.LabelFilter, err error) { + if val := strings.TrimSpace(f.Kind); len(val) > 0 { + ee = append(ee, goqu.C("kind").Eq(f.Kind)) + } + + if len(f.ResourceID) > 0 { + ee = append(ee, goqu.C("rel_resource").In(f.ResourceID)) + } + return ee, f, err }