69 lines
2.8 KiB
Python
69 lines
2.8 KiB
Python
# 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="실행 시간(초)")
|
|
|