增加删除检查

This commit is contained in:
2025-10-03 22:23:31 +08:00
parent c50366f670
commit 645c92978b

View File

@@ -8,8 +8,9 @@ import (
) )
var ( var (
ErrHouseContainsPens = errors.New("cannot delete a pig house that still contains pens") ErrHouseContainsPens = errors.New("请在移除所有猪圈后移除当前猪舍")
ErrHouseNotFound = errors.New("the specified pig house does not exist") ErrHouseNotFound = errors.New("猪舍不存在")
ErrPenInUse = errors.New("猪栏正在被活跃批次使用,无法删除")
) )
// PigFarmRepository 定义了与猪场资产(猪舍、猪栏)相关的数据库操作接口 // PigFarmRepository 定义了与猪场资产(猪舍、猪栏)相关的数据库操作接口
@@ -146,12 +147,34 @@ func (r *gormPigFarmRepository) UpdatePen(pen *models.Pen) error {
} }
func (r *gormPigFarmRepository) DeletePen(id uint) error { func (r *gormPigFarmRepository) DeletePen(id uint) error {
result := r.db.Delete(&models.Pen{}, id) return r.db.Transaction(func(tx *gorm.DB) error {
if result.Error != nil { var pen models.Pen
return result.Error if err := tx.First(&pen, id).Error; err != nil {
} if errors.Is(err, gorm.ErrRecordNotFound) {
if result.RowsAffected == 0 { return gorm.ErrRecordNotFound
return gorm.ErrRecordNotFound }
} return err
return nil }
// 检查猪栏是否被活跃批次使用
if pen.PigBatchID != 0 {
var pigBatch models.PigBatch
err := tx.First(&pigBatch, pen.PigBatchID).Error
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
return err
}
if pigBatch.IsActive() {
return ErrPenInUse
}
}
result := tx.Delete(&models.Pen{}, id)
if result.Error != nil {
return result.Error
}
if result.RowsAffected == 0 {
return gorm.ErrRecordNotFound
}
return nil
})
} }