# dao/teache_dao.py # 本文件封装对老师表的所有数据库操作(增、删、改、查) from fastapi import HTTPException from sqlalchemy.orm import Session from model.teacher import Teacher from scheme.teachers import TeacherCreate, TeacherUpdate class TeacherDAO: # 多条件查询老师列表 @staticmethod def get_list(db: Session, teacher_name=None, is_headteacher=None, page=1, size=10): query = db.query(Teacher).filter(Teacher.flag == 1) if teacher_name: query = query.filter(Teacher.teacher_name.like(f"%{teacher_name}%")) if is_headteacher: query = query.filter(Teacher.is_headteacher == is_headteacher) total = query.count() items = (query.order_by(Teacher.teacher_id).offset((page - 1) * size).limit(size).all()) return total, items # 按老师编号查单个老师 @staticmethod def get_by_id(db: Session, teacher_id: int): teacher = db.query(Teacher).filter(Teacher.teacher_id == teacher_id, Teacher.flag == 1).first() if not teacher: raise HTTPException(status_code=404, detail=f"老师 {teacher_id} 不存在") return teacher # 新增老师 @staticmethod def create(db: Session, data: TeacherCreate): teacher = Teacher(**data.model_dump()) teacher.flag = 1 db.add(teacher) db.commit() db.refresh(teacher) return teacher # 更新老师信息 @staticmethod def update(db: Session, teacher_id: int, data: TeacherUpdate): update_data = data.model_dump(exclude_unset=True) db.query(Teacher) \ .filter(Teacher.teacher_id == teacher_id) \ .update(update_data) db.commit() return TeacherDAO.get_by_id(db, teacher_id) # 逻辑删除老师 @staticmethod def delete(db: Session, teacher_id: int): teacher = TeacherDAO.get_by_id(db, teacher_id) teacher.flag = 0 db.commit() db.refresh(teacher) return teacher