diff --git a/src/feeds.rs b/src/feeds.rs index 3646ca1..1375aa5 100644 --- a/src/feeds.rs +++ b/src/feeds.rs @@ -1,11 +1,11 @@ use rocket::http::Status; use rocket::serde::{json::Json, Deserialize, Serialize}; use rocket_db_pools::Connection; -use uuid::Uuid; use url::Url; +use uuid::Uuid; -use crate::Db; use crate::user::AuthenticatedUser; +use crate::Db; #[derive(Debug, Serialize)] #[serde(crate = "rocket::serde")] @@ -35,7 +35,7 @@ impl Feed { #[derive(Debug, Deserialize)] #[serde(crate = "rocket::serde")] pub struct NewFeed { - pub url: Url, // Only URL is required now + pub url: Url, // Only URL is required now } #[post("/feeds", data = "")] @@ -52,30 +52,25 @@ pub async fn create_feed( } // Fetch the feed content - let response = reqwest::get(new_feed.url.as_ref()) - .await - .map_err(|e| { - eprintln!("Failed to fetch feed: {}", e); - Status::UnprocessableEntity - })?; - - let content = response.text() - .await - .map_err(|e| { - eprintln!("Failed to read response body: {}", e); - Status::UnprocessableEntity - })?; + let response = reqwest::get(new_feed.url.as_ref()).await.map_err(|e| { + eprintln!("Failed to fetch feed: {}", e); + Status::UnprocessableEntity + })?; + let content = response.text().await.map_err(|e| { + eprintln!("Failed to read response body: {}", e); + Status::UnprocessableEntity + })?; // Parse the feed - let feed_data = feed_rs::parser::parse(content.as_bytes()) - .map_err(|e| { - eprintln!("Failed to parse feed content: {}", e); - Status::UnprocessableEntity - })?; + let feed_data = feed_rs::parser::parse(content.as_bytes()).map_err(|e| { + eprintln!("Failed to parse feed content: {}", e); + Status::UnprocessableEntity + })?; // Use the feed title as the name, or URL if no title is available - let name = feed_data.title + let name = feed_data + .title .map(|t| t.content) .unwrap_or_else(|| new_feed.url.host_str().unwrap_or("Unknown").to_string()); @@ -83,16 +78,16 @@ pub async fn create_feed( let query = sqlx::query( "INSERT INTO feeds (feed_id, name, url, user_id, added_time, last_checked_time) - VALUES (?1, ?2, ?3, ?4, ?5, ?6)" + VALUES (?1, ?2, ?3, ?4, ?5, ?6)", ) - .bind(feed.feed_id.to_string()) - .bind(&feed.name) - .bind(feed.url.as_str()) - .bind(feed.user_id.to_string()) - .bind(feed.added_time.to_rfc3339()) - .bind(feed.last_checked_time.to_rfc3339()) - .execute(&mut **db) - .await; + .bind(feed.feed_id.to_string()) + .bind(&feed.name) + .bind(feed.url.as_str()) + .bind(feed.user_id.to_string()) + .bind(feed.added_time.to_rfc3339()) + .bind(feed.last_checked_time.to_rfc3339()) + .execute(&mut **db) + .await; match query { Ok(_) => Ok(Json(feed)), @@ -142,7 +137,7 @@ pub async fn list_feeds( .map(|row| { // Parse URL from string let url = Url::parse(&row.url).map_err(|_| Status::InternalServerError)?; - + Ok(Feed { feed_id: Uuid::parse_str(&row.feed_id).unwrap(), name: row.name, @@ -158,20 +153,14 @@ pub async fn list_feeds( } #[delete("/feeds/")] -pub async fn delete_feed( - mut db: Connection, - feed_id: &str, - user: AuthenticatedUser, -) -> Status { +pub async fn delete_feed(mut db: Connection, feed_id: &str, user: AuthenticatedUser) -> Status { // Validate UUID format let feed_uuid = match Uuid::parse_str(feed_id) { Ok(uuid) => uuid, Err(_) => return Status::BadRequest, }; - let query = sqlx::query( - "DELETE FROM feeds WHERE feed_id = ? AND user_id = ?" - ) + let query = sqlx::query("DELETE FROM feeds WHERE feed_id = ? AND user_id = ?") .bind(feed_uuid.to_string()) .bind(user.user_id.to_string()) .execute(&mut **db) @@ -190,4 +179,4 @@ pub async fn delete_feed( Status::InternalServerError } } -} +} diff --git a/src/main.rs b/src/main.rs index e2cdb56..8156f93 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,8 @@ #[macro_use] extern crate rocket; -mod user; mod feeds; +mod user; use rocket::fs::FileServer; use rocket::response::Redirect;