"""
Common Pydantic Schemas
Shared validation schemas used across WordPress handlers.
"""
from typing import Any
from pydantic import BaseModel, ConfigDict, Field, field_validator
class PaginationParams(BaseModel):
"""Pagination parameters for list endpoints"""
per_page: int = Field(default=10, ge=1, le=100, description="Number of items per page (1-100)")
page: int = Field(default=1, ge=1, description="Page number (starts at 1)")
model_config = ConfigDict(extra="forbid")
class StatusFilter(BaseModel):
"""Status filter for posts/pages/products"""
status: str = Field(default="any", description="Filter by status")
@classmethod
@field_validator("status")
def validate_status(cls, v):
allowed = ["publish", "draft", "pending", "private", "any", "future", "trash"]
if v not in allowed:
raise ValueError(f"Status must be one of: {', '.join(allowed)}")
return v
class ErrorResponse(BaseModel):
"""Standard error response"""
error: bool = Field(default=True)
message: str = Field(..., description="Error message")
code: str | None = Field(None, description="Error code")
details: dict[str, Any] | None = Field(None, description="Additional error details")
class SuccessResponse(BaseModel):
"""Standard success response"""
success: bool = Field(default=True)
message: str = Field(..., description="Success message")
data: dict[str, Any] | None = Field(None, description="Response data")