# app/models/review_models.py from pydantic import BaseModel, Field from typing import List, Optional, Dict, Any class ReviewerStats(BaseModel): """리뷰어 통계 정보""" reviews: Optional[int] = Field(None, description="작성한 리뷰 수") average_rating: Optional[float] = Field(None, description="평균 별점") followers: Optional[int] = Field(None, description="팔로워 수") class ReviewData(BaseModel): """개별 리뷰 데이터""" reviewer_name: str = Field(description="리뷰어 이름") reviewer_level: str = Field(description="리뷰어 레벨") reviewer_stats: ReviewerStats = Field(description="리뷰어 통계") rating: int = Field(description="별점") date: str = Field(description="작성 날짜") content: str = Field(description="리뷰 내용") badges: List[str] = Field(description="태그/배지 목록") likes: int = Field(description="좋아요 수") photo_count: int = Field(description="사진 개수") has_photos: bool = Field(description="사진 포함 여부") class StoreInfo(BaseModel): """가게 정보""" id: str = Field(description="가게 ID") name: str = Field(description="가게명") category: str = Field(description="카테고리") rating: str = Field(description="평균 별점") review_count: str = Field(description="리뷰 수") status: str = Field(description="영업 상태") address: str = Field(description="주소") class DateFilter(BaseModel): """날짜 필터 정보""" cutoff_date: Optional[str] = Field(None, description="기준 날짜") filtered: bool = Field(description="필터 적용 여부") class ReviewAnalysisRequest(BaseModel): """리뷰 분석 요청 모델""" store_id: str = Field( ..., description="카카오맵 가게 ID", example="501745730" ) days_limit: Optional[int] = Field( None, description="며칠 이후의 리뷰만 수집할지 (None이면 모든 날짜)", example=30 ) max_time: int = Field( 300, description="최대 스크롤 시간(초)", example=300 ) class ReviewAnalysisResponse(BaseModel): """리뷰 분석 응답 모델""" success: bool = Field(description="분석 성공 여부") message: str = Field(description="응답 메시지") store_info: Optional[StoreInfo] = Field(None, description="가게 정보") reviews: List[ReviewData] = Field(description="리뷰 목록") analysis_date: str = Field(description="분석 수행 날짜시간") total_reviews: int = Field(description="수집된 총 리뷰 수") analysis_method: str = Field(description="분석 방법") date_filter: DateFilter = Field(description="날짜 필터 정보") execution_time: float = Field(description="실행 시간(초)")