152 lines
5.4 KiB
Python
152 lines
5.4 KiB
Python
# ===========================================
|
|
# 班级操行分管理系统 - 学期管理路由
|
|
#
|
|
# 开发者: 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.semester_service import SemesterService
|
|
from services.log_service import LogService
|
|
from schemas.semester import CreateSemesterRequest
|
|
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 list_semesters(request: Request):
|
|
"""获取学期列表(仅班主任)"""
|
|
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 SemesterService.list_semesters()
|
|
if result["success"]:
|
|
return success_response(data=result["semesters"])
|
|
else:
|
|
return error_response(message=result["message"])
|
|
|
|
|
|
@router.get("/active")
|
|
async def get_active_semester(request: Request):
|
|
"""获取当前活跃学期"""
|
|
user = await get_current_user(request)
|
|
result = await SemesterService.get_active_semester()
|
|
if result["success"]:
|
|
return success_response(data=result.get("semester"))
|
|
else:
|
|
return error_response(message=result["message"])
|
|
|
|
|
|
@router.post("/create")
|
|
async def create_semester(request: Request, req: CreateSemesterRequest):
|
|
"""创建学期(班主任)"""
|
|
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 SemesterService.create_semester(
|
|
semester_name=req.semester_name,
|
|
start_date=req.start_date,
|
|
end_date=req.end_date,
|
|
operator_id=user["user_id"]
|
|
)
|
|
if result["success"]:
|
|
await LogService.write_operation_log(
|
|
operator_id=user["user_id"], operator_name=user["username"],
|
|
operator_role="班主任", operation_type="create_semester",
|
|
target_type="semester", target_id=result.get("semester_id"),
|
|
details=f"创建学期: {req.semester_name}",
|
|
ip=request.client.host
|
|
)
|
|
return success_response(data=result, message="学期创建成功")
|
|
else:
|
|
return error_response(message=result["message"])
|
|
|
|
|
|
@router.put("/activate/{semester_id}")
|
|
async def activate_semester(request: Request, semester_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 SemesterService.activate_semester(
|
|
semester_id=semester_id,
|
|
operator_id=user["user_id"]
|
|
)
|
|
if result["success"]:
|
|
await LogService.write_operation_log(
|
|
operator_id=user["user_id"], operator_name=user["username"],
|
|
operator_role="班主任", operation_type="activate_semester",
|
|
target_type="semester", target_id=semester_id,
|
|
details=f"激活学期ID: {semester_id}",
|
|
ip=request.client.host
|
|
)
|
|
return success_response(message=result["message"])
|
|
else:
|
|
return error_response(message=result["message"])
|
|
|
|
|
|
@router.post("/archive/{semester_id}")
|
|
async def archive_semester(request: Request, semester_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 SemesterService.archive_semester(
|
|
semester_id=semester_id,
|
|
operator_id=user["user_id"]
|
|
)
|
|
if result["success"]:
|
|
await LogService.write_operation_log(
|
|
operator_id=user["user_id"], operator_name=user["username"],
|
|
operator_role="班主任", operation_type="archive_semester",
|
|
target_type="semester", target_id=semester_id,
|
|
details=f"归档学期ID: {semester_id}",
|
|
ip=request.client.host
|
|
)
|
|
return success_response(message=result["message"])
|
|
else:
|
|
return error_response(message=result["message"])
|
|
|
|
|
|
@router.get("/archive/{semester_id}/records")
|
|
async def get_archive_records(
|
|
request: Request,
|
|
semester_id: int,
|
|
page: int = Query(1, ge=1),
|
|
page_size: int = Query(50, ge=1, le=200)
|
|
):
|
|
"""查看归档数据(仅班主任)"""
|
|
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 SemesterService.get_archive_records(
|
|
semester_id=semester_id,
|
|
page=page,
|
|
page_size=page_size
|
|
)
|
|
if result["success"]:
|
|
return success_response(data=result["data"])
|
|
else:
|
|
return error_response(message=result["message"])
|