"""Authentication models for user management with SQLModel support""" import uuid from pydantic import BaseModel, EmailStr, Field as PydanticField from typing import Optional, List from datetime import datetime from sqlmodel import SQLModel, Field, Relationship class UserBase(SQLModel): """Base schema for user data""" username: str = Field(index=True, unique=True, min_length=3, max_length=50) email: Optional[str] = Field(default=None, index=True) full_name: Optional[str] = None is_active: bool = Field(default=True) class UserTable(UserBase, table=True): """Database table for users""" __tablename__ = "users" id: str = Field( default_factory=lambda: str(uuid.uuid4()), primary_key=True, index=True, nullable=False ) hashed_password: str created_at: datetime = Field(default_factory=datetime.now) last_login: Optional[datetime] = None # Relationships watchlist_items: List["WatchlistItemTable"] = Relationship(back_populates="user") class UserCreate(UserBase): """Schema for user registration""" password: str = PydanticField(..., min_length=6) email: Optional[EmailStr] = None class UserLogin(BaseModel): """Schema for user login""" username: str password: str class User(UserBase): """Schema for user data (API Response)""" id: str created_at: datetime last_login: Optional[datetime] = None class Token(BaseModel): """Schema for authentication token""" access_token: str token_type: str = "bearer" class UserInDB(User): """Schema for user stored in database (with hashed password)""" hashed_password: str