Files
2026-04-20 15:53:02 +08:00

73 lines
2.5 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 datetime import datetime
from typing import List, Optional
from pydantic import BaseModel, ConfigDict, Field
# AI辅助生成:deepseek-v3-22026年3月20日
# ==========================================
# 推送时间表 (UserDeliverySchedule)
# ==========================================
class DeliveryScheduleCreate(BaseModel):
"""新增推送时间请求体,时间格式 HH:MM"""
delivery_time: str = Field(..., pattern=r"^\d{2}:\d{2}$", description="每天推送的时间,格式 HH:MM")
is_active: bool = Field(default=True, description="是否启用此时段")
class DeliveryScheduleUpdate(BaseModel):
"""更新推送时间请求体"""
delivery_time: Optional[str] = Field(None, pattern=r"^\d{2}:\d{2}$")
is_active: Optional[bool] = None
class DeliveryScheduleResponse(BaseModel):
"""推送时间响应体"""
id: int
user_id: int
delivery_time: str
is_active: bool
created_at: datetime
model_config = ConfigDict(from_attributes=True)
# ==========================================
# 推送渠道端点 (UserPushEndpoint)
# ==========================================
class PushEndpointCreate(BaseModel):
"""新增推送渠道请求体"""
channel_type: str = Field(..., max_length=50, description="渠道类型,如 EMAIL / WECHAT_BOT / TELEGRAM")
channel_account: str = Field(..., max_length=255, description="具体接收账号(邮箱地址/Webhook等)")
is_active: bool = Field(default=True, description="是否启用")
priority_level: int = Field(default=1, ge=1, le=10, description="优先级,1最高")
class PushEndpointUpdate(BaseModel):
"""更新推送渠道请求体"""
channel_account: Optional[str] = Field(None, max_length=255)
is_active: Optional[bool] = None
priority_level: Optional[int] = Field(None, ge=1, le=10)
class PushEndpointResponse(BaseModel):
"""推送渠道响应体"""
id: int
user_id: int
channel_type: str
channel_account: str
is_active: bool
priority_level: int
created_at: datetime
updated_at: datetime
model_config = ConfigDict(from_attributes=True)
# ==========================================
# 推送设置聚合响应(一次性返回全部推送配置)
# ==========================================
class UserDeliveryConfigResponse(BaseModel):
"""用户的完整推送配置(时间表 + 渠道列表)"""
schedules: List[DeliveryScheduleResponse] = Field(default_factory=list)
endpoints: List[PushEndpointResponse] = Field(default_factory=list)