""" Request Validation Utilities. This module provides validation helpers for request parameters, following FastAPI best practices. """ import uuid from pydantic import BaseModel, Field, field_validator class UUIDParam(BaseModel): """Base model for UUID path parameters with validation.""" uuid: str = Field(..., description="UUID parameter") @field_validator("uuid") @classmethod def validate_uuid(cls, v: str) -> str: """Validate that the string is a valid UUID.""" try: uuid.UUID(v) except ValueError: raise ValueError(f"Invalid UUID format: {v}") return v def validate_uuid(v: str) -> str: """Standalone UUID validator function.""" try: uuid.UUID(v) except ValueError: raise ValueError(f"Invalid UUID format: {v}") return v class SessionIdParam(BaseModel): """Validated session ID parameter.""" session_id: str = Field(..., min_length=36, max_length=36) @field_validator("session_id") @classmethod def validate_session_id(cls, v: str) -> str: """Validate session ID is a valid UUID.""" try: uuid.UUID(v) except ValueError: raise ValueError("Invalid session_id format - must be a valid UUID") return v class ProjectIdParam(BaseModel): """Validated project ID parameter.""" project_id: int = Field(..., gt=0) @field_validator("project_id") @classmethod def validate_project_id(cls, v: int) -> int: """Validate project ID is positive.""" if v <= 0: raise ValueError("project_id must be a positive integer") return v # Re-export validation errors for consistent error handling __all__ = [ "UUIDParam", "SessionIdParam", "ProjectIdParam", "validate_uuid", ]