- UpdateDatabaseRequest 添加 SubTables 字段 - 数据库更新时同步创建或更新子表记录 - 支持子表 DDL 的保存 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
120 lines
4.6 KiB
Go
120 lines
4.6 KiB
Go
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"`
|
||
}
|