videoNote / backend /app /db /models /trend_subscription.py
zhoujiaangyao
deploy videomemo backend to HF Space
6cfe55f
Raw
History Blame Contribute Delete
2.37 kB
from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String, Text, func
from app.db.engine import Base
class TrendSubscription(Base):
__tablename__ = "trend_subscriptions"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String, nullable=False)
keywords = Column(Text, nullable=False, default="[]") # JSON array of keyword strings
platforms = Column(Text, nullable=False, default='["all"]') # JSON array of platform ids
match_mode = Column(String, nullable=False, default="any") # "any" | "all"
enabled = Column(Boolean, nullable=False, default=True)
push_enabled = Column(Boolean, nullable=False, default=False)
push_channel_ids = Column(Text, nullable=False, default="[]") # JSON array of channel ids
last_matched_at = Column(DateTime, nullable=True)
created_at = Column(DateTime, server_default=func.now())
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
class TrendSubscriptionMatch(Base):
__tablename__ = "trend_subscription_matches"
id = Column(Integer, primary_key=True, autoincrement=True)
subscription_id = Column(Integer, ForeignKey("trend_subscriptions.id"), nullable=False)
platform = Column(String, nullable=False)
item_id = Column(String, nullable=False)
title = Column(String, nullable=False)
url = Column(Text, nullable=False, default="")
hot_score = Column(String, nullable=False, default="")
matched_keywords = Column(Text, nullable=False, default="[]") # JSON array of matched keywords
matched_at = Column(DateTime, server_default=func.now())
is_read = Column(Boolean, nullable=False, default=False)
# dedup: same subscription + same platform + same item_id
__table_args__ = (
{"sqlite_autoincrement": True},
)
class NotificationChannel(Base):
__tablename__ = "notification_channels"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String, nullable=False)
type = Column(String, nullable=False) # "webhook" | "bark" | "email"
config = Column(Text, nullable=False, default="{}") # JSON object, type-specific
enabled = Column(Boolean, nullable=False, default=True)
created_at = Column(DateTime, server_default=func.now())
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())