API_EXAMPLES.md 29 KB

DB Connection Storage API Examples

数据库连接存储模块提供数据库连接、分组和SQL脚本的管理功能,支持树状分层组织和完整的CRUD操作。

重要说明

显示顺序 (display_order)

所有支持显示顺序的资源(连接分组、数据库连接)都实现了自动排序功能:

  • 自动计算: 创建资源时如果未提供 display_order 或值为 0,系统会自动计算合适的显示顺序
  • 分组排序: 新分组会排在同级分组的最后位置(最大显示顺序 + 1)
  • 连接排序: 新连接会排在同分组连接的最后位置(最大显示顺序 + 1)
  • 手动指定: 如果提供了具体的 display_order 值,系统会使用提供的值

基础信息

  • Base URL: http://localhost:8080/api/v1/storage
  • Content-Type: application/json
  • 认证: 根据项目配置

API 端点示例

1. 数据库连接管理

创建数据库连接

参数说明:

  • group_id (string, 必需): 连接所属的分组ID(系统会验证此ID是否存在)
  • name (string, 必需): 连接的名称,用于标识连接
  • description (string, 可选): 连接的详细描述
  • kind (string, 必需): 连接类别,示例值为 database / server / other。根据 kind 的值,请在请求体中提供对应的嵌套对象:
    • kind=="database" 时,请使用 db_detail 对象(示例见下)。
    • kind=="server" 时,请使用 server_detail 对象(示例见下)。
  • color (string, 可选): 连接在UI中显示的颜色
  • auto_connect (boolean, 可选): 是否自动连接,默认为 false
  • display_order (int, 可选): 显示顺序,如果未提供或为0,系统会自动计算为同分组连接最大显示顺序 + 1

验证逻辑:

  • 系统会自动验证group_id是否存在于连接分组表中
  • 如果group_id不存在,将返回错误码3001,表示"分组不存在"
  • display_order 会自动计算,确保新连接显示在同分组连接的最后位置

    curl -X POST http://localhost:8080/api/v1/storage/connections/create \
    -H "Content-Type: application/json" \
    -d '{
    "group_id": "group_1",
    "name": "MySQL Production DB",
    "description": "生产环境主数据库",
    "kind": "database",
    "color": "#4285F4",
    "auto_connect": false,
    "db_detail": {
      "type": "mysql",
      "version": "8.0",
      "server": "prod-db.example.com",
      "port": 3306,
      "username": "app_user",
      "password": "enc:secure_password",
      "database": "myapp_prod",
      "use_ssh_tunnel": false
    }
    }'
    

响应示例:

{
  "code": 0,
  "message": "创建连接成功",
  "data": {
    "id": "conn_123456",
    "group_id": "group_1",
    "name": "MySQL Production DB",
    "description": "生产环境主数据库",
    "kind": "database",
    "db_detail": {
      "type": "mysql",
      "version": "8.0",
      "server": "prod-db.example.com",
      "port": 3306,
      "username": "app_user",
      "database": "myapp_prod",
      "last_connected": null
    },
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z"
  }
}

获取所有数据库连接

参数说明:

  • 无特殊参数,请求体可以为空对象 {}

    curl -X POST http://localhost:8080/api/v1/storage/connections/list \
    -H "Content-Type: application/json" \
    -d '{}'
    

响应示例:

{
  "code": 0,
  "message": "获取所有连接成功",
  "data": [
    {
      "id": "conn_123456",
      "group_id": "group_1",
      "name": "MySQL Production DB",
      "description": "生产环境主数据库",
      "db_detail": {
        "type": "mysql",
        "version": "8.0",
        "server": "prod-db.example.com",
        "port": 3306,
        "username": "app_user",
        "database": "myapp_prod",
        "last_connected": "2024-01-15T09:15:00Z"
      },
      "created_at": "2024-01-15T10:30:00Z",
      "updated_at": "2024-01-15T10:30:00Z"
    },
    {
      "id": "conn_789012",
      "group_id": "group_2",
      "name": "PostgreSQL Development DB",
      "description": "开发环境数据库",
      "db_detail": {
        "type": "postgresql",
        "version": "13.0",
        "server": "dev-db.example.com",
        "port": 5432,
        "username": "dev_user",
        "database": "myapp_dev",
        "last_connected": "2024-01-14T16:30:00Z"
      },
      "created_at": "2024-01-14T08:45:00Z",
      "updated_at": "2024-01-14T08:45:00Z"
    }
  ]
}

