knowledge_point_store.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from typing import Optional, List
  2. from sqlalchemy.orm import Session
  3. from ..models.knowledge_point_model import KnowledgePointModel
  4. from .base_store import BaseStore
  5. class KnowledgePointStore(BaseStore[KnowledgePointModel]):
  6. """
  7. 知识点存储类,继承自BaseStore
  8. 提供知识点相关的特定操作
  9. """
  10. def __init__(self, db: Session):
  11. super().__init__(db, KnowledgePointModel)
  12. def get_by_subject(self, subject: str) -> List[KnowledgePointModel]:
  13. """根据学科获取知识点列表"""
  14. return self.db.query(
  15. self.model).filter(self.model.subject == subject).all()
  16. def get_by_level(self, level: int) -> List[KnowledgePointModel]:
  17. """根据难度等级获取知识点列表"""
  18. return self.db.query(
  19. self.model).filter(self.model.level == level).all()
  20. def get_root_knowledge_points(self) -> List[KnowledgePointModel]:
  21. """获取所有根知识点"""
  22. return self.db.query(
  23. self.model).filter(self.model.parent_id == None).all()
  24. def get_child_knowledge_points(
  25. self, parent_id: int) -> List[KnowledgePointModel]:
  26. """根据父知识点ID获取子知识点列表"""
  27. return self.db.query(
  28. self.model).filter(self.model.parent_id == parent_id).all()
  29. def get_knowledge_point_tree(self) -> List[KnowledgePointModel]:
  30. """获取完整的知识点树结构"""
  31. # 先获取所有知识点
  32. all_points = self.db.query(self.model).all()
  33. # 构建树结构
  34. point_dict = {point.id: point for point in all_points}
  35. for point in all_points:
  36. if point.parent_id:
  37. parent = point_dict.get(point.parent_id)
  38. if parent:
  39. if not hasattr(parent, 'children'):
  40. parent.children = []
  41. parent.children.append(point)
  42. # 返回根节点
  43. return [point for point in all_points if not point.parent_id]