from sqlalchemy import Column, Integer, String, Float, ForeignKey, Text from sqlalchemy.orm import relationship import enum from app.db.base_class import Base class TransactionType(str, enum.Enum): DEPOSIT = "deposit" WITHDRAWAL = "withdrawal" TRANSFER = "transfer" BOT_PURCHASE = "bot_purchase" BOT_EARNING = "bot_earning" ADMIN_ADJUSTMENT = "admin_adjustment" class Transaction(Base): id = Column(Integer, primary_key=True, index=True) user_id = Column(Integer, ForeignKey("user.id"), nullable=False) wallet_id = Column(Integer, ForeignKey("wallet.id"), nullable=False) deposit_id = Column(Integer, ForeignKey("deposit.id"), nullable=True) withdrawal_id = Column(Integer, ForeignKey("withdrawal.id"), nullable=True) bot_purchase_id = Column(Integer, ForeignKey("botpurchase.id"), nullable=True) transaction_type = Column(String, nullable=False) amount = Column(Float, nullable=False) description = Column(Text, nullable=True) related_transaction_id = Column(Integer, ForeignKey("transaction.id"), nullable=True) # Relationships user = relationship("User", back_populates="transactions") wallet = relationship("Wallet", back_populates="transactions") deposit = relationship("Deposit", back_populates="transaction", uselist=False) withdrawal = relationship("Withdrawal", back_populates="transaction", uselist=False) bot_purchase = relationship("BotPurchase", back_populates="transaction", uselist=False) related_transaction = relationship("Transaction", remote_side=[id], uselist=False)