"""Pydantic schemas for Card model""" from datetime import datetime from typing import Any, Dict, List, Optional from pydantic import BaseModel, ConfigDict, Field class CardCreateRequest(BaseModel): """Schema for creating a new card""" model_config = ConfigDict( json_schema_extra={ "example": { "name": "Task 1", "description": "Complete the task", "pos": 65535.0, "due": "2024-12-31T23:59:59", "due_complete": False, "badges": {"votes": 0}, "cover": "https://example.com/cover.jpg", "desc_data": "

Task description

", } } ) name: str = Field(..., min_length=1, max_length=200, description="Card name") description: Optional[str] = Field(None, description="Card description") pos: float = Field(default=65535.0, description="Card position") due: Optional[datetime] = Field(None, description="Card due date") due_complete: bool = Field(default=False, description="Due complete status") badges: Optional[Dict[str, Any]] = Field(None, description="Card badges") cover: Optional[str] = Field(None, description="Cover image URL") desc_data: Optional[str] = Field(None, description="Description data (HTML)") class CardResponse(BaseModel): """Schema for card response""" model_config = ConfigDict( from_attributes=True, json_schema_extra={ "example": { "id": 1, "name": "Task 1", "description": "Complete the task", "closed": False, "pos": 65535.0, "list_id": 1, "board_id": 1, "due": "2024-12-31T23:59:59", "due_complete": False, "badges": {"votes": 0}, "cover": "https://example.com/cover.jpg", "desc_data": "

Task description

", "date_last_activity": "2024-01-15T10:30:00", } }, ) id: int name: str description: Optional[str] = None closed: bool pos: float list_id: int board_id: int due: Optional[datetime] = None due_complete: bool badges: Optional[Dict[str, Any]] = None cover: Optional[str] = None desc_data: Optional[str] = None date_last_activity: Optional[datetime] = None class CardWithDetailsResponse(BaseModel): """Schema for card response with labels, checklists, and comments""" model_config = ConfigDict( from_attributes=True, json_schema_extra={ "example": { "id": 1, "name": "Task 1", "description": "Complete the task", "closed": False, "pos": 65535.0, "list_id": 1, "board_id": 1, "due": "2024-12-31T23:59:59", "due_complete": False, "badges": {"votes": 0}, "cover": "https://example.com/cover.jpg", "desc_data": "

Task description

", "date_last_activity": "2024-01-15T10:30:00", "labels": [], "checklists": [], "comments": [], } }, ) id: int name: str description: Optional[str] = None closed: bool pos: float list_id: int board_id: int due: Optional[datetime] = None due_complete: bool badges: Optional[Dict[str, Any]] = None cover: Optional[str] = None desc_data: Optional[str] = None date_last_activity: Optional[datetime] = None 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)