from fastapi import APIRouter, Depends, Query from sqlalchemy.orm import Session from app.core.response import ApiResponse, ok from app.core.user_context import UserContext, get_user_context from app.db.session import get_db from app.schemas.case import ( CaseDeletePreviewResponse, CaseDeleteRequest, CaseDeleteResponse, CaseDetailResponse, CaseListResponse, ) from app.services.case_service import CaseService router = APIRouter() @router.get("", response_model=ApiResponse[CaseListResponse]) def list_cases( _: UserContext = Depends(get_user_context), db: Session = Depends(get_db), department_id: int | None = Query(default=None), training_type: str | None = Query(default=None), mode: str | None = Query(default=None), ): """病例列表:返回当前可用的激活病例,不暴露标准答案。""" return ok(CaseService(db).list_cases(department_id=department_id, training_type=training_type, mode=mode)) @router.get("/{case_id}", response_model=ApiResponse[CaseDetailResponse]) def get_case_detail( case_id: int, _: UserContext = Depends(get_user_context), db: Session = Depends(get_db), ): """病例详情:返回训练入口信息和可申请检查类型。""" return ok(CaseService(db).get_case_detail(case_id)) @router.get("/{case_id}/delete-preview", response_model=ApiResponse[CaseDeletePreviewResponse]) def get_case_delete_preview( case_id: int, _: UserContext = Depends(get_user_context), db: Session = Depends(get_db), ): """病例删除预览:返回删除该病例会影响的训练与病例数据数量。""" return ok(CaseService(db).get_delete_preview(case_id)) @router.delete("/{case_id}", response_model=ApiResponse[CaseDeleteResponse]) def delete_case( case_id: int, payload: CaseDeleteRequest, ctx: UserContext = Depends(get_user_context), db: Session = Depends(get_db), ): """病例删除:确认后级联删除病例、扩展表、评分规则、检查项和关联训练数据。""" return ok(CaseService(db).delete_case(case_id, payload, ctx))