78 lines
2.1 KiB
Python
78 lines
2.1 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.orm import Session
|
|
|
|
from dao.wl_teacher_dao import (
|
|
create_teacher,
|
|
get_teacher_id,
|
|
get_teacher_no,
|
|
list_teachers,
|
|
update_teacher,
|
|
delete_teacher_logic,
|
|
generate_teacher_no,
|
|
)
|
|
from database import get_db
|
|
from scheme.wl_teacher_scheme import (
|
|
TeacherCreate,
|
|
TeacherUpdate,
|
|
TeacherResponse,
|
|
)
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
# 查询自动生成的老师工号
|
|
@router.get("/generate-no")
|
|
def get_new_teacher_no():
|
|
"""获取自动生成的教师工号"""
|
|
new_no = generate_teacher_no()
|
|
return {"t_no": new_no}
|
|
|
|
|
|
# 查询教师列表
|
|
@router.get("/", response_model=list[TeacherResponse])
|
|
def query_list(db: Session = Depends(get_db)):
|
|
return list_teachers(db)
|
|
|
|
|
|
# 根据工号查询单个教师
|
|
@router.get("/no/{t_no}", response_model=TeacherResponse)
|
|
def query_one_by_no(t_no: str, db: Session = Depends(get_db)):
|
|
teacher = get_teacher_no(db, t_no)
|
|
if not teacher:
|
|
raise HTTPException(status_code=404, detail="老师不存在")
|
|
return teacher
|
|
|
|
|
|
# 根据 id 查询单个教师
|
|
@router.get("/{t_id}", response_model=TeacherResponse)
|
|
def query_one_by_id(t_id: int, db: Session = Depends(get_db)):
|
|
teacher = get_teacher_id(db, t_id)
|
|
if not teacher:
|
|
raise HTTPException(status_code=404, detail="老师不存在")
|
|
return teacher
|
|
|
|
|
|
# 新增教师
|
|
@router.post("/", response_model=TeacherResponse, status_code=201)
|
|
def add_teacher(body: TeacherCreate, db: Session = Depends(get_db)):
|
|
try:
|
|
return create_teacher(db, body)
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=400, detail=str(e))
|
|
|
|
# 修改教师
|
|
@router.put("/{t_id}", response_model=TeacherResponse)
|
|
def edit_teacher(
|
|
t_id: int,
|
|
body: TeacherUpdate,
|
|
db: Session = Depends(get_db),
|
|
):
|
|
teacher = update_teacher(db, t_id, body)
|
|
if not teacher:
|
|
raise HTTPException(status_code=404, detail="老师不存在")
|
|
return teacher
|
|
|
|
# 逻辑删除教师
|
|
@router.delete("/{t_id}")
|
|
def remove_teacher(t_id: int, db: Session = Depends(get_db)):
|
|
return delete_teacher_logic(db, t_id) |