# dao/cls_mgmt_dao.py # 本文件封装对 ClsMgmt 表的所有数据库操作(增、删、改、查) from sqlalchemy.orm import Session from model.cls_mgmt_model import ClsMgmt from scheme.cls_mgmt_scheme import ClsMgmtResponse, ClsMgmtCreate from scheme.users import UserCreate, UserUpdate from typing import Optional, List class ClsMgmtDAO: """用户数据访问对象,所有方法均为静态方法,方便调用""" @staticmethod def get_all(db: Session, skip: int = 0, limit: int = 100): """ 获取所有班级(支持分页) :param db: 数据库会话 :param skip: 偏移量(跳过前 skip 条) :param limit: 最大返回条数 :return: 用户对象列表 """ return db.query(ClsMgmt).offset(skip).limit(limit).all() # -> Optional[ClsMgmt] # @staticmethod # def get_by_id(db: Session, class_id: str) : # """ # 根据主键 ID 获取单个班级 # :return: 用户对象或 None # """ # return db.query(ClsMgmt).filter(ClsMgmt.id == class_id).first() @staticmethod def get_by_id(db: Session, class_id: str) -> Optional[ClsMgmt]: """ 根据主键 ID 获取单个班级 :return: 班级对象或 None """ return db.query(ClsMgmt).filter(ClsMgmt.id == class_id).first() @staticmethod def generate_class_id(cls_start_date) -> str: """ 根据开课时间生成班级id 规则:取年后两位 + 月 + 日,共6位数字 例如:date(2026, 8, 14) → "260814" """ # strftime("%Y%m%d") → "20260814",取后6位 → "260814" return cls_start_date.strftime("%Y%m%d")[-6:] @staticmethod def exists(db: Session, class_id: str) -> bool: """ 根据班级id检查是否已存在 """ existing = db.query(ClsMgmt).filter( ClsMgmt.id == class_id, ClsMgmt.is_deleted == 0 ).first() return existing is not None @staticmethod def create(db: Session, cls_data: "ClsMgmtCreate") -> "ClsMgmt": """ 新增班级 id 根据开课时间自动生成,不再自增 """ class_id = ClsMgmtDAO.generate_class_id(cls_data.cls_start_date) new_cls = ClsMgmt( id=class_id, # 手动赋值班级id cls_start_date=cls_data.cls_start_date, head_tea_id=cls_data.head_tea_id, lecturer_id=cls_data.lecturer_id, is_deleted=0, # 如果 created_at / updated_at 没有默认值,取消注释: # created_at=datetime.now(), # updated_at=datetime.now(), ) db.add(new_cls) db.commit() db.refresh(new_cls) return new_cls @staticmethod def delete_class(db: Session, class_id: str): """ 删除班级(软删除) 不真正删除数据,而是将 is_deleted 标记为 1 """ del_cls = db.query(ClsMgmt).filter( ClsMgmt.id == class_id, ClsMgmt.is_deleted == 0 # 只查未删除的 ).first() if del_cls: del_cls.is_deleted = 1 # ← 关键:软删除,标记为已删除 db.commit() return f"班级{class_id}删除成功" return f"班级{class_id}不存在" @staticmethod def update_cls(db: Session, cls_data, class_id: str): """ 修改班级班主任和授课老师信息 """ update_cls = db.query(ClsMgmt).filter( ClsMgmt.id == class_id, ClsMgmt.is_deleted == 0 # 只查未删除的 ).first() if update_cls: update_cls.head_tea_id=cls_data.head_tea_id update_cls.lecturer_id=cls_data.lecturer_id db.commit() return update_cls return f"班级{class_id}不存在"