重构配方类服务层
This commit is contained in:
130
internal/app/service/pig_breed_service.go
Normal file
130
internal/app/service/pig_breed_service.go
Normal file
@@ -0,0 +1,130 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/app/dto"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/domain/recipe"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository"
|
||||
)
|
||||
|
||||
// 定义猪品种服务特定的错误
|
||||
var (
|
||||
ErrPigBreedInUse = errors.New("猪品种正在被猪类型使用,无法删除")
|
||||
ErrPigBreedNotFound = errors.New("猪品种不存在")
|
||||
)
|
||||
|
||||
// PigBreedService 定义了猪品种相关的应用服务接口
|
||||
type PigBreedService interface {
|
||||
CreatePigBreed(ctx context.Context, req *dto.CreatePigBreedRequest) (*dto.PigBreedResponse, error)
|
||||
UpdatePigBreed(ctx context.Context, id uint32, req *dto.UpdatePigBreedRequest) (*dto.PigBreedResponse, error)
|
||||
DeletePigBreed(ctx context.Context, id uint32) error
|
||||
GetPigBreed(ctx context.Context, id uint32) (*dto.PigBreedResponse, error)
|
||||
ListPigBreeds(ctx context.Context, req *dto.ListPigBreedRequest) (*dto.ListPigBreedResponse, error)
|
||||
}
|
||||
|
||||
// pigBreedServiceImpl 是 PigBreedService 接口的实现
|
||||
type pigBreedServiceImpl struct {
|
||||
ctx context.Context
|
||||
recipeSvc recipe.Service
|
||||
}
|
||||
|
||||
// NewPigBreedService 创建一个新的 PigBreedService 实例
|
||||
func NewPigBreedService(ctx context.Context, recipeSvc recipe.Service) PigBreedService {
|
||||
return &pigBreedServiceImpl{
|
||||
ctx: ctx,
|
||||
recipeSvc: recipeSvc,
|
||||
}
|
||||
}
|
||||
|
||||
// CreatePigBreed 创建猪品种
|
||||
func (s *pigBreedServiceImpl) CreatePigBreed(ctx context.Context, req *dto.CreatePigBreedRequest) (*dto.PigBreedResponse, error) {
|
||||
serviceCtx := logs.AddFuncName(ctx, s.ctx, "CreatePigBreed")
|
||||
|
||||
breed := &models.PigBreed{
|
||||
Name: req.Name,
|
||||
Description: req.Description,
|
||||
ParentInfo: req.ParentInfo,
|
||||
AppearanceFeatures: req.AppearanceFeatures,
|
||||
BreedAdvantages: req.BreedAdvantages,
|
||||
BreedDisadvantages: req.BreedDisadvantages,
|
||||
}
|
||||
|
||||
if err := s.recipeSvc.CreatePigBreed(serviceCtx, breed); err != nil {
|
||||
return nil, fmt.Errorf("创建猪品种失败: %w", err)
|
||||
}
|
||||
return dto.ConvertPigBreedToDTO(breed), nil
|
||||
}
|
||||
|
||||
// UpdatePigBreed 更新猪品种
|
||||
func (s *pigBreedServiceImpl) UpdatePigBreed(ctx context.Context, id uint32, req *dto.UpdatePigBreedRequest) (*dto.PigBreedResponse, error) {
|
||||
serviceCtx := logs.AddFuncName(ctx, s.ctx, "UpdatePigBreed")
|
||||
|
||||
breed := &models.PigBreed{
|
||||
Model: models.Model{ID: id},
|
||||
Name: req.Name,
|
||||
Description: req.Description,
|
||||
ParentInfo: req.ParentInfo,
|
||||
AppearanceFeatures: req.AppearanceFeatures,
|
||||
BreedAdvantages: req.BreedAdvantages,
|
||||
BreedDisadvantages: req.BreedDisadvantages,
|
||||
}
|
||||
|
||||
if err := s.recipeSvc.UpdatePigBreed(serviceCtx, breed); err != nil {
|
||||
if errors.Is(err, recipe.ErrPigBreedNotFound) {
|
||||
return nil, ErrPigBreedNotFound
|
||||
}
|
||||
return nil, fmt.Errorf("更新猪品种失败: %w", err)
|
||||
}
|
||||
return dto.ConvertPigBreedToDTO(breed), nil
|
||||
}
|
||||
|
||||
// DeletePigBreed 删除猪品种
|
||||
func (s *pigBreedServiceImpl) DeletePigBreed(ctx context.Context, id uint32) error {
|
||||
serviceCtx := logs.AddFuncName(ctx, s.ctx, "DeletePigBreed")
|
||||
err := s.recipeSvc.DeletePigBreed(serviceCtx, id)
|
||||
if err != nil {
|
||||
if errors.Is(err, recipe.ErrPigBreedNotFound) {
|
||||
return ErrPigBreedNotFound
|
||||
}
|
||||
if errors.Is(err, recipe.ErrPigBreedInUse) {
|
||||
return ErrPigBreedInUse
|
||||
}
|
||||
return fmt.Errorf("删除猪品种失败: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetPigBreed 获取单个猪品种
|
||||
func (s *pigBreedServiceImpl) GetPigBreed(ctx context.Context, id uint32) (*dto.PigBreedResponse, error) {
|
||||
serviceCtx := logs.AddFuncName(ctx, s.ctx, "GetPigBreed")
|
||||
|
||||
breed, err := s.recipeSvc.GetPigBreedByID(serviceCtx, id)
|
||||
if err != nil {
|
||||
if errors.Is(err, recipe.ErrPigBreedNotFound) {
|
||||
return nil, ErrPigBreedNotFound
|
||||
}
|
||||
return nil, fmt.Errorf("获取猪品种失败: %w", err)
|
||||
}
|
||||
return dto.ConvertPigBreedToDTO(breed), nil
|
||||
}
|
||||
|
||||
// ListPigBreeds 列出猪品种
|
||||
func (s *pigBreedServiceImpl) ListPigBreeds(ctx context.Context, req *dto.ListPigBreedRequest) (*dto.ListPigBreedResponse, error) {
|
||||
serviceCtx := logs.AddFuncName(ctx, s.ctx, "ListPigBreeds")
|
||||
|
||||
opts := repository.PigBreedListOptions{
|
||||
Name: req.Name,
|
||||
OrderBy: req.OrderBy,
|
||||
}
|
||||
breeds, total, err := s.recipeSvc.ListPigBreeds(serviceCtx, opts, req.Page, req.PageSize)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("获取猪品种列表失败: %w", err)
|
||||
}
|
||||
|
||||
return dto.ConvertPigBreedListToDTO(breeds, total, req.Page, req.PageSize), nil
|
||||
}
|
||||
Reference in New Issue
Block a user