Files
effekt-interface/app/api/model/skillModel.py
qiaoxinjiu 420b9e37fa 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
2026-05-18 10:23:07 +08:00

68 lines
4.6 KiB
Python
Raw Permalink 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.
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='创建时间')