from dataclasses import dataclass from typing import Optional from datetime import datetime @dataclass class SocialAccount: """Social account model representing a social media account.""" id: str user_id: str social_network: str account_name: str token: Optional[str] = None sub: Optional[str] = None given_name: Optional[str] = None family_name: Optional[str] = None picture: Optional[str] = None created_at: Optional[datetime] = None @classmethod def from_dict(cls, data: dict): """Create a SocialAccount instance from a dictionary.""" return cls( id=data['id'], user_id=data['user_id'], social_network=data['social_network'], account_name=data['account_name'], token=data.get('token'), sub=data.get('sub'), given_name=data.get('given_name'), family_name=data.get('family_name'), picture=data.get('picture'), created_at=datetime.fromisoformat(data['created_at'].replace('Z', '+00:00')) if data.get('created_at') else None ) def to_dict(self): """Convert SocialAccount instance to dictionary.""" return { 'id': self.id, 'user_id': self.user_id, 'social_network': self.social_network, 'account_name': self.account_name, 'token': self.token, 'sub': self.sub, 'given_name': self.given_name, 'family_name': self.family_name, 'picture': self.picture, 'created_at': self.created_at.isoformat() if self.created_at else None }