from __future__ import annotations import uuid from sqlalchemy import BigInteger, Boolean, String, Text, UniqueConstraint from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, TimestampMixin class RegisterBonusClaims(TimestampMixin, Base): __tablename__ = "register_bonus_claims" __table_args__ = ( UniqueConstraint("email_hash", name="uq_register_bonus_claims_email_hash"), UniqueConstraint( "grant_event_id", name="uq_register_bonus_claims_grant_event_id" ), ) id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, ) email_hash: Mapped[str] = mapped_column(String(64), nullable=False) user_email_snapshot: Mapped[str] = mapped_column(Text, nullable=False) first_user_id_snapshot: Mapped[uuid.UUID | None] = mapped_column( UUID(as_uuid=True), nullable=True ) balance_snapshot: Mapped[int | None] = mapped_column(BigInteger, nullable=True) grant_event_id: Mapped[str] = mapped_column(String(64), nullable=False) has_purchased_starter_pack: Mapped[bool] = mapped_column( Boolean, nullable=False, default=False )