123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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]
|