Files
office_translator/schemas/prompt_schemas.py
2026-03-07 11:42:58 +01:00

80 lines
2.1 KiB
Python

"""
Pydantic schemas for custom prompt endpoints.
Story 3.11: Custom Prompts - Endpoint CRUD
"""
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, Field, field_validator
class PromptCreate(BaseModel):
"""Schema for creating a prompt."""
name: str = Field(..., min_length=1, max_length=255, description="Nom du prompt")
content: str = Field(
..., min_length=1, max_length=10000, description="Contenu du prompt"
)
@field_validator("name", "content")
@classmethod
def strip_whitespace(cls, v: str) -> str:
return v.strip()
class PromptUpdate(BaseModel):
"""Schema for updating a prompt (at least one field required)."""
name: Optional[str] = Field(None, min_length=1, max_length=255)
content: Optional[str] = Field(None, min_length=1, max_length=10000)
@field_validator("name", "content")
@classmethod
def strip_whitespace(cls, v: Optional[str]) -> Optional[str]:
return v.strip() if v else None
def has_updates(self) -> bool:
"""Check if at least one field is provided for update."""
return self.name is not None or self.content is not None
class PromptResponse(BaseModel):
"""Schema for prompt in response."""
id: str
name: str
content: str
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
model_config = {"from_attributes": True}
class PromptListItem(BaseModel):
"""Schema for prompt in list (lighter version)."""
id: str
name: str
content_preview: str = Field(
..., description="First 100 chars of content for list view"
)
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
model_config = {"from_attributes": True}
class PromptListResponse(BaseModel):
"""Schema for prompts list response."""
data: list[PromptListItem] = []
meta: dict = Field(default_factory=dict)
class PromptDetailResponse(BaseModel):
"""Schema for single prompt response."""
data: PromptResponse
meta: dict = Field(default_factory=dict)