def all_articles(self): return (Article.select() .distinct() .join(UserSubscription, on=(UserSubscription.subscription == Article.source)) .join(ArticleTopic, on=(ArticleTopic.article == Article.id)) .join(UserTopic, on=((UserTopic.topic == ArticleTopic.topic) & (UserTopic.user == UserSubscription.user))) .join(UserArticle, JOIN_LEFT_OUTER, on=(UserArticle.article == Article.id) & (UserArticle.user == UserTopic.user)) .where(UserTopic.user == self, UserArticle.state >> None) .order_by(Article.publish_date.desc()) .limit(200))
def articles(self, limit=50, offset=0): return (Article.select(Article, UserArticle.score) .distinct() .join(UserSubscription, on=(UserSubscription.subscription == Article.source)) .join(ArticleTopic, on=(ArticleTopic.article == Article.id)) .join(UserTopic, on=((UserTopic.topic == ArticleTopic.topic) & (UserTopic.user == UserSubscription.user))) .join(UserArticle, on=(UserArticle.article == Article.id)) .where(UserTopic.user == self, UserArticle.user == self, UserArticle.state >> None) .order_by(UserArticle.score.desc()) .limit(limit) .offset(offset))
def evaluated_articles(self): return (Article.select(Article, UserArticle.state) .join(UserArticle) .where(UserArticle.user == self, ~(UserArticle.state >> None)) .order_by(Article.publish_date.desc()) .limit(100))