From 3ca699b948686dc4b9d9767184a1bfacd757c424 Mon Sep 17 00:00:00 2001 From: Greg Shuflin Date: Sun, 2 Feb 2025 21:07:22 -0800 Subject: [PATCH] Remove unwraps --- ...a7d830df848285f4f6d66bb104935844b7f2d.json | 20 +++++++ ...d7a5f903e11d59158768c41125ad36fa4810.json} | 10 +++- ...d33437f839c5f5b153bada97bc628bee87b51.json | 56 +++++++++++++++++++ ...f601c2a61b3b1ddd5e9fd65e43c70ed82c9c.json} | 10 +++- ...0ad5183b647eaaff90decbce15e10d83c7538.json | 20 +++++++ src/feeds.rs | 35 +++++++++--- 6 files changed, 139 insertions(+), 12 deletions(-) create mode 100644 .sqlx/query-5ca2526f1ec4a055bc36898ef13a7d830df848285f4f6d66bb104935844b7f2d.json rename .sqlx/{query-f2c677b85d02ab2698c88013a5f0450a54ba4b29712b21cadb47971d38db012b.json => query-7fa0f8d0047afea873a0622bcc26d7a5f903e11d59158768c41125ad36fa4810.json} (72%) create mode 100644 .sqlx/query-cdc67f9eab7ea164d2fdf95385ad33437f839c5f5b153bada97bc628bee87b51.json rename .sqlx/{query-d04ca7e16ebbeb1213fc829a4ff1337427c6875e750c6d3570a314fe3136d36f.json => query-f27285d2d332e5aafd319c3052c3f601c2a61b3b1ddd5e9fd65e43c70ed82c9c.json} (77%) create mode 100644 .sqlx/query-fd64104d130b93dd5fc9414b8710ad5183b647eaaff90decbce15e10d83c7538.json diff --git a/.sqlx/query-5ca2526f1ec4a055bc36898ef13a7d830df848285f4f6d66bb104935844b7f2d.json b/.sqlx/query-5ca2526f1ec4a055bc36898ef13a7d830df848285f4f6d66bb104935844b7f2d.json new file mode 100644 index 0000000..2a740ce --- /dev/null +++ b/.sqlx/query-5ca2526f1ec4a055bc36898ef13a7d830df848285f4f6d66bb104935844b7f2d.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT url FROM feeds WHERE feed_id = ? AND user_id = ?", + "describe": { + "columns": [ + { + "name": "url", + "ordinal": 0, + "type_info": "Text" + } + ], + "parameters": { + "Right": 2 + }, + "nullable": [ + false + ] + }, + "hash": "5ca2526f1ec4a055bc36898ef13a7d830df848285f4f6d66bb104935844b7f2d" +} diff --git a/.sqlx/query-f2c677b85d02ab2698c88013a5f0450a54ba4b29712b21cadb47971d38db012b.json b/.sqlx/query-7fa0f8d0047afea873a0622bcc26d7a5f903e11d59158768c41125ad36fa4810.json similarity index 72% rename from .sqlx/query-f2c677b85d02ab2698c88013a5f0450a54ba4b29712b21cadb47971d38db012b.json rename to .sqlx/query-7fa0f8d0047afea873a0622bcc26d7a5f903e11d59158768c41125ad36fa4810.json index 0de70ae..966b112 100644 --- a/.sqlx/query-f2c677b85d02ab2698c88013a5f0450a54ba4b29712b21cadb47971d38db012b.json +++ b/.sqlx/query-7fa0f8d0047afea873a0622bcc26d7a5f903e11d59158768c41125ad36fa4810.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "\n SELECT \n feed_id as \"feed_id: String\",\n name,\n url,\n user_id as \"user_id: String\",\n added_time as \"added_time: chrono::DateTime\",\n last_checked_time as \"last_checked_time: chrono::DateTime\"\n FROM feeds\n WHERE user_id = ?\n ORDER BY added_time DESC\n ", + "query": "\n SELECT \n feed_id as \"feed_id: String\",\n name,\n url,\n user_id as \"user_id: String\",\n added_time as \"added_time: chrono::DateTime\",\n last_checked_time as \"last_checked_time: chrono::DateTime\",\n categorization as \"categorization: JsonValue\"\n FROM feeds\n WHERE user_id = ?\n ORDER BY added_time DESC\n ", "describe": { "columns": [ { @@ -32,6 +32,11 @@ "name": "last_checked_time: chrono::DateTime", "ordinal": 5, "type_info": "Datetime" + }, + { + "name": "categorization: JsonValue", + "ordinal": 6, + "type_info": "Null" } ], "parameters": { @@ -43,8 +48,9 @@ false, false, false, + false, false ] }, - "hash": "f2c677b85d02ab2698c88013a5f0450a54ba4b29712b21cadb47971d38db012b" + "hash": "7fa0f8d0047afea873a0622bcc26d7a5f903e11d59158768c41125ad36fa4810" } diff --git a/.sqlx/query-cdc67f9eab7ea164d2fdf95385ad33437f839c5f5b153bada97bc628bee87b51.json b/.sqlx/query-cdc67f9eab7ea164d2fdf95385ad33437f839c5f5b153bada97bc628bee87b51.json new file mode 100644 index 0000000..e685899 --- /dev/null +++ b/.sqlx/query-cdc67f9eab7ea164d2fdf95385ad33437f839c5f5b153bada97bc628bee87b51.json @@ -0,0 +1,56 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT \n feed_id as \"feed_id: String\",\n name,\n url,\n user_id as \"user_id: String\",\n added_time as \"added_time: chrono::DateTime\",\n last_checked_time as \"last_checked_time: chrono::DateTime\",\n categorization as \"categorization: JsonValue\"\n FROM feeds\n WHERE feed_id = ? AND user_id = ?\n ", + "describe": { + "columns": [ + { + "name": "feed_id: String", + "ordinal": 0, + "type_info": "Text" + }, + { + "name": "name", + "ordinal": 1, + "type_info": "Text" + }, + { + "name": "url", + "ordinal": 2, + "type_info": "Text" + }, + { + "name": "user_id: String", + "ordinal": 3, + "type_info": "Text" + }, + { + "name": "added_time: chrono::DateTime", + "ordinal": 4, + "type_info": "Datetime" + }, + { + "name": "last_checked_time: chrono::DateTime", + "ordinal": 5, + "type_info": "Datetime" + }, + { + "name": "categorization: JsonValue", + "ordinal": 6, + "type_info": "Null" + } + ], + "parameters": { + "Right": 2 + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false + ] + }, + "hash": "cdc67f9eab7ea164d2fdf95385ad33437f839c5f5b153bada97bc628bee87b51" +} diff --git a/.sqlx/query-d04ca7e16ebbeb1213fc829a4ff1337427c6875e750c6d3570a314fe3136d36f.json b/.sqlx/query-f27285d2d332e5aafd319c3052c3f601c2a61b3b1ddd5e9fd65e43c70ed82c9c.json similarity index 77% rename from .sqlx/query-d04ca7e16ebbeb1213fc829a4ff1337427c6875e750c6d3570a314fe3136d36f.json rename to .sqlx/query-f27285d2d332e5aafd319c3052c3f601c2a61b3b1ddd5e9fd65e43c70ed82c9c.json index e9bbe3d..6e1f573 100644 --- a/.sqlx/query-d04ca7e16ebbeb1213fc829a4ff1337427c6875e750c6d3570a314fe3136d36f.json +++ b/.sqlx/query-f27285d2d332e5aafd319c3052c3f601c2a61b3b1ddd5e9fd65e43c70ed82c9c.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "\n SELECT \n id as \"id: String\",\n username,\n password_hash,\n email,\n display_name,\n created_at as \"created_at: chrono::DateTime\"\n FROM users\n ", + "query": "\n SELECT \n id as \"id: String\",\n username,\n password_hash,\n email,\n display_name,\n created_at as \"created_at: chrono::DateTime\",\n admin as \"admin: bool\"\n FROM users\n ", "describe": { "columns": [ { @@ -32,6 +32,11 @@ "name": "created_at: chrono::DateTime", "ordinal": 5, "type_info": "Text" + }, + { + "name": "admin: bool", + "ordinal": 6, + "type_info": "Bool" } ], "parameters": { @@ -43,8 +48,9 @@ false, true, true, + false, false ] }, - "hash": "d04ca7e16ebbeb1213fc829a4ff1337427c6875e750c6d3570a314fe3136d36f" + "hash": "f27285d2d332e5aafd319c3052c3f601c2a61b3b1ddd5e9fd65e43c70ed82c9c" } diff --git a/.sqlx/query-fd64104d130b93dd5fc9414b8710ad5183b647eaaff90decbce15e10d83c7538.json b/.sqlx/query-fd64104d130b93dd5fc9414b8710ad5183b647eaaff90decbce15e10d83c7538.json new file mode 100644 index 0000000..72e0d64 --- /dev/null +++ b/.sqlx/query-fd64104d130b93dd5fc9414b8710ad5183b647eaaff90decbce15e10d83c7538.json @@ -0,0 +1,20 @@ +{ + "db_name": "SQLite", + "query": "SELECT COUNT(*) as count FROM users", + "describe": { + "columns": [ + { + "name": "count", + "ordinal": 0, + "type_info": "Int" + } + ], + "parameters": { + "Right": 0 + }, + "nullable": [ + false + ] + }, + "hash": "fd64104d130b93dd5fc9414b8710ad5183b647eaaff90decbce15e10d83c7538" +} diff --git a/src/feeds.rs b/src/feeds.rs index d98a9de..9fe1bbb 100644 --- a/src/feeds.rs +++ b/src/feeds.rs @@ -62,10 +62,13 @@ pub async fn create_feed( .map_err(|_| Status::UnprocessableEntity)?; // Use the feed title as the name, or URL if no title is available - let name = feed_data - .title - .map(|t| t.content) - .unwrap_or_else(|| new_feed.url.host_str().unwrap_or("").to_string()); + let name = feed_data.title.map(|t| t.content).unwrap_or_else(|| { + new_feed + .url + .host_str() + .map(|s| s.to_string()) + .unwrap_or_else(|| "".to_string()) + }); let mut feed = Feed::new(name, new_feed.url, user.user_id); feed.categorization = new_feed.categorization; @@ -149,12 +152,20 @@ pub async fn list_feeds( eprintln!("Failed to parse categorization: {}", e); Status::InternalServerError })?; + let feed_id = Uuid::parse_str(&row.feed_id).map_err(|e| { + eprintln!("Failed to parse feed_id UUID: {}", e); + Status::InternalServerError + })?; + let user_id = Uuid::parse_str(&row.user_id).map_err(|e| { + eprintln!("Failed to parse user_id UUID: {}", e); + Status::InternalServerError + })?; Ok(Feed { - feed_id: Uuid::parse_str(&row.feed_id).unwrap(), name: row.name, + feed_id, url, - user_id: Uuid::parse_str(&row.user_id).unwrap(), + user_id, added_time: row.added_time, last_checked_time: row.last_checked_time, categorization, @@ -240,12 +251,20 @@ pub async fn get_feed( eprintln!("Failed to parse categorization: {}", e); Status::InternalServerError })?; + let user_id = Uuid::parse_str(&row.user_id).map_err(|e| { + eprintln!("Failed to parse user_id UUID: {}", e); + Status::InternalServerError + })?; + let feed_id = Uuid::parse_str(&row.feed_id).map_err(|e| { + eprintln!("Failed to parse feed_id UUID: {}", e); + Status::InternalServerError + })?; Ok(Json(Feed { - feed_id: Uuid::parse_str(&row.feed_id).unwrap(), + feed_id, name: row.name, url, - user_id: Uuid::parse_str(&row.user_id).unwrap(), + user_id, added_time: row.added_time, last_checked_time: row.last_checked_time, categorization,