115 lines
3.2 KiB
Python
115 lines
3.2 KiB
Python
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 |