from pydantic import BaseModel from typing import Optional, List from datetime import datetime, date from enum import Enum class ActionItemStatus(str, Enum): OPEN = "Open" IN_PROGRESS = "In Progress" DONE = "Done" DELAYED = "Delayed" class UserRole(str, Enum): ADMIN = "admin" USER = "user" # Auth schemas class LoginRequest(BaseModel): email: str password: str class LoginResponse(BaseModel): token: str email: str role: str class TokenPayload(BaseModel): email: str role: str exp: Optional[int] = None # Meeting schemas class ConclusionCreate(BaseModel): content: str class ConclusionResponse(BaseModel): conclusion_id: int meeting_id: int content: str system_code: Optional[str] = None class ActionItemCreate(BaseModel): content: str owner: Optional[str] = "" due_date: Optional[date] = None class ActionItemUpdate(BaseModel): content: Optional[str] = None owner: Optional[str] = None due_date: Optional[date] = None status: Optional[ActionItemStatus] = None class ActionItemResponse(BaseModel): action_id: int meeting_id: int content: str owner: Optional[str] = None due_date: Optional[date] = None status: ActionItemStatus system_code: Optional[str] = None class MeetingCreate(BaseModel): subject: str meeting_time: datetime location: Optional[str] = "" chairperson: Optional[str] = "" recorder: Optional[str] = "" attendees: Optional[str] = "" transcript_blob: Optional[str] = "" conclusions: Optional[List[ConclusionCreate]] = [] actions: Optional[List[ActionItemCreate]] = [] class MeetingUpdate(BaseModel): subject: Optional[str] = None meeting_time: Optional[datetime] = None location: Optional[str] = None chairperson: Optional[str] = None recorder: Optional[str] = None attendees: Optional[str] = None transcript_blob: Optional[str] = None conclusions: Optional[List[ConclusionCreate]] = None actions: Optional[List[ActionItemCreate]] = None class MeetingResponse(BaseModel): meeting_id: int uuid: str subject: str meeting_time: datetime location: Optional[str] = None chairperson: Optional[str] = None recorder: Optional[str] = None attendees: Optional[str] = None transcript_blob: Optional[str] = None created_by: Optional[str] = None created_at: datetime conclusions: List[ConclusionResponse] = [] actions: List[ActionItemResponse] = [] class MeetingListResponse(BaseModel): meeting_id: int uuid: str subject: str meeting_time: datetime chairperson: Optional[str] = None created_at: datetime # AI schemas class SummarizeRequest(BaseModel): transcript: str class SummarizeResponse(BaseModel): conclusions: List[str] action_items: List[ActionItemCreate]