File size: 2,486 Bytes
6cfe55f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String, Text, UniqueConstraint, func

from app.db.engine import Base


class ArticleItem(Base):
    __tablename__ = "article_items"
    __table_args__ = (
        UniqueConstraint("platform", "article_id", name="uq_article_platform_article_id"),
        UniqueConstraint("platform", "url_hash", name="uq_article_platform_url_hash"),
    )

    id = Column(Integer, primary_key=True, autoincrement=True)
    platform = Column(String, nullable=False)
    article_id = Column(String, nullable=False, default="")
    url = Column(Text, nullable=False)
    url_hash = Column(String, nullable=False)
    title = Column(String, nullable=False)
    author_name = Column(String, nullable=False, default="")
    author_id = Column(String, nullable=False, default="")
    summary_status = Column(String, nullable=False, default="pending")
    task_id = Column(String, nullable=False, default="")
    cover_url = Column(Text, nullable=False, default="")
    published_at = Column(String, nullable=False, default="")
    content_text = Column(Text, nullable=False, default="")
    discovered_at = Column(DateTime, server_default=func.now())
    raw_metadata = Column(Text, nullable=False, default="{}")


class ArticleSubscription(Base):
    __tablename__ = "article_subscriptions"

    id = Column(Integer, primary_key=True, autoincrement=True)
    platform = Column(String, nullable=False)
    type = Column(String, nullable=False)
    query = Column(Text, nullable=False)
    label = Column(String, nullable=False, default="")
    enabled = Column(Boolean, nullable=False, default=True)
    last_refresh_at = Column(DateTime, nullable=True)
    last_error = Column(Text, nullable=False, default="")
    created_at = Column(DateTime, server_default=func.now())
    updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())


class ArticleSubscriptionItem(Base):
    __tablename__ = "article_subscription_items"
    __table_args__ = (
        UniqueConstraint("subscription_id", "article_item_id", name="uq_subscription_article_item"),
    )

    id = Column(Integer, primary_key=True, autoincrement=True)
    subscription_id = Column(Integer, ForeignKey("article_subscriptions.id"), nullable=False)
    article_item_id = Column(Integer, ForeignKey("article_items.id"), nullable=False)
    matched_at = Column(DateTime, server_default=func.now())
    match_reason = Column(Text, nullable=False, default="")