feedsignal/crates/web/src/server/services/articles.rs

28 lines
840 B
Rust
Raw Normal View History

use crate::api::ArticleView;
use anyhow::Result;
use feedsignal_db::Db;
use uuid::Uuid;
/// Returns articles ranked by `final_score` descending, highest-relevance
/// first. `feed_id` restricts the list to one feed; `None` joins every
/// subscribed feed into one ranked list.
pub async fn list_ranked(db: Db, feed_id: Option<String>) -> Result<Vec<ArticleView>> {
let feed_id = feed_id.map(|id| Uuid::parse_str(&id)).transpose()?;
Ok(db
.list_ranked_articles(feed_id, 100)
.await?
.into_iter()
.map(
|(id, feed_id, title, url, summary, topics, final_score)| ArticleView {
id,
feed_id,
title,
url,
summary,
topics,
final_score,
},
)
.collect())
}