""" Alpaca-specific price data model — separate from Yahoo Finance PriceData to avoid UniqueConstraint('ticker', 'date') conflicts. """ from sqlalchemy import Column, String, Float, Integer, UniqueConstraint, Index from sqlalchemy.dialects.postgresql import UUID, TIMESTAMP from datetime import datetime, timezone import uuid from app.core.database import Base class AlpacaPriceData(Base): __tablename__ = "alpaca_price_data" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) ticker = Column(String(10), nullable=False, index=True) date = Column(TIMESTAMP(timezone=True), nullable=False) open = Column(Float, nullable=True) high = Column(Float, nullable=True) low = Column(Float, nullable=True) close = Column(Float, nullable=False) volume = Column(Float, nullable=True) vwap = Column(Float, nullable=True) # Volume-weighted average price (Alpaca-specific) trade_count = Column(Integer, nullable=True) # Number of trades (Alpaca-specific) # Metadata data_source = Column(String(50), default='ALPACA') created_at = Column(TIMESTAMP(timezone=True), default=lambda: datetime.now(timezone.utc)) updated_at = Column(TIMESTAMP(timezone=True), default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc)) __table_args__ = ( UniqueConstraint('ticker', 'date', name='uq_alpaca_price_data'), Index('idx_alpaca_price_ticker_date', 'ticker', 'date'), )