package dao import ( "opencatd-open/internal/store" "gorm.io/gorm" ) type ModelDAO struct { db *gorm.DB } func NewModelDAO(db *gorm.DB) *ModelDAO { return &ModelDAO{db: db} } func (d *ModelDAO) Create(model *store.Model) error { return d.db.Create(model).Error } func (d *ModelDAO) GetByID(id uint64) (*store.Model, error) { var model store.Model err := d.db.First(&model, id).Error if err != nil { return nil, err } return &model, nil } func (d *ModelDAO) GetByName(name string) (*store.Model, error) { var model store.Model err := d.db.Where("name = ?", name).First(&model).Error if err != nil { return nil, err } return &model, nil } func (d *ModelDAO) List(limit, offset int) ([]*store.Model, int64, error) { var models []*store.Model var total int64 d.db.Model(&store.Model{}).Count(&total) err := d.db.Limit(limit).Offset(offset).Order("sort ASC, name ASC").Find(&models).Error return models, total, err } func (d *ModelDAO) ListEnabled() ([]*store.Model, error) { var models []*store.Model err := d.db.Where("enabled = ?", true).Order("sort ASC, name ASC").Find(&models).Error return models, err } func (d *ModelDAO) Update(model *store.Model) error { return d.db.Save(model).Error } func (d *ModelDAO) Delete(id uint64) error { return d.db.Delete(&store.Model{}, id).Error } // Upsert creates or updates a model by name func (d *ModelDAO) Upsert(model *store.Model) error { return d.db.Where("name = ?", model.Name).Assign(store.Model{ DisplayName: model.DisplayName, InputPrice: model.InputPrice, OutputPrice: model.OutputPrice, CacheReadPrice: model.CacheReadPrice, Enabled: model.Enabled, Sort: model.Sort, }).FirstOrCreate(model).Error }