"""Registration token schemas for API validation.""" import uuid from datetime import datetime from pydantic import BaseModel, ConfigDict, Field class RegistrationTokenCreate(BaseModel): """Schema for creating a new registration token.""" description: str | None = Field( default=None, max_length=255, description="Human-readable description for this token", ) max_uses: int = Field( default=1, ge=0, description="Maximum number of times this token can be used (0 = unlimited)", ) expires_in_hours: int | None = Field( default=None, ge=1, le=8760, # Max 1 year description="Number of hours until this token expires (optional)", ) class RegistrationTokenResponse(BaseModel): """Schema for registration token response (without plaintext token).""" model_config = ConfigDict(from_attributes=True) id: uuid.UUID tenant_id: uuid.UUID description: str | None max_uses: int use_count: int expires_at: datetime | None revoked: bool created_at: datetime created_by: str | None class RegistrationTokenCreatedResponse(RegistrationTokenResponse): """Schema for registration token creation response. This is the only time the plaintext token is returned to the client. It must be securely stored as it cannot be retrieved again. """ token: str = Field( ..., description="The plaintext registration token. Store this securely - it cannot be retrieved again.", ) class RegistrationTokenList(BaseModel): """Schema for listing registration tokens.""" tokens: list[RegistrationTokenResponse] total: int