实现修改猪营养需求

This commit is contained in:
2025-11-22 17:55:52 +08:00
parent 4405d1f3f1
commit 0637f5fb6c
9 changed files with 427 additions and 20 deletions

View File

@@ -2,6 +2,7 @@ package repository
import (
"context"
"fmt"
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
@@ -71,6 +72,10 @@ type PigTypeRepository interface {
DeletePigType(ctx context.Context, id uint32) error
// ListPigTypes 支持分页和过滤的猪类型记录列表查询。
ListPigTypes(ctx context.Context, opts PigTypeListOptions, page, pageSize int) ([]models.PigType, int64, error)
// DeletePigNutrientRequirementsByPigTypeIDTx 在事务中软删除指定猪类型的所有营养需求记录。
DeletePigNutrientRequirementsByPigTypeIDTx(ctx context.Context, db *gorm.DB, pigTypeID uint32) error
// CreateBatchPigNutrientRequirementsTx 在事务中批量创建猪营养需求记录。
CreateBatchPigNutrientRequirementsTx(ctx context.Context, db *gorm.DB, requirements []models.PigNutrientRequirement) error
}
// gormPigTypeRepository 是 PigTypeRepository 接口的 GORM 实现。
@@ -279,3 +284,27 @@ func (r *gormPigTypeRepository) ListPigTypes(ctx context.Context, opts PigTypeLi
return results, total, err
}
// DeletePigNutrientRequirementsByPigTypeIDTx 实现了在事务中软删除指定猪类型的所有营养需求记录的逻辑。
func (r *gormPigTypeRepository) DeletePigNutrientRequirementsByPigTypeIDTx(ctx context.Context, db *gorm.DB, pigTypeID uint32) error {
repoCtx := logs.AddFuncName(ctx, r.ctx, "DeletePigNutrientRequirementsByPigTypeIDTx")
tx := db.WithContext(repoCtx)
if err := tx.Where("pig_type_id = ?", pigTypeID).Delete(&models.PigNutrientRequirement{}).Error; err != nil {
return fmt.Errorf("软删除猪营养需求失败: %w", err)
}
return nil
}
// CreateBatchPigNutrientRequirementsTx 实现了在事务中批量创建猪营养需求记录的逻辑。
func (r *gormPigTypeRepository) CreateBatchPigNutrientRequirementsTx(ctx context.Context, db *gorm.DB, requirements []models.PigNutrientRequirement) error {
// 如果没有要创建的记录直接返回成功避免执行空的Create语句
if len(requirements) == 0 {
return nil
}
repoCtx := logs.AddFuncName(ctx, r.ctx, "CreateBatchPigNutrientRequirementsTx")
tx := db.WithContext(repoCtx)
if err := tx.Create(&requirements).Error; err != nil {
return fmt.Errorf("批量创建猪营养需求失败: %w", err)
}
return nil
}