from __future__ import annotations from pydantic import BaseModel, ConfigDict, EmailStr, Field class VerificationCreateRequest(BaseModel): model_config = ConfigDict(extra="forbid") username: str = Field(min_length=3, max_length=30) email: EmailStr password: str = Field(min_length=6) redirect_to: str | None = None invite_code: str | None = Field( default=None, min_length=8, max_length=8, pattern=r"^[ABCDEFGHJKMNPQRSTUVWXYZ23456789]{8}$", ) class VerificationResendRequest(BaseModel): email: EmailStr class VerificationVerifyRequest(BaseModel): email: EmailStr token: str = Field(pattern=r"^\d{6}$") class SessionCreateRequest(BaseModel): email: EmailStr password: str = Field(min_length=6) class SessionRefreshRequest(BaseModel): refresh_token: str = Field(min_length=1) class SessionDeleteRequest(BaseModel): refresh_token: str = Field(min_length=1) class AuthUser(BaseModel): id: str email: EmailStr class SessionResponse(BaseModel): access_token: str refresh_token: str expires_in: int token_type: str user: AuthUser class UserByEmailResponse(BaseModel): id: str email: EmailStr created_at: str email_confirmed_at: str | None = None class VerificationCreateResponse(BaseModel): email: EmailStr class PasswordResetRequest(BaseModel): email: EmailStr redirect_to: str | None = None class PasswordResetConfirmRequest(BaseModel): email: EmailStr token: str = Field(pattern=r"^\d{6}$") new_password: str = Field(min_length=6)