87 lines
3.1 KiB
Python
87 lines
3.1 KiB
Python
"""
|
|
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"
|
|
)
|