get feed
This commit is contained in:
parent
a3c8a4adc0
commit
f8b81d8382
64
src/feeds.rs
64
src/feeds.rs
@ -64,6 +64,12 @@ async fn fetch_feed(url: &Url) -> Result<feed_rs::model::Feed, FeedError> {
|
||||
FeedError
|
||||
})?;
|
||||
|
||||
println!("Fetched feed: {}", url.as_ref());
|
||||
for item in &feed_data.entries {
|
||||
println!("{:?}", item);
|
||||
|
||||
}
|
||||
|
||||
Ok(feed_data)
|
||||
}
|
||||
|
||||
@ -216,3 +222,61 @@ pub async fn delete_feed(mut db: Connection<Db>, feed_id: &str, user: Authentica
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[get("/feeds/<feed_id>")]
|
||||
pub async fn get_feed(
|
||||
mut db: Connection<Db>,
|
||||
feed_id: &str,
|
||||
user: AuthenticatedUser,
|
||||
) -> Result<Json<Feed>, Status> {
|
||||
// Validate UUID format
|
||||
let feed_uuid = Uuid::parse_str(feed_id).map_err(|_| Status::BadRequest)?;
|
||||
let user_id = user.user_id.to_string();
|
||||
|
||||
let row = sqlx::query!(
|
||||
r#"
|
||||
SELECT
|
||||
feed_id as "feed_id: String",
|
||||
name,
|
||||
url,
|
||||
user_id as "user_id: String",
|
||||
added_time as "added_time: chrono::DateTime<chrono::Utc>",
|
||||
last_checked_time as "last_checked_time: chrono::DateTime<chrono::Utc>",
|
||||
categorization as "categorization: JsonValue"
|
||||
FROM feeds
|
||||
WHERE feed_id = ? AND user_id = ?
|
||||
"#,
|
||||
feed_uuid,
|
||||
user_id
|
||||
)
|
||||
.fetch_optional(&mut **db)
|
||||
.await
|
||||
.map_err(|e| {
|
||||
eprintln!("Database error: {}", e);
|
||||
Status::InternalServerError
|
||||
})?;
|
||||
|
||||
let row = row.ok_or(Status::NotFound)?;
|
||||
|
||||
// Parse URL from string
|
||||
let url = Url::parse(&row.url).map_err(|e| {
|
||||
eprintln!("Failed to parse URL '{}': {}", row.url, e);
|
||||
Status::InternalServerError
|
||||
})?;
|
||||
|
||||
// Parse categorization from JSON value
|
||||
let categorization: Vec<String> = serde::json::from_value(row.categorization).map_err(|e| {
|
||||
eprintln!("Failed to parse categorization: {}", e);
|
||||
Status::InternalServerError
|
||||
})?;
|
||||
|
||||
Ok(Json(Feed {
|
||||
feed_id: Uuid::parse_str(&row.feed_id).unwrap(),
|
||||
name: row.name,
|
||||
url,
|
||||
user_id: Uuid::parse_str(&row.user_id).unwrap(),
|
||||
added_time: row.added_time,
|
||||
last_checked_time: row.last_checked_time,
|
||||
categorization,
|
||||
}))
|
||||
}
|
||||
|
@ -61,6 +61,7 @@ fn rocket() -> _ {
|
||||
user::login,
|
||||
user::logout,
|
||||
feeds::create_feed,
|
||||
feeds::get_feed,
|
||||
feeds::list_feeds,
|
||||
feeds::delete_feed,
|
||||
],
|
||||
|
Loading…
Reference in New Issue
Block a user