获取指定数据库连接

参数说明:

  • id (string, 必需): 数据库连接的唯一标识符

    curl -X POST http://localhost:8080/api/v1/storage/connections/get \
    -H "Content-Type: application/json" \
    -d '{
    "id": "conn_123456"
    }'
    

响应示例:

{
  "code": 0,
  "message": "获取连接成功",
  "data": {
    "id": "conn_123456",
    "group_id": "group_1",
    "name": "MySQL Production DB",
    "description": "生产环境主数据库",
    "db_detail": {
      "type": "mysql",
      "version": "8.0",
      "server": "prod-db.example.com",
      "port": 3306,
      "username": "app_user",
      "database": "myapp_prod",
      "last_connected": "2024-01-15T09:15:00Z"
    },
    "auto_connect": false,
    "color": "#4285F4",
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z"
  }
}

更新数据库连接

参数说明:

  • id (string, 必需): 要更新的数据库连接的唯一标识符
  • name (string, 可选): 新的连接名称
  • description (string, 可选): 新的连接描述
  • server (string, 可选): 新的数据库服务器主机地址
  • password (string, 可选): 新的数据库连接密码(可为明文或加密/编码后的字符串)
  • 其他字段 (可选): 支持部分字段更新,只需要提供要更新的字段

说明: 更新操作支持部分字段更新,只需要提供要更新的字段,未提供的字段将保持原有值。

curl -X POST http://localhost:8080/api/v1/storage/connections/update \
  -H "Content-Type: application/json" \
  -d '{
    "id": "conn_123456",
    "name": "MySQL Production DB (Updated)",
    "description": "生产环境主数据库 - 已更新配置",
    "db_detail": {
      "server": "new-prod-db.example.com",
      "password": "enc:new_secure_password"
    }
  }'

响应示例:

{
  "code": 0,
  "message": "更新连接成功",
  "data": {
    "id": "conn_123456",
    "group_id": "group_1",
    "name": "MySQL Production DB (Updated)",
    "description": "生产环境主数据库 - 已更新配置",
    "db_detail": {
      "type": "mysql",
      "version": "8.0",
      "server": "new-prod-db.example.com",
      "port": 3306,
      "username": "app_user",
      "database": "myapp_prod",
      "last_connected": "2024-01-15T09:15:00Z"
    },
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T11:45:00Z"
  }
}

删除数据库连接

参数说明:

  • id (string, 必需): 要删除的数据库连接的唯一标识符

    curl -X POST http://localhost:8080/api/v1/storage/connections/delete \
    -H "Content-Type: application/json" \
    -d '{
    "id": "conn_123456"
    }'
    

响应示例:

{
  "code": 0,
  "message": "删除连接成功",
  "data": null
}

移动数据库连接

参数说明:

  • id (string, 必需): 要移动的数据库连接的唯一标识符
  • target_group_id (string, 必需): 目标分组ID,要将连接移动到的分组位置

    curl -X POST http://localhost:8080/api/v1/storage/connections/move \
    -H "Content-Type: application/json" \
    -d '{
    "id": "conn_123456",
    "target_group_id": "group_3"
    }'
    

响应示例:

{
  "code": 0,
  "message": "移动连接成功",
  "data": {
    "id": "conn_123456",
    "group_id": "group_3",
    "name": "MySQL Production DB",
    "description": "生产环境主数据库",
    "db_detail": {
      "type": "mysql",
      "version": "8.0",
      "server": "prod-db.example.com",
      "port": 3306,
      "username": "app_user",
      "database": "myapp_prod",
      "last_connected": "2024-01-15T09:15:00Z"
    },
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T12:00:00Z"
  }
}

2. 连接分组管理

创建连接分组

