diff --git a/src/feeds.rs b/src/feeds.rs index c95cab6..112f002 100644 --- a/src/feeds.rs +++ b/src/feeds.rs @@ -64,6 +64,12 @@ async fn fetch_feed(url: &Url) -> Result { 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, feed_id: &str, user: Authentica } } } + +#[get("/feeds/")] +pub async fn get_feed( + mut db: Connection, + feed_id: &str, + user: AuthenticatedUser, +) -> Result, 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", + last_checked_time as "last_checked_time: chrono::DateTime", + 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 = 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, + })) +} diff --git a/src/main.rs b/src/main.rs index 8156f93..097a2e2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -61,6 +61,7 @@ fn rocket() -> _ { user::login, user::logout, feeds::create_feed, + feeds::get_feed, feeds::list_feeds, feeds::delete_feed, ],