""" Instagram Graph API Pydantic 모델 API 응답 데이터를 위한 Pydantic 모델 정의입니다. """ from datetime import datetime from typing import Any, Optional from pydantic import BaseModel, Field class Media(BaseModel): """Instagram 미디어 정보""" id: str media_type: Optional[str] = None media_url: Optional[str] = None thumbnail_url: Optional[str] = None caption: Optional[str] = None timestamp: Optional[datetime] = None permalink: Optional[str] = None like_count: int = 0 comments_count: int = 0 children: Optional[list["Media"]] = None class MediaList(BaseModel): """미디어 목록 응답""" data: list[Media] = Field(default_factory=list) paging: Optional[dict[str, Any]] = None @property def next_cursor(self) -> Optional[str]: """다음 페이지 커서""" if self.paging and "cursors" in self.paging: return self.paging["cursors"].get("after") return None class MediaContainer(BaseModel): """미디어 컨테이너 상태""" id: str status_code: Optional[str] = None status: Optional[str] = None @property def is_finished(self) -> bool: return self.status_code == "FINISHED" @property def is_error(self) -> bool: return self.status_code == "ERROR" @property def is_in_progress(self) -> bool: return self.status_code == "IN_PROGRESS" class APIError(BaseModel): """API 에러 응답""" message: str type: Optional[str] = None code: Optional[int] = None error_subcode: Optional[int] = None fbtrace_id: Optional[str] = None class ErrorResponse(BaseModel): """에러 응답 래퍼""" error: APIError