Files
012-kaopeilian/backend/app/schemas/scrm.py
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

129 lines
4.9 KiB
Python
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.
"""
SCRM 系统对接 API Schema 定义
用于 SCRM 系统调用考陪练系统的数据查询接口
"""
from typing import List, Optional
from pydantic import BaseModel, Field
from datetime import datetime
# ==================== 通用响应 ====================
class SCRMBaseResponse(BaseModel):
"""SCRM API 通用响应基类"""
code: int = Field(default=0, description="响应码0=成功")
message: str = Field(default="success", description="响应消息")
# ==================== 1. 获取员工岗位 ====================
class PositionInfo(BaseModel):
"""岗位信息"""
position_id: int = Field(..., description="岗位ID")
position_name: str = Field(..., description="岗位名称")
is_primary: bool = Field(default=True, description="是否主岗位")
joined_at: Optional[str] = Field(None, description="加入时间")
class EmployeePositionData(BaseModel):
"""员工岗位数据"""
employee_id: int = Field(..., description="员工ID")
userid: Optional[str] = Field(None, description="企微员工userid可能为空")
name: str = Field(..., description="员工姓名")
positions: List[PositionInfo] = Field(default=[], description="岗位列表")
class EmployeePositionResponse(SCRMBaseResponse):
"""获取员工岗位响应"""
data: Optional[EmployeePositionData] = None
# ==================== 2. 获取岗位课程 ====================
class CourseInfo(BaseModel):
"""课程信息"""
course_id: int = Field(..., description="课程ID")
course_name: str = Field(..., description="课程名称")
course_type: str = Field(..., description="课程类型required/optional")
priority: int = Field(default=0, description="优先级")
knowledge_point_count: int = Field(default=0, description="知识点数量")
class PositionCoursesData(BaseModel):
"""岗位课程数据"""
position_id: int = Field(..., description="岗位ID")
position_name: str = Field(..., description="岗位名称")
courses: List[CourseInfo] = Field(default=[], description="课程列表")
class PositionCoursesResponse(SCRMBaseResponse):
"""获取岗位课程响应"""
data: Optional[PositionCoursesData] = None
# ==================== 3. 搜索知识点 ====================
class KnowledgePointSearchRequest(BaseModel):
"""搜索知识点请求"""
keywords: List[str] = Field(..., min_length=1, description="搜索关键词列表")
position_id: Optional[int] = Field(None, description="岗位ID用于优先排序")
course_ids: Optional[List[int]] = Field(None, description="限定课程范围")
knowledge_type: Optional[str] = Field(None, description="知识点类型筛选")
limit: int = Field(default=10, ge=1, le=100, description="返回数量")
class KnowledgePointBrief(BaseModel):
"""知识点简要信息"""
knowledge_point_id: int = Field(..., description="知识点ID")
name: str = Field(..., description="知识点名称")
course_id: int = Field(..., description="课程ID")
course_name: str = Field(..., description="课程名称")
type: str = Field(..., description="知识点类型")
relevance_score: float = Field(default=1.0, description="相关度分数")
class KnowledgePointSearchData(BaseModel):
"""知识点搜索结果数据"""
total: int = Field(..., description="匹配总数")
items: List[KnowledgePointBrief] = Field(default=[], description="知识点列表")
class KnowledgePointSearchResponse(SCRMBaseResponse):
"""搜索知识点响应"""
data: Optional[KnowledgePointSearchData] = None
# ==================== 4. 获取知识点详情 ====================
class KnowledgePointDetailData(BaseModel):
"""知识点详情数据"""
knowledge_point_id: int = Field(..., description="知识点ID")
name: str = Field(..., description="知识点名称")
course_id: int = Field(..., description="课程ID")
course_name: str = Field(..., description="课程名称")
type: str = Field(..., description="知识点类型")
content: str = Field(..., description="知识点完整内容description")
material_id: Optional[int] = Field(None, description="关联的课程资料ID")
material_type: Optional[str] = Field(None, description="资料文件类型")
material_url: Optional[str] = Field(None, description="资料文件URL")
topic_relation: Optional[str] = Field(None, description="与主题的关系描述")
source: int = Field(default=0, description="来源0=手动创建1=AI分析生成")
created_at: Optional[str] = Field(None, description="创建时间")
class KnowledgePointDetailResponse(SCRMBaseResponse):
"""获取知识点详情响应"""
data: Optional[KnowledgePointDetailData] = None
# ==================== 错误响应 ====================
class SCRMErrorResponse(SCRMBaseResponse):
"""错误响应"""
code: int = Field(..., description="错误码")
message: str = Field(..., description="错误消息")
data: None = None