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