36 lines
1.6 KiB
Python
36 lines
1.6 KiB
Python
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) |