Fix deleting a user that has a prior subscription (#3533)

(for real this time)
This commit is contained in:
Emma Alexia 2025-04-19 00:38:54 -04:00 committed by GitHub
parent d6a74b0cfe
commit d0aef27f7b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 36 additions and 16 deletions

View File

@ -0,0 +1,15 @@
{
"db_name": "PostgreSQL",
"query": "\n UPDATE users_subscriptions\n SET user_id = $1\n WHERE user_id = $2\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Int8",
"Int8"
]
},
"nullable": []
},
"hash": "79bdf720ec3631954c06fbba1da25b7e70db2e920ef1f2be77aa06f76da200fe"
}

View File

@ -1,15 +0,0 @@
{
"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"
}

View File

@ -1,8 +1,11 @@
use super::ids::{ProjectId, UserId}; use super::ids::{ProjectId, UserId};
use super::{CollectionId, ReportId, ThreadId}; use super::{CollectionId, ReportId, ThreadId};
use crate::database::models; use crate::database::models;
use crate::database::models::charge_item::ChargeItem;
use crate::database::models::user_subscription_item::UserSubscriptionItem;
use crate::database::models::{DatabaseError, OrganizationId}; use crate::database::models::{DatabaseError, OrganizationId};
use crate::database::redis::RedisPool; use crate::database::redis::RedisPool;
use crate::models::billing::ChargeStatus;
use crate::models::users::Badges; use crate::models::users::Badges;
use ariadne::ids::base62_impl::{parse_base62, to_base62}; use ariadne::ids::base62_impl::{parse_base62, to_base62};
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
@ -657,9 +660,26 @@ impl User {
.execute(&mut **transaction) .execute(&mut **transaction)
.await?; .await?;
let open_subscriptions =
UserSubscriptionItem::get_all_user(id, &mut **transaction)
.await?;
for x in open_subscriptions {
let charge =
ChargeItem::get_open_subscription(x.id, &mut **transaction)
.await?;
if let Some(mut charge) = charge {
charge.status = ChargeStatus::Cancelled;
charge.due = Utc::now();
charge.user_id = deleted_user;
charge.upsert(transaction).await?;
}
}
sqlx::query!( sqlx::query!(
" "
UPDATE charges UPDATE users_subscriptions
SET user_id = $1 SET user_id = $1
WHERE user_id = $2 WHERE user_id = $2
", ",