参数说明:

  • parent_id (string, 可选): 父分组ID,如果不提供则创建为根分组
  • parent_name (string, 可选): 父分组名称,用于提供更详细的错误信息和父分组ID一致性验证
  • name (string, 必需): 新分组的名称
  • description (string, 可选): 分组的详细描述
  • icon (string, 可选): 分组图标
  • display_order (int, 可选): 显示顺序,如果未提供或为0,系统会自动计算为同级分组最大显示顺序 + 1

验证逻辑:

  • 如果提供了parent_id,系统会验证该ID是否存在
  • 如果同时提供了parent_idparent_name,系统会验证ID和名称是否匹配
  • 如果父分组不存在或ID与名称不匹配,将返回详细的错误信息
  • display_order 会自动计算,确保新分组显示在同级分组的最后位置

    curl -X POST http://localhost:8080/api/v1/storage/connection_groups/create \
    -H "Content-Type: application/json" \
    -d '{
    "parent_id": "group_root",
    "parent_name": "根分组",
    "name": "生产环境",
    "description": "生产环境数据库连接",
    "icon": "server",
    "display_order": 1
    }'
    

响应示例:

{
  "code": 0,
  "message": "创建分组成功",
  "data": {
    "id": "group_789",
    "parent_id": "group_root",
    "name": "生产环境",
    "description": "生产环境数据库连接",
    "icon": "server",
    "display_order": 1,
    "connections": [],
    "children": [],
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z"
  }
}

错误响应示例:

{
  "code": 3001,
  "message": "父分组不存在",
  "error": "父分组(名称: 开发环境)不存在,ID: group_dev123,错误详情: record not found"
}
{
  "code": 3003,
  "message": "父分组ID和名称不匹配",
  "error": "父分组ID和名称不匹配,ID: group_root,预期名称: 开发环境,实际名称: 根分组"
}

获取连接分组树结构

参数说明:

  • 无特殊参数,请求体可以为空对象 {}

    curl -X POST http://localhost:8080/api/v1/storage/connection_groups/tree \
    -H "Content-Type: application/json" \
    -d '{}'
    

响应示例:

{
  "code": 0,
  "message": "获取分组树结构成功",
  "data": {
    "id": "group_root",
    "parent_id": "",
    "name": "根分组",
    "description": "所有连接的根分组",
    "icon": "database",
    "display_order": 0,
    "connections": [],
    "children": [
      {
        "id": "group_789",
        "parent_id": "group_root",
        "name": "生产环境",
        "description": "生产环境数据库连接",
        "icon": "server",
        "display_order": 1,
        "connections": [
          {
            "id": "conn_123456",
            "name": "MySQL Production DB",
            "db_detail": {
              "type": "mysql",
              "server": "prod-db.example.com"
            }
          }
        ],
        "children": []
      },
      {
        "id": "group_790",
        "parent_id": "group_root",
        "name": "开发环境",
        "description": "开发环境数据库连接",
        "icon": "code",
        "display_order": 2,
        "connections": [
          {
            "id": "conn_789012",
            "name": "PostgreSQL Development DB",
            "db_detail": {
              "type": "postgresql",
              "server": "dev-db.example.com"
            }
          }
        ],
        "children": []
      }
    ]
  }
}

获取指定连接分组

参数说明:

  • id (string, 必需): 要获取的分组的唯一标识符

    curl -X POST http://localhost:8080/api/v1/storage/connection_groups/get \
    -H "Content-Type: application/json" \
    -d '{
    "id": "group_789"
    }'
    

响应示例:

{
  "code": 0,
  "message": "获取分组成功",
  "data": {
    "id": "group_789",
    "parent_id": "group_root",
    "name": "生产环境",
    "description": "生产环境数据库连接",
    "icon": "server",
    "display_order": 1,
      "connections": [
      {
        "id": "conn_123456",
        "name": "MySQL Production DB",
        "db_detail": {
          "type": "mysql",
          "server": "prod-db.example.com",
          "port": 3306,
          "username": "app_user",
          "database": "myapp_prod"
        }
      }
    ],
    "children": [],
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z"
  }
}

更新连接分组

