51 lines
2.3 KiB
Go
51 lines
2.3 KiB
Go
package pig
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
|
|
)
|
|
|
|
// --- 业务错误定义 ---
|
|
|
|
var (
|
|
// ErrPigBatchNotFound 表示当尝试访问一个不存在的猪批次时发生的错误。
|
|
ErrPigBatchNotFound = errors.New("指定的猪批次不存在")
|
|
// ErrPigBatchActive 表示当尝试对一个活跃的猪批次执行不允许的操作(如删除)时发生的错误。
|
|
ErrPigBatchActive = errors.New("活跃的猪批次不能被删除")
|
|
// ErrPigBatchNotActive 表示当猪批次不处于活跃状态,但执行了需要其活跃的操作时发生的错误。
|
|
ErrPigBatchNotActive = errors.New("猪批次不处于活跃状态,无法修改关联猪栏")
|
|
// ErrPenOccupiedByOtherBatch 表示当尝试将一个已经被其他批次占用的猪栏分配给新批次时发生的错误。
|
|
ErrPenOccupiedByOtherBatch = errors.New("猪栏已被其他批次使用")
|
|
// ErrPenStatusInvalidForAllocation 表示猪栏的当前状态(例如,'维修中')不允许被分配。
|
|
ErrPenStatusInvalidForAllocation = errors.New("猪栏状态不允许分配")
|
|
// ErrPenNotFound 表示猪栏不存在
|
|
ErrPenNotFound = errors.New("指定的猪栏不存在")
|
|
)
|
|
|
|
// --- 领域服务接口 ---
|
|
|
|
// PigBatchService 定义了猪批次管理的核心业务逻辑接口。
|
|
// 它抽象了所有与猪批次相关的操作,使得应用层可以依赖于此接口,而不是具体的实现。
|
|
type PigBatchService interface {
|
|
// CreatePigBatch 创建一个新的猪批次。
|
|
CreatePigBatch(batch *models.PigBatch) (*models.PigBatch, error)
|
|
|
|
// GetPigBatch 根据ID获取单个猪批次的详细信息。
|
|
GetPigBatch(id uint) (*models.PigBatch, error)
|
|
|
|
// UpdatePigBatch 更新一个已存在的猪批次信息。
|
|
UpdatePigBatch(batch *models.PigBatch) (*models.PigBatch, error)
|
|
|
|
// DeletePigBatch 删除一个指定的猪批次。
|
|
// 实现时需要包含业务规则校验,例如,活跃的批次不能被删除。
|
|
DeletePigBatch(id uint) error
|
|
|
|
// ListPigBatches 根据是否活跃的状态,列出所有符合条件的猪批次。
|
|
ListPigBatches(isActive *bool) ([]*models.PigBatch, error)
|
|
|
|
// UpdatePigBatchPens 负责原子性地更新一个猪批次所关联的所有猪栏。
|
|
// 它会处理猪栏的添加、移除,并确保数据的一致性。
|
|
UpdatePigBatchPens(batchID uint, desiredPenIDs []uint) error
|
|
}
|