"""视频分享相关 schemas.""" from __future__ import annotations from datetime import datetime from typing import List, Optional from pydantic import BaseModel, Field class CreateShareRequest(BaseModel): """创建分享请求.""" password: Optional[str] = Field( None, description="访问密码(可选,不设置则无需密码)", min_length=0, max_length=50, ) expires_at: Optional[datetime] = Field( None, description="过期时间(可选,不设置则永久有效)", ) class UpdateShareRequest(BaseModel): """更新分享配置请求.""" password: Optional[str] = Field( None, description="新密码(传空字符串清除密码,不传则不修改)", max_length=50, ) expires_at: Optional[datetime] = Field( None, description="新的过期时间(不传则不修改)", ) class VerifySharePasswordRequest(BaseModel): """验证分享密码请求.""" password: str = Field(..., description="访问密码") class ShareResponse(BaseModel): """分享记录响应.""" id: str video_id: str share_token: str has_password: bool = False expires_at: Optional[datetime] = None view_count: int = 0 download_count: int = 0 is_active: bool = True created_at: Optional[datetime] = None updated_at: Optional[datetime] = None class ShareListResponse(BaseModel): """分享列表响应.""" items: List[ShareResponse] total: int = 0 skip: int = 0 limit: int = 20 class ShareAccessResponse(BaseModel): """分享访问成功响应(含视频信息).""" share: ShareResponse video_name: str video_duration: float = 0.0 video_size: int = 0 thumbnail_url: Optional[str] = None download_url: Optional[str] = None password_verified: bool = True class ShareMetaResponse(BaseModel): """分享元信息响应(访问前获取,用于判断是否需要密码)。""" share_token: str has_password: bool = False is_expired: bool = False is_active: bool = True video_name: str = "" video_duration: float = 0.0 thumbnail_url: Optional[str] = None created_at: Optional[datetime] = None