from datetime import datetime from sqlalchemy import ( Column, Integer, String, DateTime, Float, BigInteger, ForeignKey, JSON, Boolean ) from sqlalchemy.orm import relationship from app.db.base_class import Base class Pool(Base): """Liquidity pool model.""" id = Column(Integer, primary_key=True, index=True) dex_id = Column(Integer, ForeignKey("dex.id"), nullable=False) address = Column(String, unique=True, index=True, nullable=False) token_a_address = Column(String, index=True, nullable=False) token_a_symbol = Column(String, nullable=True) token_a_name = Column(String, nullable=True) token_a_decimals = Column(Integer, nullable=True) token_b_address = Column(String, index=True, nullable=False) token_b_symbol = Column(String, nullable=True) token_b_name = Column(String, nullable=True) token_b_decimals = Column(Integer, nullable=True) token_a_reserve = Column(Float, nullable=True) token_b_reserve = Column(Float, nullable=True) last_updated_slot = Column(BigInteger, nullable=True) volume_24h = Column(Float, nullable=True) fees_24h = Column(Float, nullable=True) tvl = Column(Float, nullable=True) # Total Value Locked in USD fee_rate = Column(Float, nullable=True) # Pool fee percentage pool_type = Column(String, nullable=True) # Constant product, stable, etc. is_active = Column(Boolean, default=True, nullable=False) pool_metadata = Column(JSON, nullable=True) # Additional pool-specific data created_at = Column(DateTime, default=datetime.utcnow, nullable=False) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) # Relationships dex = relationship("Dex", back_populates="pools") arbitrage_legs = relationship("ArbitrageLeg", back_populates="pool") def __repr__(self): token_a = self.token_a_symbol or self.token_a_address[:8] token_b = self.token_b_symbol or self.token_b_address[:8] return f""