Files
012-kaopeilian/backend/app/schemas/notification.py
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

103 lines
3.0 KiB
Python
Raw Permalink 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.
"""
站内消息通知相关的数据验证模型
"""
from typing import Optional, List
from datetime import datetime
from enum import Enum
from pydantic import BaseModel, Field, ConfigDict
class NotificationType(str, Enum):
"""通知类型枚举"""
POSITION_ASSIGN = "position_assign" # 岗位分配
COURSE_ASSIGN = "course_assign" # 课程分配
EXAM_REMIND = "exam_remind" # 考试提醒
TASK_ASSIGN = "task_assign" # 任务分配
SYSTEM = "system" # 系统通知
class NotificationBase(BaseModel):
"""
通知基础模型
"""
title: str = Field(..., min_length=1, max_length=200, description="通知标题")
content: Optional[str] = Field(None, description="通知内容")
type: NotificationType = Field(default=NotificationType.SYSTEM, description="通知类型")
related_id: Optional[int] = Field(None, description="关联数据ID")
related_type: Optional[str] = Field(None, max_length=50, description="关联数据类型")
class NotificationCreate(NotificationBase):
"""
创建通知模型
"""
user_id: int = Field(..., description="接收用户ID")
sender_id: Optional[int] = Field(None, description="发送者用户ID")
class NotificationBatchCreate(BaseModel):
"""
批量创建通知模型(发送给多个用户)
"""
user_ids: List[int] = Field(..., min_length=1, description="接收用户ID列表")
title: str = Field(..., min_length=1, max_length=200, description="通知标题")
content: Optional[str] = Field(None, description="通知内容")
type: NotificationType = Field(default=NotificationType.SYSTEM, description="通知类型")
related_id: Optional[int] = Field(None, description="关联数据ID")
related_type: Optional[str] = Field(None, max_length=50, description="关联数据类型")
sender_id: Optional[int] = Field(None, description="发送者用户ID")
class NotificationUpdate(BaseModel):
"""
更新通知模型
"""
is_read: Optional[bool] = Field(None, description="是否已读")
class NotificationInDB(NotificationBase):
"""
数据库中的通知模型
"""
model_config = ConfigDict(from_attributes=True)
id: int
user_id: int
is_read: bool
sender_id: Optional[int] = None
created_at: datetime
updated_at: datetime
class NotificationResponse(NotificationInDB):
"""
通知响应模型(可扩展发送者信息)
"""
sender_name: Optional[str] = Field(None, description="发送者姓名")
class NotificationListResponse(BaseModel):
"""
通知列表响应模型
"""
items: List[NotificationResponse]
total: int
unread_count: int
class NotificationCountResponse(BaseModel):
"""
未读通知数量响应模型
"""
unread_count: int
total: int
class MarkReadRequest(BaseModel):
"""
标记已读请求模型
"""
notification_ids: Optional[List[int]] = Field(None, description="通知ID列表为空则标记全部已读")