package models import ( "database/sql" "encoding/json" "fmt" "strconv" "strings" "time" ) // StartupConfig 启动配置表 type StartupConfig struct { ID int64 `json:"id" db:"id"` // 技术主键 ServiceName string `json:"service_name" db:"service_name"` // 服务名称 Environment string `json:"environment" db:"environment"` // 环境:dev/test/prod Version int `json:"version" db:"version"` // 配置版本 ConfigJSON json.RawMessage `json:"config_json" db:"config_json"` // 配置内容JSON IsActive bool `json:"is_active" db:"is_active"` // 是否生效 Creator string `json:"creator" db:"creator"` // 创建人 CreatedAt time.Time `json:"created_at" db:"created_at"` // 创建时间 UpdatedAt sql.NullTime `json:"updated_at,omitempty" db:"updated_at"` // 更新时间 } // TableName 返回表名 func (StartupConfig) TableName() string { return "startup_config" } // ConfigKey 返回业务键:service_name.environment.vversion func (c *StartupConfig) ConfigKey() string { return fmt.Sprintf("%s.%s.v%d", c.ServiceName, c.Environment, c.Version) } // ParseConfigKey 解析业务键 func ParseConfigKey(key string) (service, env string, version int, ok bool) { parts := strings.Split(key, ".") if len(parts) != 3 { return "", "", 0, false } // 检查版本格式 if !strings.HasPrefix(parts[2], "v") { return "", "", 0, false } verStr := strings.TrimPrefix(parts[2], "v") version, err := strconv.Atoi(verStr) if err != nil { return "", "", 0, false } return parts[0], parts[1], version, true }