Files
X-Agents/server/internal/model/database_info.go
DESKTOP-72TV0V4\caoxiaozhu 2eddc53249 feat: 更新数据库时支持同步保存子表配置和DDL
- UpdateDatabaseRequest 添加 SubTables 字段
- 数据库更新时同步创建或更新子表记录
- 支持子表 DDL 的保存

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 10:33:30 +08:00

197 lines
8.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package model
import (
"time"
)
// DatabaseInfo 数据库连接信息
type DatabaseInfo struct {
ID string `json:"id" gorm:"primaryKey;size:36"` // UUID
Name string `json:"name" gorm:"size:100;not null"` // 数据库名称
Description string `json:"description" gorm:"size:500"` // 描述
DBType string `json:"db_type" gorm:"size:20;not null"` // 数据库类型: mysql, postgres, mongodb, neo4j等
Host string `json:"host" gorm:"size:255;not null"` // 主机地址
Port int `json:"port" gorm:"not null"` // 端口
Username string `json:"username" gorm:"size:100;not null"` // 用户名
Password string `json:"password" gorm:"size:255"` // 密码(建议加密存储)
Database string `json:"database" gorm:"size:100"` // 数据库名
TableCount int `json:"table_count" gorm:"default:0"` // 子表数量
// Neo4j 专用字段
URI string `json:"uri" gorm:"size:255"` // Neo4j 连接地址 (bolt://host:7687)
GraphLabels string `json:"graph_labels" gorm:"size:1000"` // Neo4j 标签列表 (JSON 格式)
GraphRelationship string `json:"graph_relationship" gorm:"size:1000"` // Neo4j 关系类型列表 (JSON 格式)
SelectedLabel string `json:"selected_label" gorm:"size:100"` // 当前选中的标签
// 连接选项
Charset string `json:"charset" gorm:"size:20;default:utf8mb4"` // 字符集
SSLMode string `json:"ssl_mode" gorm:"size:20"` // SSL模式
// 时间
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// TableName 表名
func (DatabaseInfo) TableName() string {
return "database_info"
}
// CreateRequest 创建数据库信息请求(支持同时保存子表配置)
type CreateDatabaseRequest struct {
Name string `json:"name" binding:"required"`
Description string `json:"description"`
DBType string `json:"db_type" binding:"required"`
Host string `json:"host" binding:"required"`
Port int `json:"port" binding:"required"`
Username string `json:"username" binding:"required"`
Password string `json:"password"`
Database string `json:"database"`
Charset string `json:"charset"`
SSLMode string `json:"ssl_mode"`
SubTables []CreateSubTableRequest `json:"sub_tables"` // 可选,子表配置
}
// UpdateRequest 更新数据库信息请求
type UpdateDatabaseRequest struct {
Name string `json:"name"`
Description string `json:"description"`
DBType string `json:"db_type"`
Host string `json:"host"`
Port int `json:"port"`
Username string `json:"username"`
Password string `json:"password"`
Database string `json:"database"`
TableCount int `json:"table_count"`
Charset string `json:"charset"`
SSLMode string `json:"ssl_mode"`
URI string `json:"uri"` // Neo4j 连接地址
GraphLabels string `json:"graph_labels"` // Neo4j 标签列表 (JSON)
GraphRelationship string `json:"graph_relationship"` // Neo4j 关系类型列表 (JSON)
SelectedLabel string `json:"selected_label"` // 当前选中的标签
SubTables []CreateSubTableRequest `json:"sub_tables"` // 子表配置
}
// SaveGraphRequest 保存图谱信息请求
type SaveGraphRequest struct {
DatabaseID string `json:"databaseId" binding:"required"`
DatabaseName string `json:"databaseName" binding:"required"`
URI string `json:"uri" binding:"required"`
Username string `json:"username" binding:"required"`
Labels []string `json:"labels" binding:"required"`
RelationshipTypes []string `json:"relationshipTypes" binding:"required"`
SelectedLabel string `json:"selectedLabel"`
}
// SaveGraphResponse 保存图谱信息响应
type SaveGraphResponse struct {
Success bool `json:"success"`
Message string `json:"message"`
}
// CheckRequest 检查连接请求
type CheckRequest struct {
DBType string `json:"db_type" binding:"required"`
Host string `json:"host" binding:"required"`
Port int `json:"port" binding:"required"`
Username string `json:"username" binding:"required"`
Password string `json:"password"`
Database string `json:"database"`
Charset string `json:"charset"`
SSLMode string `json:"ssl_mode"`
DatabaseID string `json:"database_id"` // 可选,用于获取已保存的字段映射
URI string `json:"uri"` // Neo4j 连接地址,如 bolt://localhost:7687
}
// CheckResponse 检查连接响应
type CheckResponse struct {
Success bool `json:"success"` // 是否连接成功
Message string `json:"message"` // 消息
Tables []TableDDLInfo `json:"tables,omitempty"` // 表列表(关系型数据库)
Database string `json:"database"` // 数据库名
Graphs *GraphOverview `json:"graphs,omitempty"` // 图谱概览Neo4j
}
// GraphOverview 图谱概览数据
type GraphOverview struct {
Labels []LabelCount `json:"labels"` // 标签列表
RelationshipTypes []RelTypeCount `json:"relationshipTypes"` // 关系类型列表
Nodes []NodeProperty `json:"nodes"` // 节点属性定义
Relationships []RelProperty `json:"relationships"` // 关系属性定义
}
// LabelCount 标签数量统计
type LabelCount struct {
Name string `json:"name"` // 标签名
Count int `json:"count"` // 节点数量
}
// RelTypeCount 关系类型数量统计
type RelTypeCount struct {
Name string `json:"name"` // 关系类型名
Count int `json:"count"` // 关系数量
}
// NodeProperty 节点属性定义
type NodeProperty struct {
Label string `json:"label"` // 节点标签名
Properties []PropertyInfo `json:"properties"` // 属性列表
}
// PropertyInfo 属性信息
type PropertyInfo struct {
Name string `json:"name"` // 属性名
Type string `json:"type"` // 属性类型
}
// RelProperty 关系属性定义
type RelProperty struct {
Type string `json:"type"` // 关系类型名
StartLabel string `json:"startLabel"` // 起始节点标签
EndLabel string `json:"endLabel"` // 目标节点标签
Properties []PropertyInfo `json:"properties"` // 属性列表
}
// Neo4jNodeRequest 获取节点详情请求
type Neo4jNodeRequest struct {
URI string `json:"uri" binding:"required"`
Username string `json:"username" binding:"required"`
Password string `json:"password" binding:"required"`
Database string `json:"database"`
Label string `json:"label" binding:"required"`
Limit int `json:"limit"` // 默认 10
}
// Neo4jNodeResponse 获取节点详情响应
type Neo4jNodeResponse struct {
Success bool `json:"success"` // 是否成功
Message string `json:"message"` // 消息
Nodes []map[string]interface{} `json:"nodes"` // 节点数据
Properties []PropertyInfo `json:"properties"` // 属性定义列表
}
// Neo4jRelRequest 获取关系详情请求
type Neo4jRelRequest struct {
URI string `json:"uri" binding:"required"`
Username string `json:"username" binding:"required"`
Password string `json:"password" binding:"required"`
Database string `json:"database"`
RelationshipType string `json:"relationship_type" binding:"required"`
Limit int `json:"limit"` // 默认 10
}
// Neo4jRelResponse 获取关系详情响应
type Neo4jRelResponse struct {
Success bool `json:"success"` // 是否成功
Message string `json:"message"` // 消息
Relationships []Neo4jRelationship `json:"relationships"` // 关系数据
}
// Neo4jRelationship 关系数据
type Neo4jRelationship struct {
ID string `json:"id"` // 关系唯一标识
Source string `json:"source"` // 起始节点ID
Target string `json:"target"` // 目标节点ID
Properties map[string]interface{} `json:"properties"` // 关系属性
}