移动业务逻辑
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
@@ -11,8 +9,10 @@ import (
|
||||
type PigBatchRepository interface {
|
||||
CreatePigBatch(batch *models.PigBatch) (*models.PigBatch, error)
|
||||
GetPigBatchByID(id uint) (*models.PigBatch, error)
|
||||
UpdatePigBatch(batch *models.PigBatch) (*models.PigBatch, error)
|
||||
DeletePigBatch(id uint) error
|
||||
// UpdatePigBatch 更新一个猪批次,返回更新后的批次、受影响的行数和错误
|
||||
UpdatePigBatch(batch *models.PigBatch) (*models.PigBatch, int64, error)
|
||||
// DeletePigBatch 根据ID删除一个猪批次,返回受影响的行数和错误
|
||||
DeletePigBatch(id uint) (int64, error)
|
||||
ListPigBatches(isActive *bool) ([]*models.PigBatch, error)
|
||||
}
|
||||
|
||||
@@ -44,27 +44,23 @@ func (r *gormPigBatchRepository) GetPigBatchByID(id uint) (*models.PigBatch, err
|
||||
}
|
||||
|
||||
// UpdatePigBatch 更新一个猪批次
|
||||
func (r *gormPigBatchRepository) UpdatePigBatch(batch *models.PigBatch) (*models.PigBatch, error) {
|
||||
func (r *gormPigBatchRepository) UpdatePigBatch(batch *models.PigBatch) (*models.PigBatch, int64, error) {
|
||||
result := r.db.Model(&models.PigBatch{}).Where("id = ?", batch.ID).Updates(batch)
|
||||
if result.Error != nil {
|
||||
return nil, result.Error
|
||||
return nil, 0, result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return nil, errors.New("未找到要更新的猪批次或数据未改变") // 明确返回错误,而不是 gorm.ErrRecordNotFound
|
||||
}
|
||||
return batch, nil
|
||||
// 返回更新后的批次、受影响的行数和错误
|
||||
return batch, result.RowsAffected, nil
|
||||
}
|
||||
|
||||
// DeletePigBatch 根据ID删除一个猪批次 (GORM 会执行软删除)
|
||||
func (r *gormPigBatchRepository) DeletePigBatch(id uint) error {
|
||||
func (r *gormPigBatchRepository) DeletePigBatch(id uint) (int64, error) {
|
||||
result := r.db.Delete(&models.PigBatch{}, id)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
return 0, result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return errors.New("未找到要删除的猪批次") // 明确返回错误
|
||||
}
|
||||
return nil
|
||||
// 返回受影响的行数和错误
|
||||
return result.RowsAffected, nil
|
||||
}
|
||||
|
||||
// ListPigBatches 批量查询猪批次,支持根据 IsActive 筛选
|
||||
|
||||
@@ -11,8 +11,10 @@ type PigFarmRepository interface {
|
||||
CreatePigHouse(house *models.PigHouse) error
|
||||
GetPigHouseByID(id uint) (*models.PigHouse, error)
|
||||
ListPigHouses() ([]models.PigHouse, error)
|
||||
UpdatePigHouse(house *models.PigHouse) error
|
||||
DeletePigHouse(id uint) error
|
||||
// UpdatePigHouse 更新一个猪舍,返回受影响的行数和错误
|
||||
UpdatePigHouse(house *models.PigHouse) (int64, error)
|
||||
// DeletePigHouse 根据ID删除一个猪舍,返回受影响的行数和错误
|
||||
DeletePigHouse(id uint) (int64, error)
|
||||
CountPensInHouse(houseID uint) (int64, error)
|
||||
|
||||
// Pen methods
|
||||
@@ -22,8 +24,10 @@ type PigFarmRepository interface {
|
||||
// GetPenByIDTx 根据ID获取单个猪栏 (事务性)
|
||||
GetPenByIDTx(tx *gorm.DB, id uint) (*models.Pen, error)
|
||||
ListPens() ([]models.Pen, error)
|
||||
UpdatePen(pen *models.Pen) error
|
||||
DeletePen(id uint) error
|
||||
// UpdatePen 更新一个猪栏,返回受影响的行数和错误
|
||||
UpdatePen(pen *models.Pen) (int64, error)
|
||||
// DeletePen 根据ID删除一个猪栏,返回受影响的行数和错误
|
||||
DeletePen(id uint) (int64, error)
|
||||
// GetPensByBatchID 根据批次ID获取所有关联的猪栏 (事务性)
|
||||
GetPensByBatchID(tx *gorm.DB, batchID uint) ([]models.Pen, error)
|
||||
// UpdatePenFields 更新猪栏的指定字段 (事务性)
|
||||
@@ -71,28 +75,22 @@ func (r *gormPigFarmRepository) ListPigHouses() ([]models.PigHouse, error) {
|
||||
return houses, nil
|
||||
}
|
||||
|
||||
// UpdatePigHouse 更新一个猪舍
|
||||
func (r *gormPigFarmRepository) UpdatePigHouse(house *models.PigHouse) error {
|
||||
// UpdatePigHouse 更新一个猪舍,返回受影响的行数和错误
|
||||
func (r *gormPigFarmRepository) UpdatePigHouse(house *models.PigHouse) (int64, error) {
|
||||
result := r.db.Model(&models.PigHouse{}).Where("id = ?", house.ID).Updates(house)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
return 0, result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return gorm.ErrRecordNotFound // 未找到要更新的猪舍或数据未改变
|
||||
}
|
||||
return nil
|
||||
return result.RowsAffected, nil
|
||||
}
|
||||
|
||||
// DeletePigHouse 根据ID删除一个猪舍
|
||||
func (r *gormPigFarmRepository) DeletePigHouse(id uint) error {
|
||||
// DeletePigHouse 根据ID删除一个猪舍,返回受影响的行数和错误
|
||||
func (r *gormPigFarmRepository) DeletePigHouse(id uint) (int64, error) {
|
||||
result := r.db.Delete(&models.PigHouse{}, id)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
return 0, result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return gorm.ErrRecordNotFound // 未找到要删除的猪舍
|
||||
}
|
||||
return nil
|
||||
return result.RowsAffected, nil
|
||||
}
|
||||
|
||||
// CountPensInHouse 统计猪舍中的猪栏数量
|
||||
@@ -136,28 +134,22 @@ func (r *gormPigFarmRepository) ListPens() ([]models.Pen, error) {
|
||||
return pens, nil
|
||||
}
|
||||
|
||||
// UpdatePen 更新一个猪栏
|
||||
func (r *gormPigFarmRepository) UpdatePen(pen *models.Pen) error {
|
||||
// UpdatePen 更新一个猪栏,返回受影响的行数和错误
|
||||
func (r *gormPigFarmRepository) UpdatePen(pen *models.Pen) (int64, error) {
|
||||
result := r.db.Model(&models.Pen{}).Where("id = ?", pen.ID).Updates(pen)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
return 0, result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return gorm.ErrRecordNotFound // 未找到要更新的猪栏或数据未改变
|
||||
}
|
||||
return nil
|
||||
return result.RowsAffected, nil
|
||||
}
|
||||
|
||||
// DeletePen 根据ID删除一个猪栏
|
||||
func (r *gormPigFarmRepository) DeletePen(id uint) error {
|
||||
// DeletePen 根据ID删除一个猪栏,返回受影响的行数和错误
|
||||
func (r *gormPigFarmRepository) DeletePen(id uint) (int64, error) {
|
||||
result := r.db.Delete(&models.Pen{}, id)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
return 0, result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return gorm.ErrRecordNotFound // 未找到要删除的猪栏
|
||||
}
|
||||
return nil
|
||||
return result.RowsAffected, nil
|
||||
}
|
||||
|
||||
// GetPensByBatchID 根据批次ID获取所有关联的猪栏 (事务性)
|
||||
|
||||
Reference in New Issue
Block a user