""" Pydantic schemas for WordPress Integration API endpoints. """ from datetime import datetime from typing import Any, List, Optional from pydantic import BaseModel, Field class VerifySessionRequest(BaseModel): """Request schema for verifying WordPress session.""" wp_user_id: str = Field(..., description="WordPress user ID") token: str = Field(..., description="WordPress JWT authentication token") website_id: int = Field(..., description="Website identifier") class WordPressUserResponse(BaseModel): """Response schema for WordPress user data.""" id: int = Field(..., description="Local database user ID") wp_user_id: str = Field(..., description="WordPress user ID") website_id: int = Field(..., description="Website identifier") created_at: datetime = Field(..., description="User creation timestamp") updated_at: datetime = Field(..., description="User last update timestamp") model_config = {"from_attributes": True} class VerifySessionResponse(BaseModel): """Response schema for session verification.""" valid: bool = Field(..., description="Whether the session is valid") user: Optional[WordPressUserResponse] = Field( default=None, description="User data if session is valid" ) error: Optional[str] = Field( default=None, description="Error message if session is invalid" ) wp_user_info: Optional[dict[str, Any]] = Field( default=None, description="WordPress user info from API" ) class SyncUsersRequest(BaseModel): """Request schema for user synchronization (optional body).""" pass class SyncStatsResponse(BaseModel): """Response schema for user synchronization statistics.""" inserted: int = Field(..., description="Number of users inserted") updated: int = Field(..., description="Number of users updated") total: int = Field(..., description="Total users processed") errors: int = Field(default=0, description="Number of errors during sync") class SyncUsersResponse(BaseModel): """Response schema for user synchronization.""" synced: SyncStatsResponse = Field(..., description="Synchronization statistics") website_id: int = Field(..., description="Website identifier") message: str = Field(default="Sync completed", description="Status message") class UserListResponse(BaseModel): """Response schema for paginated user list.""" users: List[WordPressUserResponse] = Field(..., description="List of users") total: int = Field(..., description="Total number of users") page: int = Field(default=1, description="Current page number") page_size: int = Field(default=50, description="Number of users per page") total_pages: int = Field(default=1, description="Total number of pages") class WordPressErrorDetail(BaseModel): """Detail schema for WordPress errors.""" code: str = Field(..., description="Error code") message: str = Field(..., description="Error message") details: Optional[dict[str, Any]] = Field( default=None, description="Additional error details" )