90 lines
5.3 KiB
Python
90 lines
5.3 KiB
Python
|
|
"""
|
||
|
|
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")
|