52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
from dataclasses import dataclass, field
|
|
from typing import Optional, List
|
|
|
|
@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
|
|
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_ai" # pending_ai, pending_review, approved, scheduled, published, rejected
|
|
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
|