from typing import Optional, List from sqlalchemy.orm import Session from ..models.knowledge_point_model import KnowledgePointModel from .base_store import BaseStore class KnowledgePointStore(BaseStore[KnowledgePointModel]): """ 知识点存储类,继承自BaseStore 提供知识点相关的特定操作 """ def __init__(self, db: Session): super().__init__(db, KnowledgePointModel) def get_by_subject(self, subject: str) -> List[KnowledgePointModel]: """根据学科获取知识点列表""" return self.db.query( self.model).filter(self.model.subject == subject).all() def get_by_level(self, level: int) -> List[KnowledgePointModel]: """根据难度等级获取知识点列表""" return self.db.query( self.model).filter(self.model.level == level).all() def get_root_knowledge_points(self) -> List[KnowledgePointModel]: """获取所有根知识点""" return self.db.query( self.model).filter(self.model.parent_id == None).all() def get_child_knowledge_points( self, parent_id: int) -> List[KnowledgePointModel]: """根据父知识点ID获取子知识点列表""" return self.db.query( self.model).filter(self.model.parent_id == parent_id).all() def get_knowledge_point_tree(self) -> List[KnowledgePointModel]: """获取完整的知识点树结构""" # 先获取所有知识点 all_points = self.db.query(self.model).all() # 构建树结构 point_dict = {point.id: point for point in all_points} for point in all_points: if point.parent_id: parent = point_dict.get(point.parent_id) if parent: if not hasattr(parent, 'children'): parent.children = [] parent.children.append(point) # 返回根节点 return [point for point in all_points if not point.parent_id]