Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added entity for sub category model #656

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
1 change: 1 addition & 0 deletions models/meshmodel/entity/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const (
RelationshipDefinition EntityType = "relationship"
Model EntityType = "model"
Category EntityType = "category"
SubCategory EntityType = "sub_category"
)

// Each entity will have it's own Filter implementation via which it exposes the nobs and dials to fetch entities
Expand Down
90 changes: 90 additions & 0 deletions models/meshmodel/registry/v1beta1/sub_category_filter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package v1beta1

import (
"gorm.io/gorm/clause"
"github.com/layer5io/meshkit/database"
"github.com/layer5io/meshkit/models/meshmodel/entity"
"github.com/layer5io/meshkit/models/meshmodel/registry"
"github.com/meshery/schemas/models/v1beta1/subCategory"
)

type SubCategoryFilter struct {
Id string
Name string
OrderOn string
Greedy bool
Sort string //asc or desc. Default behavior is asc
Limit int //If 0 or unspecified then all records are returned and limit is not used
Offset int
}

// Create the filter from map[string]interface{}
func (cf *SubCategoryFilter) Create(m map[string]interface{}) {
if m == nil {
return
}
cf.Name = m["name"].(string)
}

func (cf *SubCategoryFilter) GetById(db *database.Handler) (entity.Entity, error) {
c := &subCategory.SubCategoryDefinition{}
err := db.First(c, "id = ?", cf.Id).Error
if err != nil {
return nil, registry.ErrGetById(err, cf.Id)
}
return c, err
}

func (cf *SubCategoryFilter) Get(db *database.Handler) ([]entity.Entity, int64, int, error) {
var scatdb []subCategory.SubCategoryDefinition
var scat []entity.Entity
finder := db.Model(&scatdb).Debug()

// total count before pagination
var count int64

if cf.Name != "" {
if cf.Greedy {
finder = finder.Where("name LIKE ?", "%"+cf.Name+"%")
} else {
finder = finder.Where("name = ?", cf.Name)
}
}
if cf.Id != "" {
finder = finder.Where("id = ?", cf.Id)
}
if cf.OrderOn != "" {
if cf.Sort == "desc" {
finder = finder.Order(clause.OrderByColumn{Column: clause.Column{Name: cf.OrderOn}, Desc: true})
} else {
finder = finder.Order(cf.OrderOn)
}
}

finder.Count(&count)

if cf.Limit != 0 {
finder = finder.Limit(cf.Limit)
}
if cf.Offset != 0 {
finder = finder.Offset(cf.Offset)
}

if count == 0 {
finder.Count(&count)
}

err := finder.Find(&scatdb).Error
if err != nil {
return scat, count, int(count), nil
}

for _, c := range scatdb {
// resolve for loop scope
_c := c

scat = append(scat, &_c)
}
// duplicate sub_category ?
return scat, count, int(count), nil
}