From f2ec89e62bf51b96df848513e9facde79d199a3e Mon Sep 17 00:00:00 2001 From: Emma Alexia Date: Sun, 13 Apr 2025 01:21:02 -0400 Subject: [PATCH] Fix two database errors (#3483) * Fixes error when an admin tries transferring project ownership * Fixes error when trying to delete a user when they previously have a transaction Co-authored-by: Jai Agrawal <18202329+Geometrically@users.noreply.github.com> --- ...e0368ee972ed20bd4d4b2490c655fde999dda.json | 15 +++++++++ .../labrinth/src/database/models/user_item.rs | 12 +++++++ apps/labrinth/src/routes/v3/teams.rs | 33 +++++++++++-------- 3 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 apps/labrinth/.sqlx/query-f1f93419f4394c702f256fe3e5de0368ee972ed20bd4d4b2490c655fde999dda.json diff --git a/apps/labrinth/.sqlx/query-f1f93419f4394c702f256fe3e5de0368ee972ed20bd4d4b2490c655fde999dda.json b/apps/labrinth/.sqlx/query-f1f93419f4394c702f256fe3e5de0368ee972ed20bd4d4b2490c655fde999dda.json new file mode 100644 index 000000000..f2104ac61 --- /dev/null +++ b/apps/labrinth/.sqlx/query-f1f93419f4394c702f256fe3e5de0368ee972ed20bd4d4b2490c655fde999dda.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE charges\n SET user_id = $1\n WHERE user_id = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "f1f93419f4394c702f256fe3e5de0368ee972ed20bd4d4b2490c655fde999dda" +} diff --git a/apps/labrinth/src/database/models/user_item.rs b/apps/labrinth/src/database/models/user_item.rs index a231c2c63..05db19929 100644 --- a/apps/labrinth/src/database/models/user_item.rs +++ b/apps/labrinth/src/database/models/user_item.rs @@ -657,6 +657,18 @@ impl User { .execute(&mut **transaction) .await?; + sqlx::query!( + " + UPDATE charges + SET user_id = $1 + WHERE user_id = $2 + ", + deleted_user as UserId, + id as UserId, + ) + .execute(&mut **transaction) + .await?; + sqlx::query!( " DELETE FROM user_backup_codes diff --git a/apps/labrinth/src/routes/v3/teams.rs b/apps/labrinth/src/routes/v3/teams.rs index 4917d0547..e6f9ecd76 100644 --- a/apps/labrinth/src/routes/v3/teams.rs +++ b/apps/labrinth/src/routes/v3/teams.rs @@ -936,19 +936,26 @@ pub async fn transfer_ownership( let mut transaction = pool.begin().await?; // The following are the only places new_is_owner is modified. - TeamMember::edit_team_member( - id.into(), - current_user.id.into(), - None, - None, - None, - None, - None, - None, - Some(false), - &mut transaction, - ) - .await?; + if let Some(former_owner) = + TeamMember::get_from_team_full(id.into(), &**pool, &redis) + .await? + .into_iter() + .find(|x| x.is_owner) + { + TeamMember::edit_team_member( + id.into(), + former_owner.user_id, + None, + None, + None, + None, + None, + None, + Some(false), + &mut transaction, + ) + .await?; + } TeamMember::edit_team_member( id.into(),