参数说明:

  • id (string, 必需): 要更新的分组的唯一标识符
  • name (string, 可选): 新的分组名称
  • description (string, 可选): 新的分组描述
  • icon (string, 可选): 新的分组图标
  • display_order (int, 可选): 新的显示顺序

    curl -X POST http://localhost:8080/api/v1/storage/connection_groups/update \
    -H "Content-Type: application/json" \
    -d '{
    "id": "group_789",
    "name": "生产环境_V2",
    "description": "生产环境数据库连接 (v2)",
    "icon": "cloud-server"
    }'
    

响应示例:

{
  "code": 0,
  "message": "更新分组成功",
  "data": {
    "id": "group_789",
    "parent_id": "group_root",
    "name": "生产环境_V2",
    "description": "生产环境数据库连接 (v2)",
    "icon": "cloud-server",
    "display_order": 1,
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T11:45:00Z"
  }
}

删除连接分组

参数说明:

  • id (string, 必需): 要删除的分组的唯一标识符
  • cascade_delete_children (boolean, 可选): 是否级联删除子分组,默认为false
  • cascade_delete_connections (boolean, 可选): 是否级联删除分组下的数据库连接,默认为false

注意事项:

  • 根目录保护: 系统根目录(ID: root_default)不能被删除
  • 如果 cascade_delete_children 为 true,会递归删除该分组下的所有子分组
  • 如果 cascade_delete_connections 为 true,会删除该分组下的所有数据库连接
  • 如果两个参数都为 false(默认值),只有在分组为空(无子分组且无连接)时才能删除
  • 删除操作会同时删除关联的SQL脚本文件

    curl -X POST http://localhost:8080/api/v1/storage/connection_groups/delete \
    -H "Content-Type: application/json" \
    -d '{
    "id": "group_789",
    "cascade_delete_children": true,
    "cascade_delete_connections": true
    }'
    

响应示例:

{
  "code": 0,
  "message": "删除分组成功",
  "data": null
}

移动连接分组

参数说明:

  • id (string, 必需): 要移动的分组的唯一标识符
  • target_parent_id (string, 必需): 目标父分组ID,要将分组移动到的父分组位置

    curl -X POST http://localhost:8080/api/v1/storage/connection_groups/move \
    -H "Content-Type: application/json" \
    -d '{
    "id": "group_789",
    "target_parent_id": "group_456"
    }'
    

响应示例:

{
  "code": 0,
  "message": "移动分组成功",
  "data": {
    "id": "group_789",
    "parent_id": "group_456",
    "name": "生产环境",
    "description": "生产环境数据库连接",
    "icon": "server",
    "display_order": 1,
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T12:00:00Z"
  }
}

3. SQL脚本管理

创建SQL脚本

参数说明:

  • connection_id (string, 必需): 关联的数据库连接ID,SQL脚本将与此连接绑定
  • group_id (string, 必需): 脚本所属的分组ID
  • name (string, 必需): SQL脚本的名称
  • description (string, 可选): SQL脚本的详细描述
  • content (string, 可选): SQL脚本的内容,如果不提供则创建空脚本
  • favorite (boolean, 可选): 是否标记为收藏

验证逻辑:

  • 系统会自动验证 connection_id 是否存在于数据库连接表中
  • 系统会自动验证 group_id 是否存在于脚本分组表中
  • 如果 connection_id 不存在,将返回错误码表示"数据库连接不存在"
  • 如果 group_id 不存在,将返回错误码表示"脚本分组不存在"

    curl -X POST http://localhost:8080/api/v1/storage/scripts/create \
    -H "Content-Type: application/json" \
    -d '{
    "connection_id": "conn_123456",
    "group_id": "script_group_1",
    "name": "用户管理查询",
    "description": "用户管理相关SQL脚本",
    "content": "SELECT * FROM users WHERE status = 'active';",
    "favorite": true
    }'
    

响应示例:

{
  "code": 0,
  "message": "创建SQL脚本成功",
  "data": {
    "id": "script_456",
    "connection_id": "conn_123456",
    "group_id": "script_group_1",
    "name": "用户管理查询",
    "description": "用户管理相关SQL脚本",
    "content": "SELECT * FROM users WHERE status = 'active';",
    "favorite": true,
    "last_executed": null,
    "execution_count": 0,
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z"
  }
}

获取SQL脚本

