优化设备服务方法的入参
This commit is contained in:
		@@ -4,7 +4,6 @@ import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strconv"
 | 
			
		||||
 | 
			
		||||
	"git.huangwc.com/pig/pig-farm-controller/internal/app/dto"
 | 
			
		||||
	"git.huangwc.com/pig/pig-farm-controller/internal/domain/device"
 | 
			
		||||
@@ -23,26 +22,27 @@ var (
 | 
			
		||||
	ErrDeviceTemplateInUse = errors.New("设备模板正在被一个或多个设备使用,无法删除")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// DeviceService 定义了应用层的设备服务接口,用于协调设备相关的业务逻辑。
 | 
			
		||||
// DeviceService 定义了应用层的设备服务接口,用于协调设备相关的业务逻辑。
 | 
			
		||||
type DeviceService interface {
 | 
			
		||||
	CreateDevice(req *dto.CreateDeviceRequest) (*dto.DeviceResponse, error)
 | 
			
		||||
	GetDevice(id string) (*dto.DeviceResponse, error)
 | 
			
		||||
	GetDevice(id uint) (*dto.DeviceResponse, error)
 | 
			
		||||
	ListDevices() ([]*dto.DeviceResponse, error)
 | 
			
		||||
	UpdateDevice(id string, req *dto.UpdateDeviceRequest) (*dto.DeviceResponse, error)
 | 
			
		||||
	DeleteDevice(id string) error
 | 
			
		||||
	ManualControl(id string, req *dto.ManualControlDeviceRequest) error
 | 
			
		||||
	UpdateDevice(id uint, req *dto.UpdateDeviceRequest) (*dto.DeviceResponse, error)
 | 
			
		||||
	DeleteDevice(id uint) error
 | 
			
		||||
	ManualControl(id uint, req *dto.ManualControlDeviceRequest) error
 | 
			
		||||
 | 
			
		||||
	CreateAreaController(req *dto.CreateAreaControllerRequest) (*dto.AreaControllerResponse, error)
 | 
			
		||||
	GetAreaController(id string) (*dto.AreaControllerResponse, error)
 | 
			
		||||
	GetAreaController(id uint) (*dto.AreaControllerResponse, error)
 | 
			
		||||
	ListAreaControllers() ([]*dto.AreaControllerResponse, error)
 | 
			
		||||
	UpdateAreaController(id string, req *dto.UpdateAreaControllerRequest) (*dto.AreaControllerResponse, error)
 | 
			
		||||
	DeleteAreaController(id string) error
 | 
			
		||||
	UpdateAreaController(id uint, req *dto.UpdateAreaControllerRequest) (*dto.AreaControllerResponse, error)
 | 
			
		||||
	DeleteAreaController(id uint) error
 | 
			
		||||
 | 
			
		||||
	CreateDeviceTemplate(req *dto.CreateDeviceTemplateRequest) (*dto.DeviceTemplateResponse, error)
 | 
			
		||||
	GetDeviceTemplate(id string) (*dto.DeviceTemplateResponse, error)
 | 
			
		||||
	GetDeviceTemplate(id uint) (*dto.DeviceTemplateResponse, error)
 | 
			
		||||
	ListDeviceTemplates() ([]*dto.DeviceTemplateResponse, error)
 | 
			
		||||
	UpdateDeviceTemplate(id string, req *dto.UpdateDeviceTemplateRequest) (*dto.DeviceTemplateResponse, error)
 | 
			
		||||
	DeleteDeviceTemplate(id string) error
 | 
			
		||||
	UpdateDeviceTemplate(id uint, req *dto.UpdateDeviceTemplateRequest) (*dto.DeviceTemplateResponse, error)
 | 
			
		||||
	DeleteDeviceTemplate(id uint) error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// deviceService 是 DeviceService 接口的具体实现。
 | 
			
		||||
@@ -100,8 +100,8 @@ func (s *deviceService) CreateDevice(req *dto.CreateDeviceRequest) (*dto.DeviceR
 | 
			
		||||
	return dto.NewDeviceResponse(createdDevice)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *deviceService) GetDevice(id string) (*dto.DeviceResponse, error) {
 | 
			
		||||
	device, err := s.deviceRepo.FindByIDString(id)
 | 
			
		||||
func (s *deviceService) GetDevice(id uint) (*dto.DeviceResponse, error) {
 | 
			
		||||
	device, err := s.deviceRepo.FindByID(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -116,8 +116,8 @@ func (s *deviceService) ListDevices() ([]*dto.DeviceResponse, error) {
 | 
			
		||||
	return dto.NewListDeviceResponse(devices)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *deviceService) UpdateDevice(id string, req *dto.UpdateDeviceRequest) (*dto.DeviceResponse, error) {
 | 
			
		||||
	existingDevice, err := s.deviceRepo.FindByIDString(id)
 | 
			
		||||
func (s *deviceService) UpdateDevice(id uint, req *dto.UpdateDeviceRequest) (*dto.DeviceResponse, error) {
 | 
			
		||||
	existingDevice, err := s.deviceRepo.FindByID(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -149,21 +149,16 @@ func (s *deviceService) UpdateDevice(id string, req *dto.UpdateDeviceRequest) (*
 | 
			
		||||
	return dto.NewDeviceResponse(updatedDevice)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *deviceService) DeleteDevice(id string) error {
 | 
			
		||||
	idUint, err := strconv.ParseUint(id, 10, 64)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	deviceID := uint(idUint)
 | 
			
		||||
func (s *deviceService) DeleteDevice(id uint) error {
 | 
			
		||||
 | 
			
		||||
	// 检查设备是否存在
 | 
			
		||||
	_, err = s.deviceRepo.FindByID(deviceID)
 | 
			
		||||
	_, err := s.deviceRepo.FindByID(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err // 如果未找到,会返回 gorm.ErrRecordNotFound
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 在删除前检查设备是否被任务使用
 | 
			
		||||
	inUse, err := s.deviceRepo.IsDeviceInUse(deviceID)
 | 
			
		||||
	inUse, err := s.deviceRepo.IsDeviceInUse(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		// 如果检查过程中发生数据库错误,则返回错误
 | 
			
		||||
		return fmt.Errorf("检查设备使用情况失败: %w", err)
 | 
			
		||||
@@ -174,11 +169,11 @@ func (s *deviceService) DeleteDevice(id string) error {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 只有在未被使用时,才执行删除操作
 | 
			
		||||
	return s.deviceRepo.Delete(deviceID)
 | 
			
		||||
	return s.deviceRepo.Delete(id)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *deviceService) ManualControl(id string, req *dto.ManualControlDeviceRequest) error {
 | 
			
		||||
	dev, err := s.deviceRepo.FindByIDString(id)
 | 
			
		||||
func (s *deviceService) ManualControl(id uint, req *dto.ManualControlDeviceRequest) error {
 | 
			
		||||
	dev, err := s.deviceRepo.FindByID(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
@@ -225,12 +220,8 @@ func (s *deviceService) CreateAreaController(req *dto.CreateAreaControllerReques
 | 
			
		||||
	return dto.NewAreaControllerResponse(ac)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *deviceService) GetAreaController(id string) (*dto.AreaControllerResponse, error) {
 | 
			
		||||
	idUint, err := strconv.ParseUint(id, 10, 64)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	ac, err := s.areaControllerRepo.FindByID(uint(idUint))
 | 
			
		||||
func (s *deviceService) GetAreaController(id uint) (*dto.AreaControllerResponse, error) {
 | 
			
		||||
	ac, err := s.areaControllerRepo.FindByID(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -245,13 +236,8 @@ func (s *deviceService) ListAreaControllers() ([]*dto.AreaControllerResponse, er
 | 
			
		||||
	return dto.NewListAreaControllerResponse(acs)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *deviceService) UpdateAreaController(id string, req *dto.UpdateAreaControllerRequest) (*dto.AreaControllerResponse, error) {
 | 
			
		||||
	idUint, err := strconv.ParseUint(id, 10, 64)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	existingAC, err := s.areaControllerRepo.FindByID(uint(idUint))
 | 
			
		||||
func (s *deviceService) UpdateAreaController(id uint, req *dto.UpdateAreaControllerRequest) (*dto.AreaControllerResponse, error) {
 | 
			
		||||
	existingAC, err := s.areaControllerRepo.FindByID(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -277,21 +263,16 @@ func (s *deviceService) UpdateAreaController(id string, req *dto.UpdateAreaContr
 | 
			
		||||
	return dto.NewAreaControllerResponse(existingAC)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *deviceService) DeleteAreaController(id string) error {
 | 
			
		||||
	idUint, err := strconv.ParseUint(id, 10, 64)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("无效的ID格式: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
	acID := uint(idUint)
 | 
			
		||||
func (s *deviceService) DeleteAreaController(id uint) error {
 | 
			
		||||
 | 
			
		||||
	// 1. 检查是否存在
 | 
			
		||||
	_, err = s.areaControllerRepo.FindByID(acID)
 | 
			
		||||
	_, err := s.areaControllerRepo.FindByID(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err // 如果未找到,gorm会返回 ErrRecordNotFound
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 2. 检查是否被使用(业务逻辑)
 | 
			
		||||
	inUse, err := s.deviceRepo.IsAreaControllerInUse(acID)
 | 
			
		||||
	inUse, err := s.deviceRepo.IsAreaControllerInUse(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err // 返回数据库检查错误
 | 
			
		||||
	}
 | 
			
		||||
@@ -300,7 +281,7 @@ func (s *deviceService) DeleteAreaController(id string) error {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 3. 执行删除
 | 
			
		||||
	return s.areaControllerRepo.Delete(acID)
 | 
			
		||||
	return s.areaControllerRepo.Delete(id)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --- Device Templates ---
 | 
			
		||||
@@ -336,12 +317,8 @@ func (s *deviceService) CreateDeviceTemplate(req *dto.CreateDeviceTemplateReques
 | 
			
		||||
	return dto.NewDeviceTemplateResponse(deviceTemplate)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *deviceService) GetDeviceTemplate(id string) (*dto.DeviceTemplateResponse, error) {
 | 
			
		||||
	idUint, err := strconv.ParseUint(id, 10, 64)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	deviceTemplate, err := s.deviceTemplateRepo.FindByID(uint(idUint))
 | 
			
		||||
func (s *deviceService) GetDeviceTemplate(id uint) (*dto.DeviceTemplateResponse, error) {
 | 
			
		||||
	deviceTemplate, err := s.deviceTemplateRepo.FindByID(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -356,13 +333,8 @@ func (s *deviceService) ListDeviceTemplates() ([]*dto.DeviceTemplateResponse, er
 | 
			
		||||
	return dto.NewListDeviceTemplateResponse(deviceTemplates)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *deviceService) UpdateDeviceTemplate(id string, req *dto.UpdateDeviceTemplateRequest) (*dto.DeviceTemplateResponse, error) {
 | 
			
		||||
	idUint, err := strconv.ParseUint(id, 10, 64)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	existingDeviceTemplate, err := s.deviceTemplateRepo.FindByID(uint(idUint))
 | 
			
		||||
func (s *deviceService) UpdateDeviceTemplate(id uint, req *dto.UpdateDeviceTemplateRequest) (*dto.DeviceTemplateResponse, error) {
 | 
			
		||||
	existingDeviceTemplate, err := s.deviceTemplateRepo.FindByID(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -395,21 +367,16 @@ func (s *deviceService) UpdateDeviceTemplate(id string, req *dto.UpdateDeviceTem
 | 
			
		||||
	return dto.NewDeviceTemplateResponse(existingDeviceTemplate)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *deviceService) DeleteDeviceTemplate(id string) error {
 | 
			
		||||
	idUint, err := strconv.ParseUint(id, 10, 64)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("无效的ID格式: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
	dtID := uint(idUint)
 | 
			
		||||
func (s *deviceService) DeleteDeviceTemplate(id uint) error {
 | 
			
		||||
 | 
			
		||||
	// 1. 检查是否存在
 | 
			
		||||
	_, err = s.deviceTemplateRepo.FindByID(dtID)
 | 
			
		||||
	_, err := s.deviceTemplateRepo.FindByID(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 2. 检查是否被使用(业务逻辑)
 | 
			
		||||
	inUse, err := s.deviceTemplateRepo.IsInUse(dtID)
 | 
			
		||||
	inUse, err := s.deviceTemplateRepo.IsInUse(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
@@ -418,5 +385,5 @@ func (s *deviceService) DeleteDeviceTemplate(id string) error {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 3. 执行删除
 | 
			
		||||
	return s.deviceTemplateRepo.Delete(dtID)
 | 
			
		||||
	return s.deviceTemplateRepo.Delete(id)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user