Files
student_manage_system/routers/teachers.py
T

60 lines
2.2 KiB
Python
Raw Normal View History

2026-09-22 08:21:35 +08:00
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from typing import List, Optional
from datetime import datetime
from database import get_db
from models import Teacher
from schemas import TeacherCreate, TeacherUpdate, TeacherBase
router = APIRouter(prefix="/api/teachers", tags=["teachers"])
@router.get("/", response_model=List[TeacherBase])
def list_teachers(db: Session = Depends(get_db), skip: int = 0, limit: int = 100):
teachers = db.query(Teacher).filter(Teacher.is_deleted == False).offset(skip).limit(limit).all()
return teachers
@router.get("/{teacher_id}", response_model=TeacherBase)
def get_teacher(teacher_id: int, db: Session = Depends(get_db)):
teacher = db.query(Teacher).filter(Teacher.id == teacher_id, Teacher.is_deleted == False).first()
if not teacher:
raise HTTPException(status_code=404, detail="教师不存在")
return teacher
@router.post("/", response_model=TeacherBase)
def create_teacher(data: TeacherCreate, db: Session = Depends(get_db)):
existing = db.query(Teacher).filter(Teacher.num == data.num, Teacher.is_deleted == False).first()
if existing:
raise HTTPException(status_code=400, detail="教师编号已存在")
teacher = Teacher(**data.model_dump())
db.add(teacher)
db.commit()
db.refresh(teacher)
return teacher
@router.put("/{teacher_id}", response_model=TeacherBase)
def update_teacher(teacher_id: int, data: TeacherUpdate, db: Session = Depends(get_db)):
teacher = db.query(Teacher).filter(Teacher.id == teacher_id, Teacher.is_deleted == False).first()
if not teacher:
raise HTTPException(status_code=404, detail="教师不存在")
for key, value in data.model_dump(exclude_unset=True).items():
setattr(teacher, key, value)
db.commit()
db.refresh(teacher)
return teacher
@router.delete("/{teacher_id}")
def delete_teacher(teacher_id: int, db: Session = Depends(get_db)):
teacher = db.query(Teacher).filter(Teacher.id == teacher_id, Teacher.is_deleted == False).first()
if not teacher:
raise HTTPException(status_code=404, detail="教师不存在")
teacher.is_deleted = True
teacher.delete_time = datetime.utcnow()
db.commit()
return {"message": "删除成功"}