参数说明:

  • id (string, 必需): SQL脚本的唯一标识符

    curl -X POST http://localhost:8080/api/v1/storage/scripts/get \
    -H "Content-Type: application/json" \
    -d '{
    "id": "script_456"
    }'
    

响应示例:

{
  "code": 0,
  "message": "获取SQL脚本成功",
  "data": {
    "id": "script_456",
    "connection_id": "conn_123456",
    "group_id": "script_group_1",
    "name": "用户管理查询",
    "description": "用户管理相关SQL脚本",
    "content": "SELECT * FROM users WHERE status = 'active';",
    "favorite": true,
    "last_executed": "2024-01-15T11:00:00Z",
    "execution_count": 2,
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:35:00Z"
  }
}

更新SQL脚本

参数说明:

  • id (string, 必需): 要更新的SQL脚本的唯一标识符
  • name (string, 可选): 新的脚本名称
  • description (string, 可选): 新的脚本描述
  • content (string, 可选): 新的脚本内容
  • favorite (boolean, 可选): 是否标记为收藏

    curl -X POST http://localhost:8080/api/v1/storage/scripts/update \
    -H "Content-Type: application/json" \
    -d '{
    "id": "script_456",
    "name": "用户管理查询_V2",
    "description": "用户管理相关SQL脚本 (更新版)",
    "content": "SELECT * FROM users WHERE status = 'active';\n\n-- 用户统计\nSELECT COUNT(*) as total_users FROM users;",
    "favorite": true
    }'
    

响应示例:

{
  "code": 0,
  "message": "更新SQL脚本成功",
  "data": {
    "id": "script_456",
    "connection_id": "conn_123456",
    "group_id": "script_group_1",
    "name": "用户管理查询_V2",
    "description": "用户管理相关SQL脚本 (更新版)",
    "content": "SELECT * FROM users WHERE status = 'active';\n\n-- 用户统计\nSELECT COUNT(*) as total_users FROM users;",
    "favorite": true,
    "last_executed": "2024-01-15T11:00:00Z",
    "execution_count": 2,
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:40:00Z"
  }
}

删除SQL脚本

参数说明:

  • id (string, 必需): 要删除的SQL脚本的唯一标识符

    curl -X POST http://localhost:8080/api/v1/storage/scripts/delete \
    -H "Content-Type: application/json" \
    -d '{
    "id": "script_456"
    }'
    

响应示例:

{
  "code": 0,
  "message": "删除SQL脚本成功",
  "data": null
}

获取指定连接的所有SQL脚本

参数说明:

  • connection_id (string, 必需): 数据库连接的唯一标识符,要列出此连接下的所有SQL脚本

    curl -X POST http://localhost:8080/api/v1/storage/scripts/list_by_connection \
    -H "Content-Type: application/json" \
    -d '{
    "connection_id": "conn_123456"
    }'
    

响应示例:

{
  "code": 0,
  "message": "获取SQL脚本列表成功",
  "data": [
    {
      "id": "script_456",
      "connection_id": "conn_123456",
      "group_id": "script_group_1",
      "name": "用户管理查询",
      "description": "用户管理相关SQL脚本",
      "favorite": true,
      "last_executed": "2024-01-15T11:00:00Z",
      "execution_count": 2,
      "created_at": "2024-01-15T10:30:00Z",
      "updated_at": "2024-01-15T10:35:00Z"
    },
    {
      "id": "script_789",
      "connection_id": "conn_123456",
      "group_id": "script_group_1",
      "name": "订单统计",
      "description": "订单数据统计报表",
      "favorite": false,
      "last_executed": "2024-01-15T10:45:00Z",
      "execution_count": 5,
      "created_at": "2024-01-15T09:00:00Z",
      "updated_at": "2024-01-15T09:15:00Z"
    }
  ]
}

更新SQL脚本执行统计

参数说明:

  • id (string, 必需): 要更新统计的SQL脚本的唯一标识符

    curl -X POST http://localhost:8080/api/v1/storage/scripts/update_stats \
    -H "Content-Type: application/json" \
    -d '{
    "id": "script_456"
    }'
    

响应示例:

{
  "code": 0,
  "message": "更新SQL脚本执行统计成功",
  "data": {
    "id": "script_456",
    "last_executed": "2024-01-15T12:30:00Z",
    "execution_count": 3
  }
}

