""" Authentication request models. """ from typing import TYPE_CHECKING, Dict, Any, Literal, Optional, TypedDict from pydantic import BaseModel, Field, model_validator, RootModel, ConfigDict from ApiEvents.base_request_model import BaseRequestModel, DictRequestModel if TYPE_CHECKING: from fastapi import Request class TokenObjectBase(BaseModel): """Base model for token objects.""" user_type: str = Field(..., description="Type of user") user_id: str = Field(..., description="User ID") token: str = Field(..., description="Authentication token") permissions: Dict[str, Any] = Field(default_factory=dict, description="User permissions") class LoginData(TypedDict): """Type for login data.""" domain: str access_key: str password: str remember_me: bool class LoginRequestModel(BaseRequestModel[LoginData]): """Request model for login endpoint.""" model_config = ConfigDict( json_schema_extra={ "example": { "domain": "example.com", "access_key": "user@example", "password": "password", "remember_me": False } } ) class LogoutData(TypedDict): """Type for logout data.""" token: str class LogoutRequestModel(BaseRequestModel[LogoutData]): """Request model for logout endpoint.""" model_config = ConfigDict( json_schema_extra={ "example": { "token": "your-token-here" } } ) class RememberData(TypedDict): """Type for remember token data.""" remember_token: str class RememberRequestModel(BaseRequestModel[RememberData]): """Request model for remember token endpoint.""" model_config = ConfigDict( json_schema_extra={ "example": { "remember_token": "your-remember-token-here" } } ) class ForgotData(TypedDict): """Type for forgot password data.""" email: str domain: str class ForgotRequestModel(BaseRequestModel[ForgotData]): """Request model for forgot password endpoint.""" model_config = ConfigDict( json_schema_extra={ "example": { "email": "user@example.com", "domain": "example.com" } } ) class ChangePasswordData(TypedDict): """Type for change password data.""" old_password: str new_password: str class ChangePasswordRequestModel(BaseRequestModel[ChangePasswordData]): """Request model for change password endpoint.""" model_config = ConfigDict( json_schema_extra={ "example": { "old_password": "old-pass", "new_password": "new-pass" } } ) class CreatePasswordData(TypedDict): """Type for create password data.""" token: str password: str class CreatePasswordRequestModel(BaseRequestModel[CreatePasswordData]): """Request model for create password endpoint.""" model_config = ConfigDict( json_schema_extra={ "example": { "token": "password-creation-token", "password": "new-password" } } ) class SelectionDataOccupant(TypedDict): """Type for selection data.""" build_living_space_uu_id: Optional[str] class SelectionDataEmployee(TypedDict): """Type for selection data.""" company_uu_id: Optional[str]