Files

36 lines
1.5 KiB
Python
Raw Permalink Normal View History

2026-06-11 16:19:07 +08:00
from sqlalchemy import select
from sqlalchemy.orm import Session, selectinload
2026-06-11 16:19:07 +08:00
from app.models.source_case import CaseBase, CaseExamItem
class CaseRepository:
2026-06-04 17:50:22 +08:00
"""病例只读仓储:读取已发布病例、模式扩展数据和固定检查项目。"""
def __init__(self, db: Session) -> None:
self.db = db
def get_active_case(self, case_id: int) -> CaseBase | None:
2026-06-11 16:19:07 +08:00
"""病例读取:读取病例主表及训练所需的扩展表、评分规则和检查项目。"""
stmt = (
select(CaseBase)
.options(
selectinload(CaseBase.traditional_case),
selectinload(CaseBase.teaching_case),
selectinload(CaseBase.scoring_rules),
selectinload(CaseBase.exam_items),
)
.where(CaseBase.id == case_id, CaseBase.status == 1, CaseBase.publish_status == 1)
)
return self.db.scalar(stmt)
def get_exam_items(self, case_id: int) -> list[CaseExamItem]:
"""检查项目:读取当前病例下全部可申请检查检验项目。"""
stmt = select(CaseExamItem).where(CaseExamItem.case_id == case_id).order_by(CaseExamItem.display_order)
return list(self.db.scalars(stmt).all())
def get_exam_item(self, case_id: int, item_code: str) -> CaseExamItem | None:
2026-06-04 17:50:22 +08:00
"""检查结果:按病例和项目编码读取数据库中的固定结果。"""
stmt = select(CaseExamItem).where(CaseExamItem.case_id == case_id, CaseExamItem.item_code == item_code)
return self.db.scalar(stmt)