from dataclasses import dataclass, field from typing import Optional, List, Dict, Any @dataclass class SourceChannel: id: Optional[int] channel_id: int username: Optional[str] title: Optional[str] is_active: bool = True created_at: Optional[str] = None @dataclass class TargetChannel: id: Optional[int] channel_id: int title: Optional[str] username: Optional[str] post_interval_min: int = 30 personality: str = "" custom_footer: str = "" last_post_time: Optional[str] = None is_active: bool = True created_at: Optional[str] = None @dataclass class Post: id: Optional[int] source_channel_id: int source_message_id: int raw_text: Optional[str] media_path: Optional[str] = None media_type: Optional[str] = None content_hash: Optional[str] = None tags: List[str] = field(default_factory=list) is_duplicate: bool = False duplicate_of_id: Optional[int] = None similarity_reason: Optional[str] = None subject: Optional[str] = None ai_text: Optional[str] = None suggested_target_id: Optional[int] = None target_channel_id: Optional[int] = None status: str = "pending_review" # pending_review, published, rejected published_to: List[Dict[str, Any]] = field(default_factory=list) review_message_id: Optional[int] = None scheduled_at: Optional[str] = None published_at: Optional[str] = None created_at: Optional[str] = None @dataclass class Setting: key: str value: str description: Optional[str] = None