package model import ( "apsClient/pkg/mysqlx" "fmt" "gorm.io/gorm" ) type ( Cluster struct { ID int `json:"id" gorm:"primaryKey;type:bigint(20);comment:集群ID"` Name string `json:"name" gorm:"index;type:varchar(255);comment:集群名称"` Description string `json:"description" gorm:"index;type:varchar(255);comment:集群描述"` Devices []Node `json:"nodes" gorm:"hasMany:device"` } Node struct { Device Role []string `json:"role" gorm:"type:varchar(255);comment:节点角色"` } ClusterSearch struct { Cluster Order string PageNum int PageSize int Orm *gorm.DB } ) func (slf Cluster) TableName() string { return "cluster" } func NewClusterSearch(db *gorm.DB) *ClusterSearch { if db == nil { db = mysqlx.GetDB() } return &ClusterSearch{Orm: db} } func (slf *ClusterSearch) SetOrm(tx *gorm.DB) *ClusterSearch { slf.Orm = tx return slf } func (slf *ClusterSearch) SetId(id int) *ClusterSearch { slf.ID = id return slf } func (slf *ClusterSearch) SetName(name string) *ClusterSearch { slf.Name = name return slf } func (slf *ClusterSearch) build() *gorm.DB { var db = slf.Orm.Model(&Cluster{}).Preload("Device") if slf.ID > 0 { db = db.Where("id = ?", slf.ID) } if slf.Name != "" { db = db.Where("name = ?", slf.Name) } if slf.Description != "" { db = db.Where("description = ?", slf.Description) } return db } func (slf *ClusterSearch) Create(record *Cluster) error { var db = slf.build() if err := db.Create(record).Error; err != nil { return fmt.Errorf("create err: %v, record: %+v", err, record) } return nil } func (slf *ClusterSearch) First() (*Cluster, error) { var ( record = new(Cluster) db = slf.build() ) if err := db.First(record).Error; err != nil { return record, err } return record, nil }