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
|
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,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
@ -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,
|
||||||
],
|
],
|
||||||
|
Loading…
Reference in New Issue
Block a user