From 872ffa02cee300d5761f7b2fba26ab56666d67b0 Mon Sep 17 00:00:00 2001 From: Geometrically <18202329+Geometrically@users.noreply.github.com> Date: Wed, 12 Jun 2024 09:58:01 -0700 Subject: [PATCH] fix version update route perf (#923) * fix version update route perf * fix tests --- ...19e6c7b762bfbcc09d8ab2624b00113f71e77.json | 31 ------------------- ...bc18674c8f19334bdbeb48244a941f10a5e17.json | 31 +++++++++++++++++++ src/database/models/user_item.rs | 2 +- src/queue/moderation.rs | 2 +- src/routes/v3/oauth_clients.rs | 18 ----------- src/routes/v3/version_file.rs | 5 +-- src/validate/modpack.rs | 4 +-- tests/oauth_clients.rs | 3 -- 8 files changed, 38 insertions(+), 58 deletions(-) delete mode 100644 .sqlx/query-070174adf972b808aca7519168719e6c7b762bfbcc09d8ab2624b00113f71e77.json create mode 100644 .sqlx/query-26210e28d63aa61e6bea453b720bc18674c8f19334bdbeb48244a941f10a5e17.json diff --git a/.sqlx/query-070174adf972b808aca7519168719e6c7b762bfbcc09d8ab2624b00113f71e77.json b/.sqlx/query-070174adf972b808aca7519168719e6c7b762bfbcc09d8ab2624b00113f71e77.json deleted file mode 100644 index e9d49592..00000000 --- a/.sqlx/query-070174adf972b808aca7519168719e6c7b762bfbcc09d8ab2624b00113f71e77.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n SELECT v.id version_id, v.mod_id mod_id\n FROM versions v\n INNER JOIN version_fields vf ON vf.field_id = 3 AND v.id = vf.version_id\n INNER JOIN loader_field_enum_values lfev ON vf.enum_value = lfev.id AND (cardinality($2::varchar[]) = 0 OR lfev.value = ANY($2::varchar[]))\n INNER JOIN loaders_versions lv ON lv.version_id = v.id\n INNER JOIN loaders l on lv.loader_id = l.id AND (cardinality($3::varchar[]) = 0 OR l.loader = ANY($3::varchar[]))\n WHERE v.mod_id = ANY($1) AND (cardinality($4::varchar[]) = 0 OR v.version_type = ANY($4))\n ORDER BY v.date_published ASC\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "version_id", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "mod_id", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Int8Array", - "VarcharArray", - "VarcharArray", - "VarcharArray" - ] - }, - "nullable": [ - false, - false - ] - }, - "hash": "070174adf972b808aca7519168719e6c7b762bfbcc09d8ab2624b00113f71e77" -} diff --git a/.sqlx/query-26210e28d63aa61e6bea453b720bc18674c8f19334bdbeb48244a941f10a5e17.json b/.sqlx/query-26210e28d63aa61e6bea453b720bc18674c8f19334bdbeb48244a941f10a5e17.json new file mode 100644 index 00000000..8d135fcb --- /dev/null +++ b/.sqlx/query-26210e28d63aa61e6bea453b720bc18674c8f19334bdbeb48244a941f10a5e17.json @@ -0,0 +1,31 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT v.id version_id, v.mod_id mod_id\n FROM mods m\n INNER JOIN versions v ON m.id = v.mod_id AND (cardinality($4::varchar[]) = 0 OR v.version_type = ANY($4))\n INNER JOIN version_fields vf ON vf.field_id = 3 AND v.id = vf.version_id\n INNER JOIN loader_field_enum_values lfev ON vf.enum_value = lfev.id AND (cardinality($2::varchar[]) = 0 OR lfev.value = ANY($2::varchar[]))\n INNER JOIN loaders_versions lv ON lv.version_id = v.id\n INNER JOIN loaders l on lv.loader_id = l.id AND (cardinality($3::varchar[]) = 0 OR l.loader = ANY($3::varchar[]))\n WHERE m.id = ANY($1)\n ORDER BY v.date_published ASC\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "version_id", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "mod_id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int8Array", + "VarcharArray", + "VarcharArray", + "VarcharArray" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "26210e28d63aa61e6bea453b720bc18674c8f19334bdbeb48244a941f10a5e17" +} diff --git a/src/database/models/user_item.rs b/src/database/models/user_item.rs index 5c93cba2..bc4c1b85 100644 --- a/src/database/models/user_item.rs +++ b/src/database/models/user_item.rs @@ -469,7 +469,7 @@ impl User { .await?; for collection_id in user_collections { - models::Collection::remove(collection_id, transaction, &redis).await?; + models::Collection::remove(collection_id, transaction, redis).await?; } let report_threads = sqlx::query!( diff --git a/src/queue/moderation.rs b/src/queue/moderation.rs index 761b6f4f..c5e25b3b 100644 --- a/src/queue/moderation.rs +++ b/src/queue/moderation.rs @@ -362,7 +362,7 @@ impl AutomatedModerationQueue { for file in files.iter().filter(|x| x.version_id == version.id.into()) { - if let Some(hash) = file.hashes.get(&"sha1".to_string()) { + if let Some(hash) = file.hashes.get("sha1") { if let Some((index, (sha1, _, file_name, _))) = hashes .iter() .enumerate() diff --git a/src/routes/v3/oauth_clients.rs b/src/routes/v3/oauth_clients.rs index 32cec006..ad8cb6a4 100644 --- a/src/routes/v3/oauth_clients.rs +++ b/src/routes/v3/oauth_clients.rs @@ -249,12 +249,6 @@ pub struct OAuthClientEdit { )] pub name: Option, - #[validate( - custom(function = "crate::util::validate::validate_url"), - length(max = 255) - )] - pub icon_url: Option>, - pub max_scopes: Option, #[validate(length(min = 1))] @@ -293,20 +287,12 @@ pub async fn oauth_client_edit( .validate() .map_err(|e| ApiError::Validation(validation_errors_to_string(e, None)))?; - if client_updates.icon_url.is_none() - && client_updates.name.is_none() - && client_updates.max_scopes.is_none() - { - return Err(ApiError::InvalidInput("No changes provided".to_string())); - } - if let Some(existing_client) = OAuthClient::get(client_id.into_inner().into(), &**pool).await? { existing_client.validate_authorized(Some(¤t_user))?; let mut updated_client = existing_client.clone(); let OAuthClientEdit { name, - icon_url, max_scopes, redirect_uris, url, @@ -316,10 +302,6 @@ pub async fn oauth_client_edit( updated_client.name = name; } - if let Some(icon_url) = icon_url { - updated_client.icon_url = icon_url; - } - if let Some(max_scopes) = max_scopes { updated_client.max_scopes = max_scopes; } diff --git a/src/routes/v3/version_file.rs b/src/routes/v3/version_file.rs index 36e2f881..01e9cddb 100644 --- a/src/routes/v3/version_file.rs +++ b/src/routes/v3/version_file.rs @@ -331,12 +331,13 @@ pub async fn update_files( let update_version_ids = sqlx::query!( " SELECT v.id version_id, v.mod_id mod_id - FROM versions v + FROM mods m + INNER JOIN versions v ON m.id = v.mod_id AND (cardinality($4::varchar[]) = 0 OR v.version_type = ANY($4)) INNER JOIN version_fields vf ON vf.field_id = 3 AND v.id = vf.version_id INNER JOIN loader_field_enum_values lfev ON vf.enum_value = lfev.id AND (cardinality($2::varchar[]) = 0 OR lfev.value = ANY($2::varchar[])) INNER JOIN loaders_versions lv ON lv.version_id = v.id INNER JOIN loaders l on lv.loader_id = l.id AND (cardinality($3::varchar[]) = 0 OR l.loader = ANY($3::varchar[])) - WHERE v.mod_id = ANY($1) AND (cardinality($4::varchar[]) = 0 OR v.version_type = ANY($4)) + WHERE m.id = ANY($1) ORDER BY v.date_published ASC ", &files.iter().map(|x| x.project_id.0).collect::>(), diff --git a/src/validate/modpack.rs b/src/validate/modpack.rs index 30db5534..cb6a7f87 100644 --- a/src/validate/modpack.rs +++ b/src/validate/modpack.rs @@ -49,13 +49,13 @@ impl super::Validator for ModpackValidator { } for file in &pack.files { - if file.hashes.get(&PackFileHash::Sha1).is_none() { + if !file.hashes.contains_key(&PackFileHash::Sha1) { return Err(ValidationError::InvalidInput( "All pack files must provide a SHA1 hash!".into(), )); } - if file.hashes.get(&PackFileHash::Sha512).is_none() { + if !file.hashes.contains_key(&PackFileHash::Sha512) { return Err(ValidationError::InvalidInput( "All pack files must provide a SHA512 hash!".into(), )); diff --git a/tests/oauth_clients.rs b/tests/oauth_clients.rs index 7bed86d5..7289a225 100644 --- a/tests/oauth_clients.rs +++ b/tests/oauth_clients.rs @@ -40,7 +40,6 @@ async fn can_create_edit_get_oauth_client() { let creation_result: OAuthClientCreationResult = test::read_body_json(resp).await; let client_id = get_json_val_str(creation_result.client.id); - let icon_url = Some("https://modrinth.com/icon".to_string()); let url = Some("https://modrinth.com".to_string()); let description = Some("test description".to_string()); let edited_redirect_uris = vec![ @@ -49,7 +48,6 @@ async fn can_create_edit_get_oauth_client() { ]; let edit = OAuthClientEdit { name: None, - icon_url: Some(icon_url.clone()), max_scopes: None, redirect_uris: Some(edited_redirect_uris.clone()), url: Some(url.clone()), @@ -66,7 +64,6 @@ async fn can_create_edit_get_oauth_client() { .get_user_oauth_clients(FRIEND_USER_ID, FRIEND_USER_PAT) .await; assert_eq!(1, clients.len()); - assert_eq!(icon_url, clients[0].icon_url); assert_eq!(url, clients[0].url); assert_eq!(description, clients[0].description); assert_eq!(client_name, clients[0].name);