Files
2026-09-21 20:27:33 +08:00

144 lines
4.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from fastapi import APIRouter, Depends, HTTPException, Query, Path
from sqlalchemy.orm import Session
from typing import List
from dao.cls_mgmt_dao import ClsMgmtDAO
from database import get_db
from scheme.cls_mgmt_scheme import ClsMgmtResponse, ClsMgmtCreate
router = APIRouter()
@router.get("/", response_model=List[ClsMgmtResponse])
# @router.get("/",response_model=ClsMgmtResponse)
async def get_classes(
skip: int = Query(0, ge=0, description="跳过的记录数"),
limit: int = Query(100, ge=1, le=200, description="返回的最大记录数"),
db: Session = Depends(get_db) # 依赖注入获得数据库会话
):
"""
获取班级列表,支持分页
"""
classes = ClsMgmtDAO.get_all(db, skip=skip, limit=limit)
return classes # FastAPI 自动根据 response_model 转换为 JSON
# @router.get("/{class_id}", response_model=ClsMgmtResponse)
# @router.get("/{class_id}")
# async def get_class(
# class_id: str = Path(description="班级id:260814"),
# db: Session = Depends(get_db)
# ):
# """
# 根据班级 ID 获取详细信息
# """
# user = ClsMgmtDAO.get_by_id(db, class_id)
# if not user:
# raise HTTPException(status_code=404, detail="班级不存在")
# return user
@router.get("/{class_id}",response_model=ClsMgmtResponse) # ← 加这一行
async def get_class(
class_id: str = Path(description="班级id:260814"),
db: Session = Depends(get_db)
):
"""
根据班级 ID 获取详细信息
"""
cls = ClsMgmtDAO.get_by_id(db, class_id)
if not cls:
raise HTTPException(status_code=404, detail="班级不存在")
return cls # 直接返回 ORM 对象,FastAPI 自动转成 ClsMgmtResponse
# @router.get(
# "/{class_id}",
# response_model="ClsMgmtResponse",
# summary="根据班级id获取详细信息"
# )
# async def get_class(
# class_id: str = Path(description="班级id,例:260814"),
# db: Session = Depends(get_db)
# ):
# cls = ClsMgmtDAO.get_by_id(db, class_id)
# if not cls:
# raise HTTPException(status_code=404, detail="班级不存在")
# return cls
# @router.post("/{class_id}") # ← 加这一行
# async def add_class(
# class_id: str = Path(description="班级id:260814"),
# db: Session = Depends(get_db)
# ):
# """
# 根据班级 ID 获取详细信息
# """
# cls = ClsMgmtDAO.get_by_id(db, class_id)
# if not cls:
# raise HTTPException(status_code=404, detail="班级不存在")
# return cls
@router.post(
"/add_class",
response_model=ClsMgmtResponse
# status_code=201,
# summary="新增班级"
)
async def create_class(
cls_data: ClsMgmtCreate,
db: Session = Depends(get_db)
):
"""
新增班级
- 班级id自动生成:根据开课时间取后6位(如 2026-08-14 → 260814)
- 先根据班级id验证是否已存在
- 已存在 → 返回 400「班级已存在」
- 不存在 → 新增班级
"""
# 第一步:根据开课时间生成班级id
class_id = ClsMgmtDAO.generate_class_id(cls_data.cls_start_date)
# 第二步:根据班级id验证是否已存在
if ClsMgmtDAO.exists(db, class_id):
raise HTTPException(
status_code=400,
detail=f"班级已存在(班级id:{class_id})"
)
# 第三步:不存在则新增
new_cls = ClsMgmtDAO.create(db, cls_data)
return new_cls
@router.delete(
"/del_class/{class_id}",
# response_model=ClsMgmtResponse
# status_code=201,
# summary="新增班级"
)
async def del_class(
class_id: str = Path(description="班级id:260814"),
db: Session = Depends(get_db)
):
"""
删除班级
"""
print(class_id)
del_cls = ClsMgmtDAO.delete_class(db, class_id)
return del_cls
@router.put(
"/update_class/{class_id}",
response_model=ClsMgmtResponse
# status_code=201,
# summary="新增班级"
)
async def update_class(
cls_data: ClsMgmtCreate,
class_id: str = Path(description="班级id:260814"),
db: Session = Depends(get_db)
):
"""
根据班级ID修改班主任和授课老师信息
"""
update_cls = ClsMgmtDAO.update_cls(db, cls_data,class_id)
return update_cls