You've already forked AstralRinth
forked from didirus/AstralRinth
Fix deleting a user that has a prior subscription (#3533)
(for real this time)
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
use super::ids::{ProjectId, UserId};
|
||||
use super::{CollectionId, ReportId, ThreadId};
|
||||
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::redis::RedisPool;
|
||||
use crate::models::billing::ChargeStatus;
|
||||
use crate::models::users::Badges;
|
||||
use ariadne::ids::base62_impl::{parse_base62, to_base62};
|
||||
use chrono::{DateTime, Utc};
|
||||
@@ -657,9 +660,26 @@ impl User {
|
||||
.execute(&mut **transaction)
|
||||
.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!(
|
||||
"
|
||||
UPDATE charges
|
||||
UPDATE users_subscriptions
|
||||
SET user_id = $1
|
||||
WHERE user_id = $2
|
||||
",
|
||||
|
||||
Reference in New Issue
Block a user