Files
max_code_test_gitea_2/dao/cls_mgmt_dao.py
T
2026-09-14 11:38:04 +08:00

124 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 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}不存在"