From bc17b4b526b31f8da7b1259cc95cb8f7fcfaf159 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Gonz=C3=A1lez?= Date: Fri, 8 Aug 2025 02:05:57 +0200 Subject: [PATCH] feat(labrinth): allow editing loader fields in bulk in v3 project PATCH --- apps/labrinth/src/routes/v2/projects.rs | 1 + apps/labrinth/src/routes/v3/projects.rs | 27 ++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/apps/labrinth/src/routes/v2/projects.rs b/apps/labrinth/src/routes/v2/projects.rs index c4a91b877..234c45863 100644 --- a/apps/labrinth/src/routes/v2/projects.rs +++ b/apps/labrinth/src/routes/v2/projects.rs @@ -512,6 +512,7 @@ pub async fn project_edit( moderation_message_body: v2_new_project.moderation_message_body, monetization_status: v2_new_project.monetization_status, side_types_migration_review_status: None, // Not to be exposed in v2 + loader_fields: HashMap::new(), // Loader fields are not a thing in v2 }; // This returns 204 or failure so we don't need to do anything with it diff --git a/apps/labrinth/src/routes/v3/projects.rs b/apps/labrinth/src/routes/v3/projects.rs index c6be6e5a6..46d377582 100644 --- a/apps/labrinth/src/routes/v3/projects.rs +++ b/apps/labrinth/src/routes/v3/projects.rs @@ -11,7 +11,7 @@ use crate::database::redis::RedisPool; use crate::database::{self, models as db_models}; use crate::file_hosting::{FileHost, FileHostPublicity}; use crate::models; -use crate::models::ids::ProjectId; +use crate::models::ids::{ProjectId, VersionId}; use crate::models::images::ImageContext; use crate::models::notifications::NotificationBody; use crate::models::pats::Scopes; @@ -250,6 +250,8 @@ pub struct EditProject { pub monetization_status: Option, pub side_types_migration_review_status: Option, + #[serde(flatten)] + pub loader_fields: HashMap, } #[allow(clippy::too_many_arguments)] @@ -870,6 +872,29 @@ pub async fn project_edit( .await?; } + if !new_project.loader_fields.is_empty() { + for version in db_models::DBVersion::get_many( + &project_item.versions, + &**pool, + &redis, + ) + .await? + { + super::versions::version_edit_helper( + req.clone(), + (VersionId::from(version.inner.id),), + pool.clone(), + redis.clone(), + super::versions::EditVersion { + fields: new_project.loader_fields.clone(), + ..Default::default() + }, + session_queue.clone(), + ) + .await?; + } + } + // check new description and body for links to associated images // if they no longer exist in the description or body, delete them let checkable_strings: Vec<&str> =