Files
ohm_streaming/app/models/auth.py
T
root 29c7040b20
CI / Test (Python 3.11) (push) Has been cancelled
CI / Test (Python 3.12) (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Type Check (push) Has been cancelled
CI / Summary (push) Has been cancelled
feat: migrate persistence from JSON to SQLModel (Phase 1)
- Integrated SQLModel with SQLite for robust data persistence
- Refactored UserManager and WatchlistManager to use SQL queries
- Migrated models to SQLModel with relationships and primary keys
- Updated test suite with in-memory database isolation
- Removed deprecated JSON storage files
2026-03-24 10:40:36 +00:00

63 lines
1.6 KiB
Python

"""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