Files

115 lines
3.2 KiB
Python
Raw Permalink Normal View History

2026-09-21 17:39:16 +08:00
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