4. 脚本分组管理

创建脚本分组

参数说明:

  • parent_id (string, 可选): 父分组ID,如果不提供则创建为根分组
  • name (string, 必需): 新分组的名称
  • description (string, 可选): 分组的详细描述

    curl -X POST http://localhost:8080/api/v1/storage/script_groups/create \
    -H "Content-Type: application/json" \
    -d '{
    "parent_id": "script_group_root",
    "name": "报表查询",
    "description": "数据报表相关查询脚本"
    }'
    

响应示例:

{
  "code": 0,
  "message": "创建脚本分组成功",
  "data": {
    "id": "script_group_123",
    "parent_id": "script_group_root",
    "name": "报表查询",
    "description": "数据报表相关查询脚本",
    "scripts": [],
    "children": [],
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z"
  }
}

获取脚本分组树结构

参数说明:

  • 无特殊参数,请求体可以为空对象 {}

    curl -X POST http://localhost:8080/api/v1/storage/script_groups/tree \
    -H "Content-Type: application/json" \
    -d '{}'
    

响应示例:

{
  "code": 0,
  "message": "获取脚本分组树结构成功",
  "data": {
    "id": "script_group_root",
    "parent_id": "",
    "name": "根分组",
    "description": "所有脚本的根分组",
    "scripts": [],
    "children": [
      {
        "id": "script_group_1",
        "parent_id": "script_group_root",
        "name": "用户管理",
        "description": "用户相关查询",
        "scripts": [
          {
            "id": "script_456",
            "name": "用户管理查询",
            "favorite": true
          }
        ],
        "children": []
      },
      {
        "id": "script_group_123",
        "parent_id": "script_group_root",
        "name": "报表查询",
        "description": "数据报表相关查询脚本",
        "scripts": [],
        "children": []
      }
    ]
  }
}

获取指定脚本分组

参数说明:

  • id (string, 必需): 脚本分组的唯一标识符

    curl -X POST http://localhost:8080/api/v1/storage/script_groups/get \
    -H "Content-Type: application/json" \
    -d '{
    "id": "script_group_1"
    }'
    

响应示例:

{
  "code": 0,
  "message": "获取脚本分组成功",
  "data": {
    "id": "script_group_1",
    "parent_id": "script_group_root",
    "name": "用户管理",
    "description": "用户相关查询",
    "scripts": [
      {
        "id": "script_456",
        "name": "用户管理查询",
        "favorite": true
      }
    ],
    "children": [],
    "created_at": "2024-01-15T09:00:00Z",
    "updated_at": "2024-01-15T09:00:00Z"
  }
}

更新脚本分组

参数说明:

  • id (string, 必需): 要更新的脚本分组的唯一标识符
  • name (string, 可选): 新的分组名称
  • description (string, 可选): 新的分组描述

    curl -X POST http://localhost:8080/api/v1/storage/script_groups/update \
    -H "Content-Type: application/json" \
    -d '{
    "id": "script_group_1",
    "name": "用户管理查询",
    "description": "用户相关查询和分析"
    }'
    

响应示例:

{
  "code": 0,
  "message": "更新脚本分组成功",
  "data": {
    "id": "script_group_1",
    "parent_id": "script_group_root",
    "name": "用户管理查询",
    "description": "用户相关查询和分析",
    "created_at": "2024-01-15T09:00:00Z",
    "updated_at": "2024-01-15T11:30:00Z"
  }
}

删除脚本分组

参数说明:

  • id (string, 必需): 要删除的脚本分组的唯一标识符
  • cascade_delete_children (boolean, 可选): 是否级联删除子分组,默认为false
  • cascade_delete_scripts (boolean, 可选): 是否级联删除分组下的SQL脚本,默认为false

注意事项:

  • 根目录保护: 系统根目录(ID: root_default)不能被删除
  • 如果 cascade_delete_children 为 true,会递归删除该分组下的所有子分组
  • 如果 cascade_delete_scripts 为 true,会删除该分组下的所有SQL脚本
  • 如果两个参数都为 false(默认值),只有在分组为空(无子分组且无脚本)时才能删除
  • 删除操作会同时删除关联的SQL脚本文件

    curl -X POST http://localhost:8080/api/v1/storage/script_groups/delete \
    -H "Content-Type: application/json" \
    -d '{
    "id": "script_group_1",
    "cascade_delete_children": true,
    "cascade_delete_scripts": true
    }'
    

