# =========================================== # 班级操行分管理系统 - 后端服务 # # 开发者: Canglan # 联系方式: admin@sea-studio.top # 版权归属: Sea Network Technology Studio # 许可证: MIT License # # 版权所有 © Sea Network Technology Studio # =========================================== from typing import Dict, Any, List, Optional from models.subject import SubjectModel from utils.logger import get_logger logger = get_logger(__name__) class SubjectService: """科目服务""" @staticmethod async def get_subjects(is_active: Optional[bool] = None) -> Dict[str, Any]: """获取科目列表""" subjects = await SubjectModel.get_all(is_active=is_active) return { "subjects": subjects, "total": len(subjects) } @staticmethod async def create_subject( subject_name: str, subject_code: Optional[str], sort_order: int = 0 ) -> Dict[str, Any]: """创建科目""" # 检查是否已存在 existing = await SubjectModel.get_by_name(subject_name) if existing: return {"success": False, "message": "科目名称已存在"} subject_id = await SubjectModel.create( subject_name=subject_name, subject_code=subject_code, sort_order=sort_order ) if subject_id: logger.info(f"创建科目: {subject_name}") return {"success": True, "subject_id": subject_id} else: return {"success": False, "message": "创建科目失败"} @staticmethod async def update_subject(subject_id: int, **kwargs) -> Dict[str, Any]: """更新科目""" result = await SubjectModel.update(subject_id, **kwargs) if result: logger.info(f"更新科目: {subject_id}") return {"success": True} else: return {"success": False, "message": "更新科目失败"} @staticmethod async def delete_subject(subject_id: int) -> Dict[str, Any]: """删除科目(真正删除记录)""" # 检查科目是否有关联数据 has_data = await SubjectModel.has_related_data(subject_id) if has_data: return {"success": False, "message": "该科目下已有作业数据,无法删除"} result = await SubjectModel.delete(subject_id) if result: logger.info(f"删除科目: {subject_id}") return {"success": True} else: return {"success": False, "message": "删除科目失败"}