| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- 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(id, name, description string) *ConfigTemplateBuilder {
- b.current = &ConfigTemplate{
- ConfigTemplateID: id,
- TemplateName: name,
- 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
- }
-
- // 私有方法
- func (b *ConfigTemplateBuilder) addDetail(key, description, valueType, dataType string) *DetailBuilder {
- if b.current == nil {
- b.StartTemplate("untitled", "未命名模板", "未描述模板")
- }
- detailID := b.current.ConfigTemplateID + "." + key
- detail := ConfigTemplateDetail{
- ConfigTemplateDetailID: detailID,
- ConfigTemplateID: b.current.ConfigTemplateID,
- 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()
- // }
|