增加设备模板列表
This commit is contained in:
@@ -26,6 +26,9 @@ type DeviceRepository interface {
|
||||
// ListByAreaControllerID 根据区域主控 ID 列出所有子设备。
|
||||
ListByAreaControllerID(areaControllerID uint) ([]*models.Device, error)
|
||||
|
||||
// FindByDeviceTemplateID 根据设备模板ID查找所有使用该模板的设备
|
||||
FindByDeviceTemplateID(deviceTemplateID uint) ([]*models.Device, error)
|
||||
|
||||
// Update 更新一个已有的设备信息
|
||||
Update(device *models.Device) error
|
||||
|
||||
@@ -91,6 +94,16 @@ func (r *gormDeviceRepository) ListByAreaControllerID(areaControllerID uint) ([]
|
||||
return devices, nil
|
||||
}
|
||||
|
||||
// FindByDeviceTemplateID 根据设备模板ID查找所有使用该模板的设备
|
||||
func (r *gormDeviceRepository) FindByDeviceTemplateID(deviceTemplateID uint) ([]*models.Device, error) {
|
||||
var devices []*models.Device
|
||||
err := r.db.Where("device_template_id = ?", deviceTemplateID).Find(&devices).Error
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询使用设备模板ID %d 的设备失败: %w", deviceTemplateID, err)
|
||||
}
|
||||
return devices, nil
|
||||
}
|
||||
|
||||
// Update 更新一个已有的设备信息
|
||||
// GORM 的 Save 方法会自动处理主键存在时更新,不存在时创建的逻辑,但这里我们明确用于更新。
|
||||
func (r *gormDeviceRepository) Update(device *models.Device) error {
|
||||
|
||||
94
internal/infra/repository/device_template_repository.go
Normal file
94
internal/infra/repository/device_template_repository.go
Normal file
@@ -0,0 +1,94 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// DeviceTemplateRepository 定义了设备模板数据访问的接口
|
||||
type DeviceTemplateRepository interface {
|
||||
Create(deviceTemplate *models.DeviceTemplate) error
|
||||
FindByID(id uint) (*models.DeviceTemplate, error)
|
||||
FindByName(name string) (*models.DeviceTemplate, error)
|
||||
ListAll() ([]*models.DeviceTemplate, error)
|
||||
Update(deviceTemplate *models.DeviceTemplate) error
|
||||
Delete(id uint) error
|
||||
IsInUse(id uint) (bool, error)
|
||||
}
|
||||
|
||||
// gormDeviceTemplateRepository 是 DeviceTemplateRepository 的 GORM 实现
|
||||
type gormDeviceTemplateRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// NewGormDeviceTemplateRepository 创建一个新的 gormDeviceTemplateRepository 实例
|
||||
func NewGormDeviceTemplateRepository(db *gorm.DB) DeviceTemplateRepository {
|
||||
return &gormDeviceTemplateRepository{db: db}
|
||||
}
|
||||
|
||||
// Create 在数据库中创建一个新的设备模板
|
||||
func (r *gormDeviceTemplateRepository) Create(deviceTemplate *models.DeviceTemplate) error {
|
||||
return r.db.Create(deviceTemplate).Error
|
||||
}
|
||||
|
||||
// FindByID 根据ID查找设备模板
|
||||
func (r *gormDeviceTemplateRepository) FindByID(id uint) (*models.DeviceTemplate, error) {
|
||||
var deviceTemplate models.DeviceTemplate
|
||||
if err := r.db.First(&deviceTemplate, id).Error; err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, fmt.Errorf("设备模板未找到: %w", err)
|
||||
}
|
||||
return nil, fmt.Errorf("查询设备模板失败: %w", err)
|
||||
}
|
||||
return &deviceTemplate, nil
|
||||
}
|
||||
|
||||
// FindByName 根据名称查找设备模板
|
||||
func (r *gormDeviceTemplateRepository) FindByName(name string) (*models.DeviceTemplate, error) {
|
||||
var deviceTemplate models.DeviceTemplate
|
||||
if err := r.db.Where("name = ?", name).First(&deviceTemplate).Error; err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, fmt.Errorf("设备模板未找到: %w", err)
|
||||
}
|
||||
return nil, fmt.Errorf("查询设备模板失败: %w", err)
|
||||
}
|
||||
return &deviceTemplate, nil
|
||||
}
|
||||
|
||||
// ListAll 获取所有设备模板
|
||||
func (r *gormDeviceTemplateRepository) ListAll() ([]*models.DeviceTemplate, error) {
|
||||
var deviceTemplates []*models.DeviceTemplate
|
||||
if err := r.db.Find(&deviceTemplates).Error; err != nil {
|
||||
return nil, fmt.Errorf("获取设备模板列表失败: %w", err)
|
||||
}
|
||||
return deviceTemplates, nil
|
||||
}
|
||||
|
||||
// Update 更新数据库中的设备模板
|
||||
func (r *gormDeviceTemplateRepository) Update(deviceTemplate *models.DeviceTemplate) error {
|
||||
return r.db.Save(deviceTemplate).Error
|
||||
}
|
||||
|
||||
// IsInUse 检查设备模板是否正在被设备使用
|
||||
func (r *gormDeviceTemplateRepository) IsInUse(id uint) (bool, error) {
|
||||
var count int64
|
||||
if err := r.db.Model(&models.Device{}).Where("device_template_id = ?", id).Count(&count).Error; err != nil {
|
||||
return false, fmt.Errorf("检查设备模板使用情况失败: %w", err)
|
||||
}
|
||||
return count > 0, nil
|
||||
}
|
||||
|
||||
// Delete 软删除数据库中的设备模板
|
||||
func (r *gormDeviceTemplateRepository) Delete(id uint) error {
|
||||
inUse, err := r.IsInUse(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if inUse {
|
||||
return errors.New("设备模板正在被设备使用,无法删除")
|
||||
}
|
||||
return r.db.Delete(&models.DeviceTemplate{}, id).Error
|
||||
}
|
||||
Reference in New Issue
Block a user