68 lines
2.5 KiB
Python
68 lines
2.5 KiB
Python
"""Pydantic schemas for Board model"""
|
|
from datetime import datetime
|
|
from typing import Any, Dict, 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
|