from sqlalchemy import Column, Integer, String, Date, Float, Text, DateTime, ForeignKey, Index, UniqueConstraint from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.database import Base class MemberTrendScore(Base): __tablename__ = "member_trend_scores" id = Column(Integer, primary_key=True, autoincrement=True) member_id = Column(String, ForeignKey("members.bioguide_id", ondelete="CASCADE"), nullable=False) score_date = Column(Date, nullable=False) newsapi_count = Column(Integer, default=0) gnews_count = Column(Integer, default=0) gtrends_score = Column(Float, default=0.0) composite_score = Column(Float, default=0.0) member = relationship("Member", back_populates="trend_scores") __table_args__ = ( UniqueConstraint("member_id", "score_date", name="uq_member_trend_scores_member_date"), Index("ix_member_trend_scores_member_id", "member_id"), Index("ix_member_trend_scores_score_date", "score_date"), Index("ix_member_trend_scores_composite", "composite_score"), ) class MemberNewsArticle(Base): __tablename__ = "member_news_articles" id = Column(Integer, primary_key=True, autoincrement=True) member_id = Column(String, ForeignKey("members.bioguide_id", ondelete="CASCADE"), nullable=False) source = Column(String(200)) headline = Column(Text) url = Column(String) published_at = Column(DateTime(timezone=True)) relevance_score = Column(Float, default=0.0) created_at = Column(DateTime(timezone=True), server_default=func.now()) member = relationship("Member", back_populates="news_articles") __table_args__ = ( UniqueConstraint("member_id", "url", name="uq_member_news_member_url"), Index("ix_member_news_articles_member_id", "member_id"), Index("ix_member_news_articles_published_at", "published_at"), )