from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy.orm import Session from typing import Optional from database import get_db # 按你项目实际路径改 from dao.class_dao import ClassDAO from schemas.class_scheme import ( ClassCreate, ClassUpdateBase, ClassHeadTeacherUpdate, ClassTeachersUpdate, ClassDelete, ClassDetail, ClassPageResult, BatchDeleteResult, ) router = APIRouter(prefix="/api/classes", tags=["班级管理"]) @router.post("", response_model=ClassDetail, summary="新增班级") def create_class(req: ClassCreate, db: Session = Depends(get_db)): try: return ClassDAO.create(db, req) except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.get("", response_model=ClassPageResult, summary="分页查询班级列表") def list_classes( page_num: int = Query(1, ge=1), page_size: int = Query(10, ge=1, le=100), class_name: Optional[str] = None, head_teacher_id: Optional[int] = None, db: Session = Depends(get_db), ): total, rows = ClassDAO.list_page( db, page_num, page_size, class_name, head_teacher_id ) return ClassPageResult(total=total, items=rows) @router.put( "/batch-delete", response_model=BatchDeleteResult, summary="批量逻辑删除/恢复班级", ) def batch_delete(req: ClassDelete, db: Session = Depends(get_db)): count = ClassDAO.batch_toggle_delete(db, req) return BatchDeleteResult(affected_count=count) @router.get("/{class_id}", response_model=ClassDetail, summary="查询班级详情") def get_class(class_id: int, db: Session = Depends(get_db)): data = ClassDAO.get_by_id(db, class_id) if not data: raise HTTPException(status_code=404, detail="班级不存在或已删除") return data @router.put( "/{class_id}/base", response_model=ClassDetail, summary="更新班级基础信息", ) def update_class_base( class_id: int, req: ClassUpdateBase, db: Session = Depends(get_db) ): try: data = ClassDAO.update_base(db, class_id, req) except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) if not data: raise HTTPException(status_code=404, detail="班级不存在或已删除") return data @router.put( "/{class_id}/head-teacher", response_model=ClassDetail, summary="调整班主任", ) def update_head_teacher( class_id: int, req: ClassHeadTeacherUpdate, db: Session = Depends(get_db) ): try: data = ClassDAO.update_head_teacher(db, class_id, req) except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) if not data: raise HTTPException(status_code=404, detail="班级不存在或已删除") return data @router.put( "/{class_id}/teachers", response_model=ClassDetail, summary="更新授课老师", ) def update_teachers( class_id: int, req: ClassTeachersUpdate, db: Session = Depends(get_db) ): try: data = ClassDAO.update_teachers(db, class_id, req) except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) if not data: raise HTTPException(status_code=404, detail="班级不存在或已删除") return data