增加设备模板列表
This commit is contained in:
		
							
								
								
									
										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