初步创建计划相关model
This commit is contained in:
@@ -122,7 +122,13 @@ func initStorage(cfg config.DatabaseConfig, logger *logs.Logger) (database.Stora
|
|||||||
|
|
||||||
// 执行数据库迁移
|
// 执行数据库迁移
|
||||||
// 这里需要添加所有需要自动迁移的模型
|
// 这里需要添加所有需要自动迁移的模型
|
||||||
var dbModels = []interface{}{&models.User{}, &models.Device{}}
|
var dbModels = []interface{}{
|
||||||
|
&models.User{},
|
||||||
|
&models.Device{},
|
||||||
|
&models.Plan{},
|
||||||
|
&models.SubPlan{},
|
||||||
|
&models.Task{},
|
||||||
|
}
|
||||||
if err := storage.Migrate(dbModels...); err != nil {
|
if err := storage.Migrate(dbModels...); err != nil {
|
||||||
return nil, fmt.Errorf("数据库迁移失败: %w", err)
|
return nil, fmt.Errorf("数据库迁移失败: %w", err)
|
||||||
}
|
}
|
||||||
|
|||||||
86
internal/infra/models/plan.go
Normal file
86
internal/infra/models/plan.go
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"gorm.io/datatypes"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PlanExecutionType 定义了计划的执行类型
|
||||||
|
type PlanExecutionType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PlanExecutionTypeAutomatic PlanExecutionType = "automatic" // 自动执行 (包含定时和循环)
|
||||||
|
PlanExecutionTypeManual PlanExecutionType = "manual" // 手动执行
|
||||||
|
)
|
||||||
|
|
||||||
|
// PlanContentType 定义了计划包含的内容类型
|
||||||
|
type PlanContentType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PlanContentTypeSubPlans PlanContentType = "sub_plans" // 计划包含子计划
|
||||||
|
PlanContentTypeTasks PlanContentType = "tasks" // 计划包含任务
|
||||||
|
)
|
||||||
|
|
||||||
|
// TaskType 定义了任务的类型,每个类型可以对应 task 包中的一个具体动作
|
||||||
|
type TaskType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
TaskTypeWaiting TaskType = "waiting" // 等待任务
|
||||||
|
)
|
||||||
|
|
||||||
|
// Plan 代表系统中的一个计划,可以包含子计划或任务
|
||||||
|
type Plan struct {
|
||||||
|
gorm.Model
|
||||||
|
|
||||||
|
Name string `gorm:"not null" json:"name"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
ExecutionType PlanExecutionType `gorm:"not null" json:"execution_type"`
|
||||||
|
|
||||||
|
// 针对 PlanExecutionTypeAutomatic,使用 Cron 表达式定义调度规则
|
||||||
|
CronExpression string `json:"cron_expression"`
|
||||||
|
|
||||||
|
// ContentType 标识此计划是包含子计划还是任务。
|
||||||
|
// 应用程序层应确保只设置其中一种类型的内容。
|
||||||
|
ContentType PlanContentType `gorm:"not null" json:"content_type"`
|
||||||
|
|
||||||
|
// SubPlans 直接与此计划关联的子计划。仅当 ContentType 为 PlanContentTypeSubPlans 时有效。
|
||||||
|
SubPlans []SubPlan `gorm:"foreignKey:ParentPlanID" json:"sub_plans"`
|
||||||
|
// Tasks 直接与此计划关联的任务。仅当 ContentType 为 PlanContentTypeTasks 时有效。
|
||||||
|
Tasks []Task `gorm:"foreignKey:PlanID" json:"tasks"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName 自定义 GORM 使用的数据库表名
|
||||||
|
func (Plan) TableName() string {
|
||||||
|
return "plans"
|
||||||
|
}
|
||||||
|
|
||||||
|
// SubPlan 代表作为另一个计划一部分的子计划,具有执行顺序
|
||||||
|
type SubPlan struct {
|
||||||
|
gorm.Model
|
||||||
|
|
||||||
|
ParentPlanID uint `gorm:"not null;index" json:"parent_plan_id"` // 父计划的ID
|
||||||
|
ChildPlanID uint `gorm:"not null;index" json:"child_plan_id"` // 子计划的ID (它本身也是一个 Plan)
|
||||||
|
Order int `gorm:"not null" json:"order"` // 在父计划中的执行顺序
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName 自定义 GORM 使用的数据库表名
|
||||||
|
func (SubPlan) TableName() string {
|
||||||
|
return "sub_plans"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Task 代表计划中的一个任务,具有执行顺序
|
||||||
|
type Task struct {
|
||||||
|
gorm.Model
|
||||||
|
|
||||||
|
PlanID uint `gorm:"not null;index" json:"plan_id"` // 此任务所属计划的ID
|
||||||
|
Name string `gorm:"not null" json:"name"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
Order int `gorm:"not null" json:"order"` // 在计划中的执行顺序
|
||||||
|
Type TaskType `gorm:"not null" json:"type"` // 任务的类型,对应 task 包中的具体动作
|
||||||
|
Parameters datatypes.JSON `json:"parameters"` // 任务特定参数的JSON (例如: 设备ID, 值)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName 自定义 GORM 使用的数据库表名
|
||||||
|
func (Task) TableName() string {
|
||||||
|
return "tasks"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user