第二版_完整
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
# 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}不存在"
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user