rustfmt
This commit is contained in:
parent
2776e763cc
commit
9828df74f1
71
src/feeds.rs
71
src/feeds.rs
@ -1,11 +1,11 @@
|
|||||||
use rocket::http::Status;
|
use rocket::http::Status;
|
||||||
use rocket::serde::{json::Json, Deserialize, Serialize};
|
use rocket::serde::{json::Json, Deserialize, Serialize};
|
||||||
use rocket_db_pools::Connection;
|
use rocket_db_pools::Connection;
|
||||||
use uuid::Uuid;
|
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::Db;
|
|
||||||
use crate::user::AuthenticatedUser;
|
use crate::user::AuthenticatedUser;
|
||||||
|
use crate::Db;
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
#[derive(Debug, Serialize)]
|
||||||
#[serde(crate = "rocket::serde")]
|
#[serde(crate = "rocket::serde")]
|
||||||
@ -35,7 +35,7 @@ impl Feed {
|
|||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
#[serde(crate = "rocket::serde")]
|
#[serde(crate = "rocket::serde")]
|
||||||
pub struct NewFeed {
|
pub struct NewFeed {
|
||||||
pub url: Url, // Only URL is required now
|
pub url: Url, // Only URL is required now
|
||||||
}
|
}
|
||||||
|
|
||||||
#[post("/feeds", data = "<new_feed>")]
|
#[post("/feeds", data = "<new_feed>")]
|
||||||
@ -52,30 +52,25 @@ pub async fn create_feed(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Fetch the feed content
|
// Fetch the feed content
|
||||||
let response = reqwest::get(new_feed.url.as_ref())
|
let response = reqwest::get(new_feed.url.as_ref()).await.map_err(|e| {
|
||||||
.await
|
eprintln!("Failed to fetch feed: {}", e);
|
||||||
.map_err(|e| {
|
Status::UnprocessableEntity
|
||||||
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 content = response.text().await.map_err(|e| {
|
||||||
|
eprintln!("Failed to read response body: {}", e);
|
||||||
|
Status::UnprocessableEntity
|
||||||
|
})?;
|
||||||
|
|
||||||
// Parse the feed
|
// Parse the feed
|
||||||
let feed_data = feed_rs::parser::parse(content.as_bytes())
|
let feed_data = feed_rs::parser::parse(content.as_bytes()).map_err(|e| {
|
||||||
.map_err(|e| {
|
eprintln!("Failed to parse feed content: {}", e);
|
||||||
eprintln!("Failed to parse feed content: {}", e);
|
Status::UnprocessableEntity
|
||||||
Status::UnprocessableEntity
|
})?;
|
||||||
})?;
|
|
||||||
|
|
||||||
// Use the feed title as the name, or URL if no title is available
|
// 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)
|
.map(|t| t.content)
|
||||||
.unwrap_or_else(|| new_feed.url.host_str().unwrap_or("Unknown").to_string());
|
.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(
|
let query = sqlx::query(
|
||||||
"INSERT INTO feeds (feed_id, name, url, user_id, added_time, last_checked_time)
|
"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.feed_id.to_string())
|
||||||
.bind(&feed.name)
|
.bind(&feed.name)
|
||||||
.bind(feed.url.as_str())
|
.bind(feed.url.as_str())
|
||||||
.bind(feed.user_id.to_string())
|
.bind(feed.user_id.to_string())
|
||||||
.bind(feed.added_time.to_rfc3339())
|
.bind(feed.added_time.to_rfc3339())
|
||||||
.bind(feed.last_checked_time.to_rfc3339())
|
.bind(feed.last_checked_time.to_rfc3339())
|
||||||
.execute(&mut **db)
|
.execute(&mut **db)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
match query {
|
match query {
|
||||||
Ok(_) => Ok(Json(feed)),
|
Ok(_) => Ok(Json(feed)),
|
||||||
@ -142,7 +137,7 @@ pub async fn list_feeds(
|
|||||||
.map(|row| {
|
.map(|row| {
|
||||||
// Parse URL from string
|
// Parse URL from string
|
||||||
let url = Url::parse(&row.url).map_err(|_| Status::InternalServerError)?;
|
let url = Url::parse(&row.url).map_err(|_| Status::InternalServerError)?;
|
||||||
|
|
||||||
Ok(Feed {
|
Ok(Feed {
|
||||||
feed_id: Uuid::parse_str(&row.feed_id).unwrap(),
|
feed_id: Uuid::parse_str(&row.feed_id).unwrap(),
|
||||||
name: row.name,
|
name: row.name,
|
||||||
@ -158,20 +153,14 @@ pub async fn list_feeds(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[delete("/feeds/<feed_id>")]
|
#[delete("/feeds/<feed_id>")]
|
||||||
pub async fn delete_feed(
|
pub async fn delete_feed(mut db: Connection<Db>, feed_id: &str, user: AuthenticatedUser) -> Status {
|
||||||
mut db: Connection<Db>,
|
|
||||||
feed_id: &str,
|
|
||||||
user: AuthenticatedUser,
|
|
||||||
) -> Status {
|
|
||||||
// Validate UUID format
|
// Validate UUID format
|
||||||
let feed_uuid = match Uuid::parse_str(feed_id) {
|
let feed_uuid = match Uuid::parse_str(feed_id) {
|
||||||
Ok(uuid) => uuid,
|
Ok(uuid) => uuid,
|
||||||
Err(_) => return Status::BadRequest,
|
Err(_) => return Status::BadRequest,
|
||||||
};
|
};
|
||||||
|
|
||||||
let query = sqlx::query(
|
let query = sqlx::query("DELETE FROM feeds WHERE feed_id = ? AND user_id = ?")
|
||||||
"DELETE FROM feeds WHERE feed_id = ? AND user_id = ?"
|
|
||||||
)
|
|
||||||
.bind(feed_uuid.to_string())
|
.bind(feed_uuid.to_string())
|
||||||
.bind(user.user_id.to_string())
|
.bind(user.user_id.to_string())
|
||||||
.execute(&mut **db)
|
.execute(&mut **db)
|
||||||
@ -190,4 +179,4 @@ pub async fn delete_feed(
|
|||||||
Status::InternalServerError
|
Status::InternalServerError
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate rocket;
|
extern crate rocket;
|
||||||
|
|
||||||
mod user;
|
|
||||||
mod feeds;
|
mod feeds;
|
||||||
|
mod user;
|
||||||
|
|
||||||
use rocket::fs::FileServer;
|
use rocket::fs::FileServer;
|
||||||
use rocket::response::Redirect;
|
use rocket::response::Redirect;
|
||||||
|
Loading…
Reference in New Issue
Block a user