feat: 初始化考培练系统项目

- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
111
2026-01-24 19:33:28 +08:00
commit 998211c483
1197 changed files with 228429 additions and 0 deletions

View File

@@ -0,0 +1,568 @@
openapi: 3.1.0
info:
title: KaoPeiLian SQL Executor API
description: |
SQL 执行器 API专门为 Dify 平台集成设计,支持对考陪练系统数据库执行查询和写入操作。
## 主要功能
- 执行 SQL 查询和写入操作
- 支持参数化查询防止 SQL 注入
- 获取数据库表列表和表结构
- SQL 语句验证
## 安全说明
所有接口都需要 JWT Bearer Token 认证。请先通过登录接口获取访问令牌。
version: 1.0.0
contact:
name: KaoPeiLian Tech Support
email: support@kaopeilian.com
servers:
- url: http://120.79.247.16:8000/api/v1
description: 考陪练系统服务器
- url: http://localhost:8000/api/v1
description: 本地开发服务器
- url: http://aiedu.ireborn.com.cn/api/v1
description: 域名访问
security:
- bearerAuth: []
paths:
/auth/login:
post:
tags:
- 认证
summary: 用户登录
description: 获取访问令牌,用于后续 API 调用
security: [] # 登录接口不需要认证
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LoginRequest'
examples:
admin:
summary: 管理员登录
value:
username: admin
password: admin123
responses:
'200':
description: 登录成功
content:
application/json:
schema:
$ref: '#/components/schemas/LoginResponse'
'401':
description: 用户名或密码错误
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/sql/execute-simple:
post:
tags:
- SQL执行器-简化认证
summary: 执行 SQL 语句(简化认证版)
description: |
执行查询或写入 SQL 语句,使用简化的认证方式。
**认证方式(二选一)**
1. API Key: X-API-Key: dify-2025-kaopeilian
2. 长期 Token: Authorization: Bearer permanent-token-for-dify-2025
**查询操作**: SELECT, SHOW, DESCRIBE
**写入操作**: INSERT, UPDATE, DELETE, CREATE, ALTER, DROP
支持参数化查询,使用 `:param_name` 格式定义参数。
security:
- apiKey: []
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SqlExecuteRequest'
examples:
simpleQuery:
summary: 简单查询
value:
sql: "SELECT id, username, role FROM users LIMIT 5"
parameterizedQuery:
summary: 参数化查询
value:
sql: "SELECT * FROM courses WHERE category = :category AND status = :status"
params:
category: "护肤"
status: "active"
insertData:
summary: 插入数据
value:
sql: "INSERT INTO knowledge_points (title, content, course_id) VALUES (:title, :content, :course_id)"
params:
title: "面部护理基础"
content: "面部护理的基本步骤..."
course_id: 1
responses:
'200':
description: SQL 执行成功
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/QueryResponse'
- $ref: '#/components/schemas/ExecuteResponse'
'401':
description: 未认证或认证失败
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: SQL 执行错误
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/sql/execute:
post:
tags:
- SQL执行器
summary: 执行 SQL 语句(标准认证版)
description: |
执行查询或写入 SQL 语句。
**查询操作**: SELECT, SHOW, DESCRIBE
**写入操作**: INSERT, UPDATE, DELETE, CREATE, ALTER, DROP
支持参数化查询,使用 `:param_name` 格式定义参数。
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SqlExecuteRequest'
examples:
simpleQuery:
summary: 简单查询
value:
sql: "SELECT id, username, role FROM users LIMIT 5"
parameterizedQuery:
summary: 参数化查询
value:
sql: "SELECT * FROM courses WHERE category = :category AND status = :status"
params:
category: "护肤"
status: "active"
insertData:
summary: 插入数据
value:
sql: "INSERT INTO knowledge_points (title, content, course_id) VALUES (:title, :content, :course_id)"
params:
title: "面部护理基础"
content: "面部护理的基本步骤..."
course_id: 1
responses:
'200':
description: SQL 执行成功
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/QueryResponse'
- $ref: '#/components/schemas/ExecuteResponse'
examples:
queryResult:
summary: 查询结果
value:
code: 200
message: "SQL 执行成功"
data:
type: "query"
columns: ["id", "username", "role"]
rows:
- id: 1
username: "admin"
role: "admin"
- id: 2
username: "user1"
role: "trainee"
row_count: 2
executeResult:
summary: 写入结果
value:
code: 200
message: "SQL 执行成功"
data:
type: "execute"
affected_rows: 1
success: true
'400':
description: 请求参数错误
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证或认证失败
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: SQL 执行错误
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/sql/validate:
post:
tags:
- SQL执行器
summary: 验证 SQL 语法
description: 验证 SQL 语句的语法正确性,不执行实际操作
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SqlValidateRequest'
responses:
'200':
description: 验证完成
content:
application/json:
schema:
$ref: '#/components/schemas/ValidateResponse'
/sql/tables:
get:
tags:
- SQL执行器
summary: 获取表列表
description: 获取数据库中所有表的列表
responses:
'200':
description: 成功获取表列表
content:
application/json:
schema:
$ref: '#/components/schemas/TablesResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/sql/table/{table_name}/schema:
get:
tags:
- SQL执行器
summary: 获取表结构
description: 获取指定表的结构信息,包括字段名、类型、约束等
parameters:
- name: table_name
in: path
required: true
description: 表名
schema:
type: string
pattern: '^[a-zA-Z_][a-zA-Z0-9_]*$'
example: users
responses:
'200':
description: 成功获取表结构
content:
application/json:
schema:
$ref: '#/components/schemas/TableSchemaResponse'
'400':
description: 无效的表名
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: 未认证
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: |
使用登录接口返回的 access_token。
格式: Bearer {access_token}
apiKey:
type: apiKey
in: header
name: X-API-Key
description: |
API Key 认证,适用于内部服务调用。
示例: X-API-Key: dify-2025-kaopeilian
schemas:
LoginRequest:
type: object
required:
- username
- password
properties:
username:
type: string
description: 用户名
example: admin
password:
type: string
format: password
description: 密码
example: admin123
LoginResponse:
type: object
properties:
code:
type: integer
example: 200
message:
type: string
example: 登录成功
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
username:
type: string
example: admin
role:
type: string
example: admin
token:
type: object
properties:
access_token:
type: string
description: JWT 访问令牌
example: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...
token_type:
type: string
example: bearer
expires_in:
type: integer
description: 过期时间(秒)
example: 1800
SqlExecuteRequest:
type: object
required:
- sql
properties:
sql:
type: string
description: 要执行的 SQL 语句
example: "SELECT * FROM users WHERE role = :role"
params:
type: object
description: SQL 参数字典,键为参数名,值为参数值
additionalProperties: true
example:
role: admin
SqlValidateRequest:
type: object
required:
- sql
properties:
sql:
type: string
description: 要验证的 SQL 语句
example: "SELECT * FROM users"
QueryResponse:
type: object
properties:
code:
type: integer
example: 200
message:
type: string
example: SQL 执行成功
data:
type: object
properties:
type:
type: string
enum: [query]
example: query
columns:
type: array
items:
type: string
description: 列名数组
example: ["id", "username", "role"]
rows:
type: array
items:
type: object
additionalProperties: true
description: 查询结果行
row_count:
type: integer
description: 返回的行数
example: 5
ExecuteResponse:
type: object
properties:
code:
type: integer
example: 200
message:
type: string
example: SQL 执行成功
data:
type: object
properties:
type:
type: string
enum: [execute]
example: execute
affected_rows:
type: integer
description: 影响的行数
example: 1
success:
type: boolean
example: true
ValidateResponse:
type: object
properties:
code:
type: integer
example: 200
message:
type: string
example: SQL 验证完成
data:
type: object
properties:
valid:
type: boolean
description: SQL 是否有效
example: true
warnings:
type: array
items:
type: string
description: 警告信息列表
example: ["包含危险操作: DROP"]
sql_type:
type: string
description: SQL 类型
example: SELECT
TablesResponse:
type: object
properties:
code:
type: integer
example: 200
message:
type: string
example: 获取表列表成功
data:
type: object
properties:
tables:
type: array
items:
type: string
description: 表名列表
example: ["users", "courses", "exams"]
count:
type: integer
description: 表的数量
example: 20
TableSchemaResponse:
type: object
properties:
code:
type: integer
example: 200
message:
type: string
example: 获取表结构成功
data:
type: object
properties:
table_name:
type: string
example: users
columns:
type: array
items:
type: object
properties:
field:
type: string
description: 字段名
example: id
type:
type: string
description: 字段类型
example: int(11)
null:
type: string
enum: ["YES", "NO"]
description: 是否可为空
example: NO
key:
type: string
description: 键类型PRI, UNI, MUL
example: PRI
default:
type: string
nullable: true
description: 默认值
example: null
extra:
type: string
description: 额外信息
example: auto_increment
column_count:
type: integer
description: 列的数量
example: 10
ErrorResponse:
type: object
properties:
detail:
type: string
description: 错误详情
example: SQL 执行失败: You have an error in your SQL syntax
tags:
- name: 认证
description: 用户认证相关接口
- name: SQL执行器
description: SQL 执行和管理相关接口