112 lines
4.2 KiB
Python
112 lines
4.2 KiB
Python
# ===========================================
|
||
# 班级操行分管理系统 - 后端服务
|
||
#
|
||
# 开发者: 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="原因")
|
||
|
||
|
||
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-\u9fa]+$', 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 UpdateHomeworkStatusRequest(BaseModel):
|
||
"""更新作业状态请求"""
|
||
submission_id: int = Field(..., gt=0, description="提交记录ID")
|
||
status: str = Field(..., pattern=r'^(submitted|not_submitted|late|excused)$', description="状态")
|
||
comments: Optional[str] = Field(None, max_length=500, description="评语")
|
||
apply_deduction: bool = False
|
||
|
||
|
||
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="家长手机号")
|
||
|
||
|
||
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):
|
||
"""更新管理员请求"""
|
||
user_id: int = Field(..., gt=0, description="用户ID")
|
||
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="家长手机号") |