Files
ClassManager/backend/services/subject_service.py
2026-05-29 21:35:27 +08:00

82 lines
2.6 KiB
Python

# ===========================================
# 班级操行分管理系统 - 后端服务
#
# 开发者: 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": "删除科目失败"}