kanban-app/backend/app/schemas/card.py

117 lines
3.8 KiB
Python

"""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": "<p>Task description</p>",
}
}
)
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": "<p>Task description</p>",
"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": "<p>Task description</p>",
"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)