package model import ( "encoding/json" "time" ) // TableDDLInfo 表结构信息 type TableDDLInfo struct { TableName string `json:"table_name"` // 表名 TableComment string `json:"table_comment"` // 表注释 Columns []ColumnInfo `json:"columns"` // 列信息 DDL string `json:"ddl"` // 建表DDL Indexes []IndexInfo `json:"indexes"` // 索引信息 } // ColumnInfo 列信息 type ColumnInfo struct { ColumnName string `json:"column_name"` // 列名 DataType string `json:"data_type"` // 数据类型 ColumnType string `json:"column_type"` // 列类型(含长度) IsNullable string `json:"is_nullable"` // 是否可空 DefaultValue string `json:"default_value"` // 默认值 ColumnKey string `json:"column_key"` // 主键/索引 Extra string `json:"extra"` // 自增等 ColumnComment string `json:"column_comment"` // 列注释 MappedName string `json:"mapped_name"` // 字段中文映射名 } // IndexInfo 索引信息 type IndexInfo struct { IndexName string `json:"index_name"` // 索引名 ColumnName string `json:"column_name"` // 列名 NonUnique int `json:"non_unique"` // 是否唯一 IndexType string `json:"index_type"` // 索引类型 } // SubTableInfo 子表信息 type SubTableInfo struct { ID string `json:"id"` // UUID DatabaseID string `json:"database_id"` // 关联的数据库ID ParentTable string `json:"parent_table"` // 父表名 SubTableName string `json:"sub_table_name"` // 子表名 SubTableComment string `json:"sub_table_comment"` // 子表注释 MappingType string `json:"mapping_type" gorm:"type:varchar(20)"` // 映射类型 RelationField string `json:"relation_field" gorm:"type:varchar(100)"` // 关联字段 RelationType string `json:"relation_type" gorm:"type:varchar(20)"` // 关联类型 Fields string `json:"-" gorm:"type:longtext"` // 字段映射列表(JSON 格式,内部存储) FieldsList []FieldMapping `json:"fields" gorm:"-"` // 字段映射列表(返回给前端) DDL string `json:"ddl" gorm:"type:longtext"` // 建表 DDL CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // FieldMapping 字段映射 type FieldMapping struct { ColumnName string `json:"column_name"` // 列名 MappedName string `json:"mapped_name"` // 中文映射名 } // GetFields 获取字段映射列表 func (s *SubTableInfo) GetFields() []FieldMapping { if s.Fields == "" { return nil } var fields []FieldMapping if err := json.Unmarshal([]byte(s.Fields), &fields); err != nil { return nil } return fields } // SetFields 设置字段映射列表 func (s *SubTableInfo) SetFields(fields []FieldMapping) { if len(fields) == 0 { s.Fields = "" return } data, _ := json.Marshal(fields) s.Fields = string(data) } // TableName 表名 func (SubTableInfo) TableName() string { return "sub_table_info" } // CreateSubTableRequest 创建子表请求 type CreateSubTableRequest struct { DatabaseID string `json:"database_id" binding:"required"` ParentTable string `json:"parent_table" binding:"required"` SubTableName string `json:"sub_table_name" binding:"required"` SubTableComment string `json:"sub_table_comment"` MappingType string `json:"mapping_type"` RelationField string `json:"relation_field"` RelationType string `json:"relation_type"` Fields []FieldMapping `json:"fields"` // 字段映射列表 DDL string `json:"ddl"` // 建表DDL } // UpdateSubTableRequest 更新子表请求 type UpdateSubTableRequest struct { ParentTable string `json:"parent_table"` SubTableName string `json:"sub_table_name"` SubTableComment string `json:"sub_table_comment"` MappingType string `json:"mapping_type"` RelationField string `json:"relation_field"` RelationType string `json:"relation_type"` DDL string `json:"ddl"` } // SubTableMapping 完整的子表映射配置(存储到文件的格式) type SubTableMapping struct { DatabaseID string `json:"database_id"` DatabaseName string `json:"database_name"` DBType string `json:"db_type"` Tables []SubTableInfo `json:"tables"` UpdatedAt time.Time `json:"updated_at"` }