Self-hosted US Congress monitoring platform with AI policy briefs, bill/member/topic follows, ntfy + RSS + email notifications, alignment scoring, collections, and draft-letter generator. Authored by: Jack Levy
27 lines
984 B
Python
27 lines
984 B
Python
from sqlalchemy import Column, Integer, String, Text, Float, DateTime, ForeignKey, Index, UniqueConstraint
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.sql import func
|
|
|
|
from app.database import Base
|
|
|
|
|
|
class NewsArticle(Base):
|
|
__tablename__ = "news_articles"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
bill_id = Column(String, ForeignKey("bills.bill_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())
|
|
|
|
bill = relationship("Bill", back_populates="news_articles")
|
|
|
|
__table_args__ = (
|
|
UniqueConstraint("bill_id", "url", name="uq_news_articles_bill_url"),
|
|
Index("ix_news_articles_bill_id", "bill_id"),
|
|
Index("ix_news_articles_published_at", "published_at"),
|
|
)
|