""" Pydantic schemas for matches. This module defines request and response schemas for match-related operations. """ from datetime import datetime from typing import Optional from pydantic import BaseModel, Field, ConfigDict class MatchBase(BaseModel): """Base schema for match data.""" home_team: str = Field(..., min_length=1, max_length=255, description="Name of the home team") away_team: str = Field(..., min_length=1, max_length=255, description="Name of the away team") date: datetime = Field(..., description="Match date and time") league: str = Field(..., min_length=1, max_length=255, description="League name") status: str = Field(..., min_length=1, max_length=50, description="Match status") class MatchCreate(MatchBase): """Schema for creating a new match.""" pass class MatchUpdate(BaseModel): """Schema for updating a match.""" home_team: Optional[str] = Field(None, min_length=1, max_length=255) away_team: Optional[str] = Field(None, min_length=1, max_length=255) date: Optional[datetime] = None league: Optional[str] = Field(None, min_length=1, max_length=255) status: Optional[str] = Field(None, min_length=1, max_length=50) class MatchResponse(MatchBase): """Schema for match response.""" id: int = Field(..., description="Primary key") model_config = ConfigDict(from_attributes=True) class MatchListResponse(BaseModel): """Schema for a list of matches.""" data: list[MatchResponse] count: int = Field(..., description="Total number of matches") meta: dict = Field(default_factory=dict, description="Additional metadata") class MatchStatsResponse(BaseModel): """Schema for match statistics.""" total_matches: int = Field(..., description="Total number of matches") matches_by_league: dict = Field(..., description="Breakdown by league") matches_by_status: dict = Field(..., description="Breakdown by status") upcoming_matches: int = Field(..., description="Number of upcoming matches") completed_matches: int = Field(..., description="Number of completed matches")