# =========================================== # 班级操行分管理系统 - 后端服务 # # 开发者: Canglan # 联系方式: admin@sea-studio.top # 版权归属: Sea Network Technology Studio # 许可证: MIT License # # 版权所有 © Sea Network Technology Studio # =========================================== from fastapi import APIRouter, Request, Query from typing import Optional from middleware.permission import get_current_user, PermissionChecker from services.subject_service import SubjectService from schemas.subject import CreateSubjectRequest, UpdateSubjectRequest from utils.response import success_response, error_response from utils.logger import get_logger router = APIRouter() logger = get_logger(__name__) @router.get("/list") async def get_subjects( request: Request, is_active: Optional[bool] = None ): """ 获取科目列表 """ user = await get_current_user(request) result = await SubjectService.get_subjects(is_active=is_active) return success_response(data=result) @router.post("/create") async def create_subject(request: Request, req: CreateSubjectRequest): """ 创建科目(班主任) """ user = await get_current_user(request) is_teacher = await PermissionChecker.check_is_teacher(user["user_id"]) if not is_teacher: return error_response(message="仅班主任可创建科目", code=403) result = await SubjectService.create_subject( subject_name=req.subject_name, subject_code=req.subject_code, sort_order=req.sort_order ) if result["success"]: return success_response(data=result, message="科目创建成功") else: return error_response(message=result["message"]) @router.put("/update/{subject_id}") async def update_subject( request: Request, subject_id: int, req: UpdateSubjectRequest ): """ 更新科目(班主任) """ user = await get_current_user(request) is_teacher = await PermissionChecker.check_is_teacher(user["user_id"]) if not is_teacher: return error_response(message="仅班主任可更新科目", code=403) result = await SubjectService.update_subject( subject_id=subject_id, **req.dict(exclude_none=True) ) if result["success"]: return success_response(message="科目更新成功") else: return error_response(message=result["message"]) @router.delete("/delete/{subject_id}") async def delete_subject(request: Request, subject_id: int): """ 删除科目(软删除,班主任) """ user = await get_current_user(request) is_teacher = await PermissionChecker.check_is_teacher(user["user_id"]) if not is_teacher: return error_response(message="仅班主任可删除科目", code=403) result = await SubjectService.delete_subject(subject_id) if result["success"]: return success_response(message="科目已禁用") else: return error_response(message=result["message"])