70 lines
4.0 KiB
Python
70 lines
4.0 KiB
Python
# 导入FastAPI组件
|
|
from fastapi import APIRouter, Depends, HTTPException, Query
|
|
# 导入sqlalchemy会话
|
|
from sqlalchemy.orm import Session
|
|
# 导入数据库会话依赖,自动管理连接开关
|
|
from database import get_db
|
|
# 导入pydantic请求响应模型
|
|
from schema.teacher_schema import TeacherCreate, TeacherUpdate, TeacherOut
|
|
# 导入DAO类
|
|
from dao.teacher_dao import TeacherDao
|
|
|
|
# 创建子路由实例,tags用于swagger文档分组
|
|
router = APIRouter()
|
|
|
|
# =============== 根据ID查询单个老师 GET ===============
|
|
@router.get("/getTeacher/{t_id}", response_model=TeacherOut, summary="根据ID查询老师")
|
|
def get_teacher(
|
|
t_id: int, # 路径参数:老师编号
|
|
db: Session = Depends(get_db) # 依赖注入获取数据库会话
|
|
):
|
|
teacher_info = TeacherDao.get_teacher_by_id(db, t_id) # 调用Dao类查询方法
|
|
if not teacher_info: # 判断老师是否已存在
|
|
raise HTTPException(status_code=404, detail="老师不存在") # 存在主动抛出异常
|
|
return teacher_info
|
|
|
|
|
|
# =============== 分页查询老师列表 GET【改动:直接定义Query参数】 ===============
|
|
@router.get("/search/teacher/limit", response_model=list[TeacherOut], summary="分页查询老师列表") # 范围查询,用查询参数Query()
|
|
def get_teacher_list(
|
|
skip: int = Query(0, ge=0, description="跳过的记录数"), # 跳过0条,校验参数必须大于零
|
|
limit: int = Query(10, ge=1, le=100, description="每页条数"), # 不穿默认10条一页,没页数据范围1-100
|
|
db: Session = Depends(get_db) # 依赖注入获取数据库会话
|
|
):
|
|
return TeacherDao.get_teacher_list(db, skip, limit) #返回分好页的老师列表
|
|
|
|
# =============== 新增老师 POST ================
|
|
@router.post("/add/teacher", response_model=TeacherOut, summary="新增老师") # summary 接口摘要
|
|
def add_teacher(
|
|
teacher: TeacherCreate, # 请求体,自动校验参数
|
|
db: Session = Depends(get_db) # 依赖注入获取数据库会话
|
|
):
|
|
return TeacherDao.create_teacher(db, teacher) # 返回 调用Dao类新增方法
|
|
|
|
|
|
# =============== 更新老师信息 PUT ===============
|
|
@router.put("/update/{t_id}", response_model=TeacherOut, summary="更新老师信息")
|
|
def update_teacher( # 路径参数
|
|
t_id: int, # 传入id
|
|
teacher: TeacherUpdate, # 新增请求体模型校验
|
|
db: Session = Depends(get_db) # 依赖注入获取数据库会话
|
|
):
|
|
teacher_info = TeacherDao.update_teacher(db, t_id, teacher) # 调用Dao方法修改信息
|
|
if not teacher_info: # 判断老师id是否存在
|
|
raise HTTPException(status_code=404, detail="老师不存在") # 不存在主动抛出异常
|
|
return teacher_info # 返回修改后的老师对象
|
|
|
|
|
|
# =============== 逻辑删除老师 DELETE ===============
|
|
@router.delete("/delete/{t_id}", summary="删除老师(逻辑删除)")
|
|
def delete_teacher(
|
|
t_id: int, # 接收 url 路径传过来的 id
|
|
db: Session = Depends(get_db) # 依赖注入获取数据库会话
|
|
):
|
|
result = TeacherDao.delete_teacher(db, t_id) # 调用Dao层逻辑删除方法,状态修改为0=已删除
|
|
if not result: # 判断老师id是否存在
|
|
raise HTTPException(status_code=404, detail="老师不存在") # 不存在主动抛出异常
|
|
return {"message": "删除成功"}
|
|
|
|
|