package dao import ( "errors" "twin-api/app/common/model" "twin-api/base/global" "gorm.io/gorm" ) type Pkg struct { db *gorm.DB } func NewPackage() *Pkg { return &Pkg{ db: global.GetDB(), } } func (p *Pkg) TableName() string { return "tw_package" } func (p *Pkg) Create(m *model.Pkg) error { return p.db.Table(p.TableName()).Create(m).Error } func (p *Pkg) Update(m *model.Pkg) error { return p.db.Table(p.TableName()).Save(m).Error } func (p *Pkg) Delete(m *model.Pkg) error { return p.db.Table(p.TableName()).Where("id = ?", m.Id).Update("status", model.PkgDelete).Error } func (p *Pkg) Get(id int64) (*model.Pkg, error) { var res model.Pkg if err := p.db.Table(p.TableName()).Where("id = ?", id).First(&res).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil } return nil, err } return &res, nil } func (p *Pkg) GetByPkgName(name string) (*model.Pkg, error) { var res model.Pkg tx := p.db.Table(p.TableName()) if name != "" { tx = tx.Where("name = ?", name) } tx.Order("id desc") if err := tx.First(&res).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil } return nil, err } return &res, nil } func (p *Pkg) Query(pkgName, version string, status, page, size int, sort string) ([]*model.Pkg, int64, error) { var res []*model.Pkg var count int64 tx := p.db.Table(p.TableName()) if pkgName != "" { tx = tx.Where("name = ?", pkgName) } if version != "" { tx = tx.Where("version = ?", version) } if status != 0 { tx = tx.Where("status = ?", status) } if err := tx.Count(&count).Error; err != nil { return nil, 0, err } if err := tx.Limit(size).Offset((page - 1) * size).Find(&res).Error; err != nil { return nil, 0, err } return res, count, nil }