This commit is contained in:
Greg Shuflin 2025-02-02 14:49:08 -08:00
parent a3c8a4adc0
commit f8b81d8382
2 changed files with 65 additions and 0 deletions

View File

@ -64,6 +64,12 @@ async fn fetch_feed(url: &Url) -> Result<feed_rs::model::Feed, FeedError> {
FeedError FeedError
})?; })?;
println!("Fetched feed: {}", url.as_ref());
for item in &feed_data.entries {
println!("{:?}", item);
}
Ok(feed_data) 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,
}))
}

View File

@ -61,6 +61,7 @@ fn rocket() -> _ {
user::login, user::login,
user::logout, user::logout,
feeds::create_feed, feeds::create_feed,
feeds::get_feed,
feeds::list_feeds, feeds::list_feeds,
feeds::delete_feed, feeds::delete_feed,
], ],