# app/models/vector_models.py from pydantic import BaseModel, Field from typing import List, Optional, Dict, Any class VectorBuildRequest(BaseModel): """Vector DB 구축 요청 모델""" region: str = Field( ..., description="지역 (시군구 + 읍면동)", example="서울특별시 강남구 역삼동" ) store_name: str = Field( ..., description="가게명", example="맛있는 한식당" ) force_rebuild: bool = Field( False, description="강제 재구축 여부", example=False ) class VectorBuildResponse(BaseModel): """Vector DB 구축 응답 모델""" success: bool = Field(description="구축 성공 여부") message: str = Field(description="응답 메시지") store_info: Dict[str, Any] = Field(description="대상 가게 정보") similar_stores_count: int = Field(description="동종 업체 수") total_reviews_processed: int = Field(description="처리된 총 리뷰 수") vector_db_status: str = Field(description="Vector DB 상태") execution_time: float = Field(description="실행 시간(초)") food_category: str = Field(description="추출된 음식 카테고리") class ActionRecommendationRequest(BaseModel): """액션 추천 요청 모델""" store_id: str = Field( ..., description="가게 ID", example="12345" ) context: Optional[str] = Field( None, description="추가 컨텍스트", example="매출이 감소하고 있어서 개선 방안이 필요합니다." ) class ActionRecommendationResponse(BaseModel): """액션 추천 응답 모델""" success: bool = Field(description="추천 성공 여부") message: str = Field(description="응답 메시지") claude_input: str = Field(description="Claude API에 전달한 프롬프트") claude_response: Optional[str] = Field(None, description="Claude AI 원본 응답") parsed_response: Optional[Dict[str, Any]] = Field(None, description="파싱된 JSON 응답") # 새로 추가 store_name: str = Field(description="가게명") food_category: str = Field(description="음식 카테고리") similar_stores_count: int = Field(description="분석된 동종 업체 수") execution_time: Optional[float] = Field(None, description="Claude API 응답 시간(초)") json_parse_success: Optional[bool] = Field(None, description="JSON 파싱 성공 여부") # 새로 추가 class VectorStoreDocument(BaseModel): """Vector Store에 저장될 문서 구조""" store_id: str = Field(description="가게 ID") store_name: str = Field(description="가게명") food_category: str = Field(description="음식 카테고리") region: str = Field(description="지역") store_info: Dict[str, Any] = Field(description="가게 정보") reviews: List[Dict[str, Any]] = Field(description="리뷰 목록") review_summary: Dict[str, Any] = Field(description="리뷰 요약 정보") last_updated: str = Field(description="마지막 업데이트 시간") class VectorDBStatus(BaseModel): """Vector DB 상태 정보""" collection_name: str = Field(description="컬렉션명") total_documents: int = Field(description="총 문서 수") total_stores: int = Field(description="총 가게 수") db_path: str = Field(description="DB 경로") last_updated: Optional[str] = Field(None, description="마지막 업데이트 시간") class VectorDBStatusResponse(BaseModel): """Vector DB 상태 조회 응답""" success: bool = Field(description="조회 성공 여부") status: VectorDBStatus = Field(description="DB 상태 정보") message: str = Field(description="응답 메시지")