from datetime import datetime from typing import List, Optional from uuid import UUID from pydantic import BaseModel, Field class PriorityBase(BaseModel): """Base Pydantic model for priorities""" id: int description: str class Config: from_attributes = True class PriorityCreate(PriorityBase): """Pydantic model for creating priorities""" pass class PriorityResponse(PriorityBase): """Pydantic model for priority responses""" pass class ChannelURLCreate(BaseModel): """Pydantic model for creating channel URLs""" url: str priority_id: int = Field(default=100, ge=100, le=300) # Default to High, validate range class ChannelURLBase(ChannelURLCreate): """Base Pydantic model for channel URL responses""" id: UUID in_use: bool created_at: datetime updated_at: datetime priority_id: int class Config: from_attributes = True class ChannelURLResponse(ChannelURLBase): """Pydantic model for channel URL responses""" pass class ChannelCreate(BaseModel): """Pydantic model for creating channels""" urls: List[ChannelURLCreate] # List of URL objects with priority name: str group_title: str tvg_id: str tvg_logo: str tvg_name: str class ChannelURLUpdate(BaseModel): """Pydantic model for updating channel URLs""" url: Optional[str] = None in_use: Optional[bool] = None priority_id: Optional[int] = Field(default=None, ge=100, le=300) class ChannelUpdate(BaseModel): """Pydantic model for updating channels (all fields optional)""" name: Optional[str] = Field(None, min_length=1) group_title: Optional[str] = Field(None, min_length=1) tvg_id: Optional[str] = Field(None, min_length=1) tvg_logo: Optional[str] = None tvg_name: Optional[str] = Field(None, min_length=1) class ChannelResponse(BaseModel): """Pydantic model for channel responses""" id: UUID name: str group_title: str tvg_id: str tvg_logo: str tvg_name: str urls: List[ChannelURLResponse] # List of URL objects without channel_id created_at: datetime updated_at: datetime class Config: from_attributes = True