from datetime import datetime from sqlalchemy import String, Boolean, DateTime, func from sqlalchemy.orm import Mapped, mapped_column, relationship from app.core.database import Base class User(Base): __tablename__ = "users" id: Mapped[int] = mapped_column(primary_key=True, index=True) username: Mapped[str] = mapped_column(String(50), unique=True, index=True, nullable=False) email: Mapped[str] = mapped_column(String(100), unique=True, index=True, nullable=False) hashed_password: Mapped[str] = mapped_column(String(128), nullable=False) is_active: Mapped[bool] = mapped_column(Boolean, default=True) is_admin: Mapped[bool] = mapped_column(Boolean, default=False) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), onupdate=func.now() ) watchlist: Mapped[list["Watchlist"]] = relationship(back_populates="user", lazy="select") alerts: Mapped[list["Alert"]] = relationship(back_populates="user", lazy="select")