"""Schemas for Analysis module.""" from datetime import date, datetime from typing import List, Optional from enum import Enum from pydantic import BaseModel, Field class AnalysisStatusEnum(str, Enum): DRAFT = "draft" IN_PROGRESS = "in_progress" COMPLETED = "completed" class LegalAnalysisBase(BaseModel): """Base schema for LegalAnalysis.""" title: str = Field(..., max_length=200) case_description: str class LegalAnalysisCreate(LegalAnalysisBase): """Schema for creating a legal analysis.""" legal_basis: Optional[dict] = None class LegalAnalysisUpdate(BaseModel): """Schema for updating a legal analysis.""" title: Optional[str] = Field(None, max_length=200) case_description: Optional[str] = None legal_basis: Optional[dict] = None analysis_content: Optional[str] = None conclusion: Optional[str] = None status: Optional[AnalysisStatusEnum] = None class LegalAnalysisResponse(LegalAnalysisBase): """Schema for legal analysis response.""" id: int user_id: int legal_basis: Optional[dict] = None analysis_content: Optional[str] = None conclusion: Optional[str] = None status: AnalysisStatusEnum created_at: datetime updated_at: datetime class Config: from_attributes = True class CaseBase(BaseModel): """Base schema for Case.""" title: str = Field(..., max_length=200) case_number: Optional[str] = Field(None, max_length=50) court: Optional[str] = Field(None, max_length=100) case_type: Optional[str] = Field(None, max_length=100) judgment_date: Optional[date] = None facts: Optional[str] = None judgment: Optional[str] = None reasoning: Optional[str] = None class CaseCreate(CaseBase): """Schema for creating a case.""" pass class CaseResponse(CaseBase): """Schema for case response.""" id: int created_at: datetime class Config: from_attributes = True class GenerateAnalysisRequest(BaseModel): """Schema for generating analysis with AI.""" case_description: str relevant_laws: Optional[List[str]] = None class GenerateAnalysisResponse(BaseModel): """Schema for generated analysis response.""" analysis_content: str legal_basis: List[str] = [] conclusion: str