""" Data models for Sign-in Executor Service """ from pydantic import BaseModel, Field from typing import Optional, Dict, Any, List from datetime import datetime from uuid import UUID class SignInRequest(BaseModel): """Request model for sign-in task execution""" task_id: str = Field(..., description="Unique task identifier") account_id: str = Field(..., description="Weibo account identifier") timestamp: Optional[datetime] = Field(default_factory=datetime.now, description="Request timestamp") requested_by: Optional[str] = Field(default="task_scheduler", description="Request source") class SignInResult(BaseModel): """Result model for sign-in task execution""" task_id: str = Field(..., description="Task identifier") account_id: str = Field(..., description="Account identifier") status: str = Field(..., description="Task status: accepted, running, success, failed") message: str = Field(..., description="Human readable result message") started_at: datetime = Field(..., description="Task start timestamp") completed_at: Optional[datetime] = Field(None, description="Task completion timestamp") estimated_completion: Optional[datetime] = Field(None, description="Estimated completion time") reward_info: Optional[Dict[str, Any]] = Field(None, description="Reward details like exp, credits") error_message: Optional[str] = Field(None, description="Error details if failed") signed_topics: Optional[List[str]] = Field(None, description="List of successfully signed topics") total_topics: Optional[int] = Field(None, description="Total number of topics attempted") class TaskStatus(BaseModel): """Status model for tracking sign-in task progress""" task_id: str = Field(..., description="Task identifier") account_id: str = Field(..., description="Account identifier") status: str = Field(..., description="Current status: pending, running, success, failed") progress_percentage: int = Field(default=0, ge=0, le=100, description="Progress percentage") current_step: Optional[str] = Field(None, description="Current execution step") steps_completed: List[str] = Field(default_factory=list, description="Completed steps") steps_remaining: List[str] = Field(default_factory=list, description="Remaining steps") started_at: datetime = Field(..., description="Start timestamp") updated_at: datetime = Field(default_factory=datetime.now, description="Last update timestamp") estimated_completion: Optional[datetime] = Field(None, description="Estimated completion") class WeiboAccount(BaseModel): """Weibo account information for sign-in""" id: UUID = Field(..., description="Account UUID") user_id: UUID = Field(..., description="Owner user UUID") weibo_user_id: str = Field(..., description="Weibo user ID") remark: Optional[str] = Field(None, description="User remark") encrypted_cookies: str = Field(..., description="Encrypted Weibo cookies") iv: str = Field(..., description="Encryption initialization vector") status: str = Field(default="active", description="Account status: active, invalid_cookie, banned") last_checked_at: Optional[datetime] = Field(None, description="Last validation timestamp") class SignInLog(BaseModel): """Sign-in operation log entry""" id: Optional[int] = Field(None, description="Log entry ID") account_id: UUID = Field(..., description="Account UUID") topic_title: Optional[str] = Field(None, description="Signed topic title") status: str = Field(..., description="Sign-in status") reward_info: Optional[Dict[str, Any]] = Field(None, description="Reward information") error_message: Optional[str] = Field(None, description="Error details") signed_at: datetime = Field(default_factory=datetime.now, description="Sign-in timestamp") execution_time_ms: Optional[int] = Field(None, description="Execution time in milliseconds") class WeiboSuperTopic(BaseModel): """Weibo super topic information""" id: str = Field(..., description="Topic ID") title: str = Field(..., description="Topic title") url: str = Field(..., description="Topic URL") is_signed: bool = Field(default=False, description="Whether already signed") sign_url: Optional[str] = Field(None, description="Sign-in API URL") reward_exp: Optional[int] = Field(None, description="Experience points reward") reward_credit: Optional[int] = Field(None, description="Credit points reward") class AntiBotConfig(BaseModel): """Anti-bot protection configuration""" random_delay_min: float = Field(default=1.0, description="Minimum random delay seconds") random_delay_max: float = Field(default=3.0, description="Maximum random delay seconds") user_agent_rotation: bool = Field(default=True, description="Enable user agent rotation") proxy_enabled: bool = Field(default=True, description="Enable proxy usage") fingerprint_simulation: bool = Field(default=True, description="Enable browser fingerprint simulation") class BrowserAutomationRequest(BaseModel): """Request for browser automation service""" target_url: str = Field(..., description="Target URL to automate") action_type: str = Field(..., description="Action type: signin, extract, click") context_data: Optional[Dict[str, Any]] = Field(None, description="Additional context data") timeout_seconds: int = Field(default=30, description="Operation timeout")