feat: 新增文档源和技能管理相关功能
1. 新增文档源管理模块(documentSource) - 控制器:documentSourceController.py - DAO层:documentSourceDao.py - 模型:documentSourceModel.py - 服务层:documentSourceService.py 2. 新增技能管理模块(skill) - 控制器:skillController.py - DAO层:skillDao.py - 模型:skillModel.py - 服务层:skillService.py 3. 新增AI服务(aiService.py) 4. 新增配置文件 - AI配置:config/ai_config.py - 技能配置:config/skills/test-case-generator/ 5. 新增SQL脚本 - 文档权限:add_document_permissions.sql - 模块状态字段:add_module_status_field.sql - 文档源表:create_document_source_table.sql - 技能规则:skills_rules_pgsql.sql
This commit is contained in:
26
app/api/model/documentSourceModel.py
Normal file
26
app/api/model/documentSourceModel.py
Normal file
@@ -0,0 +1,26 @@
|
||||
# encoding: UTF-8
|
||||
from sqlalchemy import BigInteger, Column, Integer, SmallInteger, String, TIMESTAMP, Text, text
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
|
||||
from common.sqlSession import to_dict
|
||||
|
||||
Base = declarative_base()
|
||||
Base.to_dict = to_dict
|
||||
|
||||
|
||||
class DocumentSource(Base):
|
||||
__tablename__ = 'document_source'
|
||||
|
||||
id = Column(BigInteger, primary_key=True, autoincrement=True, comment='主键ID')
|
||||
product_id = Column(BigInteger, nullable=False, comment='产品ID')
|
||||
project_id = Column(BigInteger, nullable=False, comment='项目ID')
|
||||
type = Column(SmallInteger, default=1, comment='类型:1-PDF文件,2-飞书链接')
|
||||
source = Column(String(512), nullable=False, comment='文件路径或飞书链接')
|
||||
content = Column(Text, comment='解析后的文本内容(缓存)')
|
||||
version = Column(Integer, default=1, comment='版本号')
|
||||
status = Column(SmallInteger, default=0, comment='状态:0-待解析,1-已解析,2-已生成用例')
|
||||
ai_model = Column(String(64), comment='使用的AI模型')
|
||||
created_by = Column(BigInteger, comment='创建人ID')
|
||||
is_delete = Column(Integer, default=0, comment='0:未删除;1:已删除')
|
||||
created_time = Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), comment='创建时间')
|
||||
updated_time = Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), server_onupdate=text('CURRENT_TIMESTAMP'), comment='更新时间')
|
||||
67
app/api/model/skillModel.py
Normal file
67
app/api/model/skillModel.py
Normal file
@@ -0,0 +1,67 @@
|
||||
from sqlalchemy import BigInteger, Column, Integer, SmallInteger, String, TIMESTAMP, Text, text
|
||||
from sqlalchemy.dialects.postgresql import JSONB
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
|
||||
from common.sqlSession import to_dict
|
||||
|
||||
Base = declarative_base()
|
||||
Base.to_dict = to_dict
|
||||
|
||||
|
||||
class TestSkill(Base):
|
||||
__tablename__ = 'test_skill'
|
||||
id = Column(BigInteger, primary_key=True, autoincrement=True, comment='id')
|
||||
project_id = Column(BigInteger, nullable=False, comment='项目id')
|
||||
module_id = Column(BigInteger, comment='模块id,空表示项目级通用')
|
||||
name = Column(String(128), nullable=False, comment='Skill名称')
|
||||
code = Column(String(64), nullable=False, comment='Skill编码,项目内唯一')
|
||||
description = Column(Text, comment='Skill描述')
|
||||
trigger_condition = Column(Text, nullable=False, comment='触发条件')
|
||||
reasoning_path = Column(Text, comment='推理路径')
|
||||
output_spec = Column(Text, comment='输出规范')
|
||||
skill_file_path = Column(String(512), comment='Skill文件路径,指向config/skills下生成的SKILL.md')
|
||||
skill_type = Column(SmallInteger, nullable=False, default=1, comment='类型:1通用测试策略 2历史缺陷模式 3边界场景 4接口测试 5UI测试 6性能测试 7安全测试 8数据一致性 9并发幂等 99其他')
|
||||
risk_level = Column(SmallInteger, nullable=False, default=2, comment='风险等级:0高 1中高 2中 3低')
|
||||
tags = Column(JSONB, nullable=False, server_default=text("'[]'::jsonb"), comment='标签数组')
|
||||
status = Column(SmallInteger, nullable=False, default=1, comment='状态:1启用 2停用 3草稿')
|
||||
owner_id = Column(BigInteger, comment='负责人用户id')
|
||||
created_by = Column(BigInteger, comment='创建人用户id')
|
||||
usage_count = Column(Integer, nullable=False, default=0, comment='使用次数')
|
||||
is_delete = Column(Integer, nullable=False, default=0, comment='0未删除 1已删除')
|
||||
created_time = Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), nullable=True, comment='创建时间')
|
||||
updated_time = Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), server_onupdate=text('CURRENT_TIMESTAMP'), nullable=True, comment='修改时间')
|
||||
|
||||
|
||||
class TestBusinessRule(Base):
|
||||
__tablename__ = 'test_business_rule'
|
||||
id = Column(BigInteger, primary_key=True, autoincrement=True, comment='id')
|
||||
project_id = Column(BigInteger, nullable=False, comment='项目id')
|
||||
module_id = Column(BigInteger, comment='模块id,空表示项目级通用')
|
||||
name = Column(String(128), nullable=False, comment='业务规则名称')
|
||||
rule_code = Column(String(64), comment='业务规则编码,项目内唯一')
|
||||
rule_content = Column(Text, nullable=False, comment='业务规则内容')
|
||||
applicable_scene = Column(Text, comment='适用场景')
|
||||
example = Column(Text, comment='示例')
|
||||
rule_file_path = Column(String(512), comment='业务规则文件路径,指向config/rules下生成的RULE.md')
|
||||
priority = Column(SmallInteger, nullable=False, default=2, comment='优先级:0高 1中高 2中 3低')
|
||||
tags = Column(JSONB, nullable=False, server_default=text("'[]'::jsonb"), comment='标签数组')
|
||||
status = Column(SmallInteger, nullable=False, default=1, comment='状态:1启用 2停用 3草稿')
|
||||
owner_id = Column(BigInteger, comment='负责人用户id')
|
||||
created_by = Column(BigInteger, comment='创建人用户id')
|
||||
usage_count = Column(Integer, nullable=False, default=0, comment='使用次数')
|
||||
is_delete = Column(Integer, nullable=False, default=0, comment='0未删除 1已删除')
|
||||
created_time = Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), nullable=True, comment='创建时间')
|
||||
updated_time = Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), server_onupdate=text('CURRENT_TIMESTAMP'), nullable=True, comment='修改时间')
|
||||
|
||||
|
||||
class TestAiGenerationContext(Base):
|
||||
__tablename__ = 'test_ai_generation_context'
|
||||
id = Column(BigInteger, primary_key=True, autoincrement=True, comment='id')
|
||||
generation_id = Column(BigInteger, comment='AI生成任务id,兼容现有生成任务')
|
||||
project_id = Column(BigInteger, nullable=False, comment='项目id')
|
||||
module_id = Column(BigInteger, comment='模块id')
|
||||
source_type = Column(SmallInteger, nullable=False, comment='来源类型:1 Skill 2业务规则')
|
||||
source_id = Column(BigInteger, nullable=False, comment='来源id')
|
||||
source_name = Column(String(128), comment='来源名称快照')
|
||||
match_score = Column(Integer, nullable=False, default=0, comment='匹配分数')
|
||||
created_time = Column(TIMESTAMP, server_default=text('CURRENT_TIMESTAMP'), nullable=True, comment='创建时间')
|
||||
Reference in New Issue
Block a user