|
from dataclasses import dataclass |
|
from typing import Optional |
|
from datetime import datetime |
|
|
|
@dataclass |
|
class Post: |
|
"""Post model representing a social media post.""" |
|
id: str |
|
social_account_id: str |
|
Text_content: str |
|
is_published: bool = True |
|
sched: Optional[str] = None |
|
image_content_url: Optional[str] = None |
|
created_at: Optional[datetime] = None |
|
scheduled_at: Optional[datetime] = None |
|
|
|
@classmethod |
|
def from_dict(cls, data: dict): |
|
"""Create a Post instance from a dictionary.""" |
|
return cls( |
|
id=data['id'], |
|
social_account_id=data['social_account_id'], |
|
Text_content=data['Text_content'], |
|
is_published=data.get('is_published', False), |
|
sched=data.get('sched'), |
|
image_content_url=data.get('image_content_url'), |
|
created_at=datetime.fromisoformat(data['created_at'].replace('Z', '+00:00')) if data.get('created_at') else None, |
|
scheduled_at=datetime.fromisoformat(data['scheduled_at'].replace('Z', '+00:00')) if data.get('scheduled_at') else None |
|
) |
|
|
|
def to_dict(self): |
|
"""Convert Post instance to dictionary.""" |
|
return { |
|
'id': self.id, |
|
'social_account_id': self.social_account_id, |
|
'Text_content': self.Text_content, |
|
'is_published': self.is_published, |
|
'sched': self.sched, |
|
'image_content_url': self.image_content_url, |
|
'created_at': self.created_at.isoformat() if self.created_at else None, |
|
'scheduled_at': self.scheduled_at.isoformat() if self.scheduled_at else None |
|
} |