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

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