117 lines
3.8 KiB
Python
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)
|