"""Transcript Models""" from pydantic import BaseModel, Field from typing import List, Optional, Dict from datetime import datetime class ParticipantMinutes(BaseModel): """참석자별 회의록""" user_id: str = Field(..., description="사용자 ID") user_name: str = Field(..., description="사용자 이름") content: str = Field(..., description="회의록 전체 내용 (MEMO 섹션)") class ConsolidateRequest(BaseModel): """회의록 통합 요약 요청""" meeting_id: str = Field(..., description="회의 ID") participant_minutes: List[ParticipantMinutes] = Field(..., description="참석자별 회의록 목록") agendas: Optional[List[str]] = Field(None, description="안건 목록") duration_minutes: Optional[int] = Field(None, description="회의 시간(분)") class ExtractedTodo(BaseModel): """추출된 Todo (제목만)""" title: str = Field(..., description="Todo 제목") class AgendaSummary(BaseModel): """안건별 요약""" agenda_number: int = Field(..., description="안건 번호") agenda_title: str = Field(..., description="안건 제목") summary_short: str = Field(..., description="AI 생성 짧은 요약 (1줄, 20자 이내)") summary: str = Field(..., description="안건별 회의록 요약 (논의사항+결정사항, 사용자 수정 가능)") pending: List[str] = Field(default_factory=list, description="보류 사항") todos: List[ExtractedTodo] = Field(default_factory=list, description="Todo 목록 (제목만)") class ConsolidateResponse(BaseModel): """회의록 통합 요약 응답""" meeting_id: str = Field(..., description="회의 ID") keywords: List[str] = Field(..., description="주요 키워드") statistics: Dict[str, int] = Field(..., description="통계 정보") decisions: str = Field(..., description="회의 전체 결정사항 (TEXT 형식)") agenda_summaries: List[AgendaSummary] = Field(..., description="안건별 요약") generated_at: datetime = Field(default_factory=datetime.utcnow, description="생성 시각")