package repository import ( "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" "gorm.io/gorm" ) // PenRepository 定义了与猪栏模型相关的数据库操作接口。 type PenRepository interface { GetPenByIDTx(tx *gorm.DB, penID uint) (*models.Pen, error) GetPensByBatchIDTx(tx *gorm.DB, batchID uint) ([]*models.Pen, error) UpdatePenFieldsTx(tx *gorm.DB, penID uint, updates map[string]interface{}) error } // penRepository 是 PenRepository 接口的 gorm 实现。 type penRepository struct { db *gorm.DB } // NewPenRepository 创建一个新的 PenRepository 实例。 func NewPenRepository(db *gorm.DB) PenRepository { return &penRepository{db: db} } // GetPenByIDTx 在指定的事务中,通过ID获取单个猪栏信息。 func (r *penRepository) GetPenByIDTx(tx *gorm.DB, penID uint) (*models.Pen, error) { var pen models.Pen if err := tx.First(&pen, penID).Error; err != nil { return nil, err } return &pen, nil } // GetPensByBatchIDTx 在指定的事务中,获取一个猪群当前关联的所有猪栏。 func (r *penRepository) GetPensByBatchIDTx(tx *gorm.DB, batchID uint) ([]*models.Pen, error) { var pens []*models.Pen if err := tx.Where("pig_batch_id = ?", batchID).Find(&pens).Error; err != nil { return nil, err } return pens, nil } // UpdatePenFieldsTx 在指定的事务中,更新一个猪栏的指定字段。 func (r *penRepository) UpdatePenFieldsTx(tx *gorm.DB, penID uint, updates map[string]interface{}) error { return tx.Model(&models.Pen{}).Where("id = ?", penID).Updates(updates).Error }