Files
1/dao/wl_class_dao.py
T

94 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from sqlalchemy.orm import Session
from model.wl_class_model import Class_
from model.wl_student_model import Student
from fastapi import HTTPException
# 老师模块加入后解除注释
# from model.teacher import WlTeacher
# 1. 新增班级
def create_class(db: Session, class_data: dict):
new_class = Class_(**class_data)
db.add(new_class)
db.commit()
db.refresh(new_class)
return new_class
# 2. 查询班级列表(你的亮点:查出了班主任和授课老师)
def get_classes(db: Session, skip: int = 0, limit: int = 100):
# 先查出所有没被删除的班级
class_list = db.query(Class_).filter(Class_.is_deleted == 0).offset(skip).limit(limit).all()
#下面的部分等导入老师模块后解除注释
# # 循环每个班级,去老师表里找对应的老师
# for c in class_list:
# # 找班主任(role是"班主任"的第一个老师)
# head_teacher = db.query(WlTeacher).filter(
# WlTeacher.class_id == c.class_id,
# WlTeacher.role == "班主任"
# ).first()
#
# # 找授课老师(可能有多个,用逗号拼起来)
# course_teachers = db.query(WlTeacher).filter(
# WlTeacher.class_id == c.class_id,
# WlTeacher.role == "任课"
# ).all()
#
# # 把查到的名字塞给班级对象,方便传给前端
# c.head_teacher_name = head_teacher.t_name if head_teacher else "暂无"
# # 下面这两行是初学者常用的拼接字符串写法
# if course_teachers:
# names = []
# for t in course_teachers:
# names.append(t.t_name)
# c.course_teacher_names = ",".join(names)
# else:
# c.course_teacher_names = "暂无"
return class_list
# 3. 根据ID查班级
def get_class_by_id(db: Session, class_id: int):
return db.query(Class_).filter(Class_.class_id == class_id, Class_.is_deleted == 0).first()
# 4. 修改班级信息
def update_class(db: Session, class_id: int, class_data: dict):
db_class = get_class_by_id(db, class_id)
if not db_class:
return None
# 前端传了什么,就改什么(防止把没传的字段改成空值)
for key, value in class_data.items():
setattr(db_class, key, value)
db.commit()
db.refresh(db_class)
return db_class
# 5. 逻辑删除班级(你的亮点:安全检查)
def delete_class(db: Session, class_id: int):
db_class = get_class_by_id(db, class_id)
if not db_class:
return {"code": 404, "msg": "班级不存在"}
# 检查1:班里还有学生吗?(只要有1个,就不给删)
student = db.query(Student).filter(
Student.class_id == class_id,
Student.is_deleted == 0
).first()
if student:
raise HTTPException(status_code=400, detail="该班级还有学生,不能删除!")
#导入老师模块后解除注释
# 检查2:班里还有老师吗?
# teacher = db.query(WlTeacher).filter(WlTeacher.class_id == class_id).first()
# if teacher:
# return {"code": 400, "msg": "该班级还有老师,不能删除!"}
# 检查通过,开始逻辑删除(贴个已删除标签)
db_class.is_deleted = 1
db.commit()
return {"code": 200, "msg": "班级删除成功"}