from typing import TYPE_CHECKING from sqlalchemy import BIGINT, INTEGER, TEXT from sqlalchemy.orm import Mapped, mapped_column, relationship from db.base import Base if TYPE_CHECKING: from db.models.bills import Bill from db.models.subscriptions import Subscription from db.models.transactions import BalanceTransaction class User(Base): __tablename__ = "users" id: Mapped[int] = mapped_column(BIGINT, nullable=False, unique=True, primary_key=True) referal_id: Mapped[int] = mapped_column(BIGINT, nullable=True) subscription_link: Mapped[str] = mapped_column(TEXT, nullable=True, unique=True) balance: Mapped[int] = mapped_column(INTEGER, nullable=False, default=0) bills: Mapped[list["Bill"]] = relationship( "Bill", back_populates="user", cascade="all, delete", ) subscription: Mapped["Subscription"] = relationship( "Subscription", back_populates="user", cascade="all, delete-orphan" ) balance_transactions: Mapped[list["BalanceTransaction"]] = relationship( "BalanceTransaction", back_populates="user", cascade="all, delete" )