| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- package models
-
- import (
- "encoding/json"
- "time"
- )
-
- // ConfigTemplateBuilder 配置模板建造者
- type ConfigTemplateBuilder struct {
- templates []*ConfigTemplate
- current *ConfigTemplate
- }
-
- // NewConfigTemplateBuilder 创建配置模板建造者
- func NewConfigTemplateBuilder() *ConfigTemplateBuilder {
- return &ConfigTemplateBuilder{
- templates: make([]*ConfigTemplate, 0),
- }
- }
-
- // StartTemplate 开始创建新模板
- func (b *ConfigTemplateBuilder) StartTemplate(name, rootKey, description string) *ConfigTemplateBuilder {
- b.current = &ConfigTemplate{
- TemplateName: name,
- YamlRootKey: rootKey,
- Description: description,
- IsDefault: true,
- SortOrder: len(b.templates) + 1,
- Creator: "system",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- Details: make([]ConfigTemplateDetail, 0),
- }
- return b
- }
-
- // AddInt 添加整型配置项
- func (b *ConfigTemplateBuilder) AddInt(key, description string) *DetailBuilder {
- return b.addDetail(key, description, "number", "int")
- }
-
- // AddString 添加字符串配置项
- func (b *ConfigTemplateBuilder) AddString(key, description string) *DetailBuilder {
- return b.addDetail(key, description, "string", "string")
- }
-
- // AddBoolean 添加布尔型配置项
- func (b *ConfigTemplateBuilder) AddBoolean(key, description string) *DetailBuilder {
- return b.addDetail(key, description, "boolean", "boolean")
- }
-
- // AddEnum 添加枚举型配置项
- func (b *ConfigTemplateBuilder) AddEnum(key, description string, enumValues []string) *DetailBuilder {
- db := b.addDetail(key, description, "string", "string")
- db.detail.ValidationRules = func() string {
- rules := ValidationRules{
- EnumValues: enumValues,
- }
- b, _ := json.Marshal(rules)
- return string(b)
- }()
- return db
- }
-
- // FinishTemplate 完成当前模板创建
- func (b *ConfigTemplateBuilder) FinishTemplate() *ConfigTemplateBuilder {
- if b.current != nil {
- b.templates = append(b.templates, b.current)
- b.current = nil
- }
- return b
- }
-
- // GetTemplates 获取所有模板
- func (b *ConfigTemplateBuilder) GetTemplates() []*ConfigTemplate {
- return b.templates
- }
-
- // // BuildSampleTemplates 构建示例模板
- // func (b *ConfigTemplateBuilder) BuildSampleTemplates() *ConfigTemplateBuilder {
- // // Service模板
- // b.StartTemplate("Service配置", "service", "服务基础配置").
- // AddInt("port", "服务监听端口").Default("8080").Min(1024).Max(65535).Required().FinishDetail().
- // AddString("service_name", "服务名称").Default("svc-configure").Pattern("^[a-zA-Z][a-zA-Z0-9_-]*$").Required().FinishDetail().
- // AddString("instance_name", "实例名称").Default("svc-configure-01").Required().FinishDetail().
- // AddInt("read_timeout", "读取超时时间(秒)").Default("30").Min(1).Max(300).Required().FinishDetail().
- // AddInt("write_timeout", "写入超时时间(秒)").Default("30").Min(1).Max(300).Required().FinishDetail().
- // AddInt("idle_timeout", "空闲超时时间(秒)").Default("60").Min(10).Max(600).Required().FinishDetail().
- // FinishTemplate()
-
- // // Log模板
- // b.StartTemplate("日志配置", "log", "日志相关配置").
- // AddEnum("level", "日志级别", []string{"debug", "info", "warn", "error", "fatal"}).Default("debug").Required().FinishDetail().
- // AddString("output", "日志输出目标").Default("console,file").FinishDetail().
- // AddBoolean("json_format", "是否以JSON格式输出日志").Default("true").FinishDetail().
- // FinishTemplate()
-
- // // Doris模板
- // b.StartTemplate("Doris配置", "doris", "Doris数据库连接配置").
- // AddString("fe_host", "Doris FE节点主机地址").Default("161.189.89.196").Pattern(`^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$`).Required().FinishDetail().
- // AddInt("fe_port", "Doris FE端口号").Default("8040").Min(1).Max(65535).Required().FinishDetail().
- // AddString("fe_username", "Doris FE用户名").Default("root").Required().FinishDetail().
- // AddString("fe_password", "Doris FE密码").Default("mos8555").Sensitive().Required().MinLength(6).MaxLength(100).FinishDetail().
- // AddInt("stream_load_timeout", "Stream Load超时时间(秒)").Default("300").Min(10).Max(3600).FinishDetail().
- // AddInt("batch_size", "批量大小").Default("1000").Min(1).Max(10000).FinishDetail().
- // FinishTemplate()
-
- // return b
- // }
-
- // 私有方法
- func (b *ConfigTemplateBuilder) addDetail(key, description, valueType, dataType string) *DetailBuilder {
- if b.current == nil {
- b.StartTemplate("未命名模板", "untitled", "未描述模板")
- }
-
- detail := ConfigTemplateDetail{
- ConfigKey: key,
- Description: description,
- ValueType: valueType,
- DataType: dataType,
- IsRequired: false,
- IsSensitive: false,
- IsReadonly: false,
- SortOrder: len(b.current.Details) + 1,
- Creator: "system",
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- }
-
- return &DetailBuilder{
- builder: b,
- detail: detail,
- }
- }
-
- // DetailBuilder 配置详情建造者
- type DetailBuilder struct {
- builder *ConfigTemplateBuilder
- detail ConfigTemplateDetail
- }
-
- // Default 设置默认值
- func (db *DetailBuilder) Default(value string) *DetailBuilder {
- db.detail.DefaultValue = value
- db.detail.ConfigValue = value
- return db
- }
-
- // Required 设置为必填项
- func (db *DetailBuilder) Required() *DetailBuilder {
- db.detail.IsRequired = true
- return db
- }
-
- // Sensitive 设置为敏感信息
- func (db *DetailBuilder) Sensitive() *DetailBuilder {
- db.detail.IsSensitive = true
- return db
- }
-
- // Readonly 设置为只读
- func (db *DetailBuilder) Readonly() *DetailBuilder {
- db.detail.IsReadonly = true
- return db
- }
-
- // Min 设置最小值
- func (db *DetailBuilder) Min(min float64) *DetailBuilder {
- db.addValidation(func(r *ValidationRules) {
- r.Min = &min
- })
- return db
- }
-
- // Max 设置最大值
- func (db *DetailBuilder) Max(max float64) *DetailBuilder {
- db.addValidation(func(r *ValidationRules) {
- r.Max = &max
- })
- return db
- }
-
- // MinLength 设置最小长度
- func (db *DetailBuilder) MinLength(length int) *DetailBuilder {
- db.addValidation(func(r *ValidationRules) {
- r.MinLength = &length
- })
- return db
- }
-
- // MaxLength 设置最大长度
- func (db *DetailBuilder) MaxLength(length int) *DetailBuilder {
- db.addValidation(func(r *ValidationRules) {
- r.MaxLength = &length
- })
- return db
- }
-
- // Pattern 设置正则表达式
- func (db *DetailBuilder) Pattern(pattern string) *DetailBuilder {
- db.addValidation(func(r *ValidationRules) {
- r.Pattern = pattern
- })
- return db
- }
-
- // Message 设置验证错误消息
- func (db *DetailBuilder) Message(msg string) *DetailBuilder {
- db.addValidation(func(r *ValidationRules) {
- r.Message = msg
- })
- return db
- }
-
- // FinishDetail 完成当前详情项
- func (db *DetailBuilder) FinishDetail() *ConfigTemplateBuilder {
- db.builder.current.Details = append(db.builder.current.Details, db.detail)
- return db.builder
- }
-
- // 私有方法
- func (db *DetailBuilder) addValidation(fn func(*ValidationRules)) {
- var rules ValidationRules
- if db.detail.ValidationRules != "" {
- json.Unmarshal([]byte(db.detail.ValidationRules), &rules)
- }
- fn(&rules)
- b, _ := json.Marshal(rules)
- db.detail.ValidationRules = string(b)
- }
-
- // 使用示例
- func CreateSampleConfigTemplates() []*ConfigTemplate {
- builder := NewConfigTemplateBuilder()
- //builder.BuildSampleTemplates()
- return builder.GetTemplates()
- }
-
- // 更简洁的使用示例
- func CreateConfigTemplates() []*ConfigTemplate {
- builder := NewConfigTemplateBuilder()
-
- // Service模板 - 更简洁的写法
- builder.StartTemplate("Service配置", "service", "服务基础配置")
- builder.AddInt("port", "服务监听端口").Default("8080").Min(1024).Max(65535).Required().FinishDetail()
- builder.AddString("service_name", "服务名称").Default("svc-configure").Required().FinishDetail()
- builder.FinishTemplate()
-
- // Log模板
- builder.StartTemplate("日志配置", "log", "日志相关配置")
- builder.AddEnum("level", "日志级别", []string{"debug", "info", "warn", "error", "fatal"}).Default("debug").Required().FinishDetail()
- builder.AddString("output", "日志输出").Default("console,file").FinishDetail()
- builder.FinishTemplate()
-
- // Doris模板
- builder.StartTemplate("Doris配置", "doris", "Doris连接配置")
- builder.AddString("fe_host", "FE主机").Default("localhost").Required().FinishDetail()
- builder.AddString("fe_password", "密码").Sensitive().Required().FinishDetail()
- builder.FinishTemplate()
-
- return builder.GetTemplates()
- }
|