123 lines
3.8 KiB
Python
123 lines
3.8 KiB
Python
# 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 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}不存在"
|
|
|
|
|
|
|
|
|