""" 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(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(BaseModel): """Type for selection data.""" build_living_space_uu_id: Optional[str] class SelectionDataEmployee(BaseModel): """Type for selection data.""" company_uu_id: Optional[str]