Files
------/api/teacher_api.py

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": "删除成功"}