响应示例:

{
  "code": 0,
  "message": "删除脚本分组成功",
  "data": null
}

移动脚本分组

参数说明:

  • id (string, 必需): 要移动的脚本分组的唯一标识符
  • target_parent_id (string, 必需): 目标父分组ID

    curl -X POST http://localhost:8080/api/v1/storage/script_groups/move \
    -H "Content-Type: application/json" \
    -d '{
    "id": "script_group_1",
    "target_parent_id": "script_group_123"
    }'
    

响应示例:

{
  "code": 0,
  "message": "移动脚本分组成功",
  "data": {
    "id": "script_group_1",
    "parent_id": "script_group_123",
    "name": "用户管理查询",
    "description": "用户相关查询和分析",
    "created_at": "2024-01-15T09:00:00Z",
    "updated_at": "2024-01-15T12:00:00Z"
  }
}

错误响应示例

{
  "code": 2003,
  "message": "连接不存在",
  "error": "connection with id 'conn_123' not found"
}
{
  "code": 1001,
  "message": "参数错误",
  "error": "group_id is required"
}

错误码说明

  • 1001: 参数错误
  • 1002: 资源未找到
  • 2001: 连接池已满
  • 2002: 连接池已关闭
  • 2003: 连接不存在
  • 2004: 连接已存在
  • 3001: 分组不存在(创建连接或分组时如果指定的父分组ID不存在会返回此错误)
  • 3002: 分组已存在
  • 3003: 父分组ID和名称不匹配(创建分组时如果指定的父分组ID和名称不匹配会返回此错误)
  • 4001: SQL脚本不存在
  • 4002: SQL脚本已存在

数据结构说明

字段说明

  • display_order: 整数类型,用于控制显示顺序。创建时如果未提供或为0,系统会自动计算合适的值,确保新资源显示在同级资源的最后位置。

DBConnectionResponse

{
  "id": "string",
  "group_id": "string",
  "name": "string",
  "description": "string",
  "db_detail": {
    "type": "mysql|postgresql|oracle|sqlserver",
    "version": "string",
    "server": "string",
    "port": "integer",
    "username": "string",
    "database": "string",
    "connection_string": "string",
    "use_ssh_tunnel": "boolean",
    "last_connected": "datetime"
  },
  "color": "string",
  "auto_connect": "boolean",
  "display_order": "integer",
  "scripts": ["ScriptResponse"],
  "created_at": "datetime",
  "updated_at": "datetime"
}

ConnectionGroupResponse

{
  "id": "string",
  "parent_id": "string",
  "name": "string",
  "description": "string",
  "icon": "string",
  "display_order": "integer",
  "connections": ["DBConnectionResponse"],
  "children": ["ConnectionGroupResponse"],
  "created_at": "datetime",
  "updated_at": "datetime"
}

ScriptResponse

{
  "id": "string",
  "connection_id": "string",
  "group_id": "string",
  "name": "string",
  "description": "string",
  "content": "string",
  "favorite": "boolean",
  "last_executed": "datetime",
  "execution_count": "integer",
  "created_at": "datetime",
  "updated_at": "datetime"
}

ScriptGroupResponse

{
  "id": "string",
  "parent_id": "string",
  "name": "string",
  "description": "string",
  "scripts": ["ScriptResponse"],
  "children": ["ScriptGroupResponse"],
  "created_at": "datetime",
  "updated_at": "datetime"
}

注意事项

  1. 密码字段在响应中会被隐藏或加密
  2. 删除操作会级联删除相关资源,请谨慎使用
  3. 支持分组的树状层次结构,便于组织和管理
  4. 所有时间字段使用ISO 8601格式
  5. 所有API都使用POST方法,即使是获取数据操作
  6. display_order 字段支持自动计算,创建资源时如果未提供该字段或值为0,系统会自动分配合适的显示顺序