Files
SharedClassManager/backend/schemas/admin.py
2026-05-28 15:38:32 +08:00

111 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ===========================================
# 班级操行分管理系统 - 后端服务
#
# 开发者: Canglan
# 联系方式: admin@sea-studio.top
# 版权归属: Sea Network Technology Studio
# 许可证: MIT License
#
# 版权所有 © Sea Network Technology Studio
# ===========================================
from pydantic import BaseModel, Field
from typing import Optional, List
from datetime import date, datetime
class AddPointsRequest(BaseModel):
"""加减分请求"""
student_ids: List[int] = Field(..., min_length=1, max_length=200, description="学生ID列表")
points_change: int = Field(..., gt=-100, lt=100, description="分数变动")
reason: str = Field(..., min_length=1, max_length=255, description="原因")
related_type: Optional[str] = Field(default='manual', pattern=r'^(manual|homework|attendance)$', description="关联类型: manual/homework/attendance")
class AddPointsResponse(BaseModel):
"""加减分响应"""
success_count: int
fail_count: int
details: List[dict]
class RevokeRequest(BaseModel):
"""撤销请求"""
record_id: int = Field(..., description="记录ID")
class ImportStudentsRequest(BaseModel):
"""导入学生请求"""
students: List[dict] = Field(..., description="学生列表")
class ImportResult(BaseModel):
"""导入结果"""
total: int
success: int
failed: int
errors: List[str]
class AddAdminRequest(BaseModel):
"""添加管理员请求"""
username: str = Field(..., min_length=2, max_length=50, pattern=r'^[a-zA-Z0-9_\u4e00-\u9fa5]+$', description="登录账号")
real_name: str = Field(..., min_length=1, max_length=50, description="真实姓名")
password: Optional[str] = Field(None, min_length=6, max_length=50, description="密码(不填则自动生成)")
role_type: str = Field(..., pattern=r'^(班长|学习委员|考勤委员|劳动委员|志愿委员)$', description="角色类型")
subject_id: Optional[int] = Field(None, gt=0, description="科目ID科代表需要")
class AddAdminResponse(BaseModel):
"""添加管理员响应"""
success: bool
username: str
password: Optional[str] = None
message: str
class AddStudentRequest(BaseModel):
"""新增学生请求"""
student_no: str = Field(..., min_length=1, max_length=20, pattern=r'^[a-zA-Z0-9]+$', description="学号")
name: str = Field(..., min_length=1, max_length=50, description="姓名")
parent_phone: Optional[str] = Field(None, max_length=11, pattern=r'^\d{0,11}$', description="家长手机号")
dormitory_number: Optional[str] = Field(None, max_length=20, description="宿舍号")
class AddAttendanceRequest(BaseModel):
"""添加考勤请求"""
student_id: int = Field(..., gt=0, description="学生ID")
date: date
slot: str = Field(default="morning", pattern=r'^(morning|afternoon|evening)$', description="时段")
status: str = Field(..., pattern=r'^(present|absent|late|leave)$', description="考勤状态")
reason: Optional[str] = Field(None, max_length=255, description="原因")
apply_deduction: bool = True
custom_deduction: Optional[int] = Field(default=None, gt=0, le=20, description="自定义扣分值")
class UpdateAdminRequest(BaseModel):
"""更新管理员请求"""
real_name: str = Field(..., min_length=1, max_length=50, description="真实姓名")
role_type: str = Field(..., pattern=r'^(班长|学习委员|考勤委员|劳动委员|志愿委员)$', description="角色类型")
class DeleteAdminRequest(BaseModel):
"""删除管理员请求"""
user_id: int = Field(..., description="用户ID")
class ResetPasswordRequest(BaseModel):
"""重置密码请求"""
new_password: str = Field(..., min_length=6, max_length=50, description="新密码")
class UpdateStudentRequest(BaseModel):
"""更新学生请求"""
name: Optional[str] = Field(None, min_length=1, max_length=50, description="姓名")
parent_phone: Optional[str] = Field(None, max_length=11, pattern=r'^\d{0,11}$', description="家长手机号")
dormitory_number: Optional[str] = Field(None, max_length=20, description="宿舍号")
class UnlockUserRequest(BaseModel):
"""解除用户登录锁定请求"""
username: str = Field(..., min_length=1, max_length=50, description="用户名")