"""Pydantic schemas for Board model""" from datetime import datetime from typing import Any, Dict, List, Optional from pydantic import BaseModel, ConfigDict, Field class BoardCreateRequest(BaseModel): """Schema for creating a new board""" model_config = ConfigDict( json_schema_extra={ "example": { "name": "Project Alpha", "description": "Main project board", "url": "https://trello.com/b/example", "short_link": "abc123", "short_url": "https://trello.com/c/abc123", "prefs": {"permissionLevel": "private"}, "label_names": {"green": "Done", "yellow": "In Progress"}, "limits": {"lists": {"open": 10}}, } } ) name: str = Field(..., min_length=1, max_length=200, description="Board name") description: Optional[str] = Field(None, description="Board description") url: Optional[str] = Field(None, max_length=500, description="Board URL") short_link: Optional[str] = Field(None, max_length=100, description="Short link") short_url: Optional[str] = Field(None, max_length=500, description="Short URL") prefs: Optional[Dict[str, Any]] = Field(None, description="Board preferences") label_names: Optional[Dict[str, str]] = Field(None, description="Label names") limits: Optional[Dict[str, Any]] = Field(None, description="Board limits") class BoardResponse(BaseModel): """Schema for board response""" model_config = ConfigDict( from_attributes=True, json_schema_extra={ "example": { "id": 1, "name": "Project Alpha", "description": "Main project board", "closed": False, "url": "https://trello.com/b/example", "short_link": "abc123", "short_url": "https://trello.com/c/abc123", "prefs": {"permissionLevel": "private"}, "label_names": {"green": "Done"}, "limits": {"lists": {"open": 10}}, "date_last_activity": "2024-01-15T10:30:00", } }, ) id: int name: str description: Optional[str] = None closed: bool url: Optional[str] = None short_link: Optional[str] = None short_url: Optional[str] = None prefs: Optional[Dict[str, Any]] = None label_names: Optional[Dict[str, str]] = None limits: Optional[Dict[str, Any]] = None date_last_activity: Optional[datetime] = None class BoardWithDetailsResponse(BaseModel): """Schema for board response with lists, cards, and labels""" model_config = ConfigDict( from_attributes=True, json_schema_extra={ "example": { "id": 1, "name": "Project Alpha", "description": "Main project board", "closed": False, "url": "https://trello.com/b/example", "short_link": "abc123", "short_url": "https://trello.com/c/abc123", "prefs": {"permissionLevel": "private"}, "label_names": {"green": "Done"}, "limits": {"lists": {"open": 10}}, "date_last_activity": "2024-01-15T10:30:00", "lists": [], "labels": [], } }, ) id: int name: str description: Optional[str] = None closed: bool url: Optional[str] = None short_link: Optional[str] = None short_url: Optional[str] = None prefs: Optional[Dict[str, Any]] = None label_names: Optional[Dict[str, str]] = None limits: Optional[Dict[str, Any]] = None date_last_activity: Optional[datetime] = None lists: List[Dict[str, Any]] = Field(default_factory=list) labels: List[Dict[str, Any]] = Field(default_factory=list) checklists: List[Dict[str, Any]] = Field(default_factory=list) comments: List[Dict[str, Any]] = Field(default_factory=list)