From c017038f7140273fbb8e8ade2fb7b5a91dcecfae Mon Sep 17 00:00:00 2001 From: Emma Alexia Date: Sat, 6 Sep 2025 19:05:34 -0400 Subject: [PATCH] Fix error when trying to delete user with uploaded images (#4295) * Fix error when trying to delete user with uploaded images `{"error":"database_error","description":"Database Error: Error while interacting with the database: error returned from database: update or delete on table \"users\" violates foreign key constraint \"uploaded_images_owner_id_fkey\" on table \"uploaded_images\""}` * Update certain things to use Ghost instead of deleting entirely * Fix mistake --- ...23ba6425bda15bf568eebbd8175912eb5700.json} | 4 +-- ...fe6e1fd670348f0ef881f67d7aec1acd6571f.json | 14 -------- ...fd093dd6023259a1e617eeb2c5491e5e5f704.json | 15 +++++++++ ...6fd30169f7ce6628f31c6749dada507cdc325.json | 15 +++++++++ ...264e8130a353058ac028d4fce4a38568019ee.json | 15 +++++++++ .../labrinth/src/database/models/user_item.rs | 32 +++++++++++++++++-- 6 files changed, 76 insertions(+), 19 deletions(-) rename apps/labrinth/.sqlx/{query-0461463e3e14f6c8ede5571a2905b8171e8caf4ebbd3ec844ef2cebd83980247.json => query-4a28872d188834822be5df7be5d023ba6425bda15bf568eebbd8175912eb5700.json} (61%) delete mode 100644 apps/labrinth/.sqlx/query-4de9fdac1831320d744cb6edd0cfe6e1fd670348f0ef881f67d7aec1acd6571f.json create mode 100644 apps/labrinth/.sqlx/query-54bfa46679475b799f85494e1aafd093dd6023259a1e617eeb2c5491e5e5f704.json create mode 100644 apps/labrinth/.sqlx/query-b8c62f703e8460a29a406b4b5a46fd30169f7ce6628f31c6749dada507cdc325.json create mode 100644 apps/labrinth/.sqlx/query-fbc0c5d96263c6bc65787bbecdd264e8130a353058ac028d4fce4a38568019ee.json diff --git a/apps/labrinth/.sqlx/query-0461463e3e14f6c8ede5571a2905b8171e8caf4ebbd3ec844ef2cebd83980247.json b/apps/labrinth/.sqlx/query-4a28872d188834822be5df7be5d023ba6425bda15bf568eebbd8175912eb5700.json similarity index 61% rename from apps/labrinth/.sqlx/query-0461463e3e14f6c8ede5571a2905b8171e8caf4ebbd3ec844ef2cebd83980247.json rename to apps/labrinth/.sqlx/query-4a28872d188834822be5df7be5d023ba6425bda15bf568eebbd8175912eb5700.json index e096043b..4f8e6acf 100644 --- a/apps/labrinth/.sqlx/query-0461463e3e14f6c8ede5571a2905b8171e8caf4ebbd3ec844ef2cebd83980247.json +++ b/apps/labrinth/.sqlx/query-4a28872d188834822be5df7be5d023ba6425bda15bf568eebbd8175912eb5700.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n DELETE FROM reports\n WHERE user_id = $1 OR reporter = $1\n ", + "query": "\n DELETE FROM reports\n WHERE reporter = $1\n ", "describe": { "columns": [], "parameters": { @@ -10,5 +10,5 @@ }, "nullable": [] }, - "hash": "0461463e3e14f6c8ede5571a2905b8171e8caf4ebbd3ec844ef2cebd83980247" + "hash": "4a28872d188834822be5df7be5d023ba6425bda15bf568eebbd8175912eb5700" } diff --git a/apps/labrinth/.sqlx/query-4de9fdac1831320d744cb6edd0cfe6e1fd670348f0ef881f67d7aec1acd6571f.json b/apps/labrinth/.sqlx/query-4de9fdac1831320d744cb6edd0cfe6e1fd670348f0ef881f67d7aec1acd6571f.json deleted file mode 100644 index 6baa687a..00000000 --- a/apps/labrinth/.sqlx/query-4de9fdac1831320d744cb6edd0cfe6e1fd670348f0ef881f67d7aec1acd6571f.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n DELETE FROM payouts\n WHERE user_id = $1\n ", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8" - ] - }, - "nullable": [] - }, - "hash": "4de9fdac1831320d744cb6edd0cfe6e1fd670348f0ef881f67d7aec1acd6571f" -} diff --git a/apps/labrinth/.sqlx/query-54bfa46679475b799f85494e1aafd093dd6023259a1e617eeb2c5491e5e5f704.json b/apps/labrinth/.sqlx/query-54bfa46679475b799f85494e1aafd093dd6023259a1e617eeb2c5491e5e5f704.json new file mode 100644 index 00000000..dbdd85fc --- /dev/null +++ b/apps/labrinth/.sqlx/query-54bfa46679475b799f85494e1aafd093dd6023259a1e617eeb2c5491e5e5f704.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE payouts\n SET user_id = $1\n WHERE user_id = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "54bfa46679475b799f85494e1aafd093dd6023259a1e617eeb2c5491e5e5f704" +} diff --git a/apps/labrinth/.sqlx/query-b8c62f703e8460a29a406b4b5a46fd30169f7ce6628f31c6749dada507cdc325.json b/apps/labrinth/.sqlx/query-b8c62f703e8460a29a406b4b5a46fd30169f7ce6628f31c6749dada507cdc325.json new file mode 100644 index 00000000..15c5ba7e --- /dev/null +++ b/apps/labrinth/.sqlx/query-b8c62f703e8460a29a406b4b5a46fd30169f7ce6628f31c6749dada507cdc325.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE reports\n SET user_id = $1\n WHERE user_id = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "b8c62f703e8460a29a406b4b5a46fd30169f7ce6628f31c6749dada507cdc325" +} diff --git a/apps/labrinth/.sqlx/query-fbc0c5d96263c6bc65787bbecdd264e8130a353058ac028d4fce4a38568019ee.json b/apps/labrinth/.sqlx/query-fbc0c5d96263c6bc65787bbecdd264e8130a353058ac028d4fce4a38568019ee.json new file mode 100644 index 00000000..6996f4f2 --- /dev/null +++ b/apps/labrinth/.sqlx/query-fbc0c5d96263c6bc65787bbecdd264e8130a353058ac028d4fce4a38568019ee.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE uploaded_images\n SET owner_id = $1\n WHERE owner_id = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "fbc0c5d96263c6bc65787bbecdd264e8130a353058ac028d4fce4a38568019ee" +} diff --git a/apps/labrinth/src/database/models/user_item.rs b/apps/labrinth/src/database/models/user_item.rs index 4d447702..a771ede0 100644 --- a/apps/labrinth/src/database/models/user_item.rs +++ b/apps/labrinth/src/database/models/user_item.rs @@ -599,13 +599,25 @@ impl DBUser { sqlx::query!( " DELETE FROM reports - WHERE user_id = $1 OR reporter = $1 + WHERE reporter = $1 ", id as DBUserId, ) .execute(&mut **transaction) .await?; + sqlx::query!( + " + UPDATE reports + SET user_id = $1 + WHERE user_id = $2 + ", + deleted_user as DBUserId, + id as DBUserId, + ) + .execute(&mut **transaction) + .await?; + sqlx::query!( " DELETE FROM mod_follows @@ -638,9 +650,11 @@ impl DBUser { sqlx::query!( " - DELETE FROM payouts - WHERE user_id = $1 + UPDATE payouts + SET user_id = $1 + WHERE user_id = $2 ", + deleted_user as DBUserId, id as DBUserId, ) .execute(&mut **transaction) @@ -668,6 +682,18 @@ impl DBUser { .execute(&mut **transaction) .await?; + sqlx::query!( + " + UPDATE uploaded_images + SET owner_id = $1 + WHERE owner_id = $2 + ", + deleted_user as DBUserId, + id as DBUserId, + ) + .execute(&mut **transaction) + .await?; + sqlx::query!( " DELETE FROM sessions