diff --git a/apps/labrinth/.sqlx/query-79bdf720ec3631954c06fbba1da25b7e70db2e920ef1f2be77aa06f76da200fe.json b/apps/labrinth/.sqlx/query-79bdf720ec3631954c06fbba1da25b7e70db2e920ef1f2be77aa06f76da200fe.json new file mode 100644 index 000000000..aa8650874 --- /dev/null +++ b/apps/labrinth/.sqlx/query-79bdf720ec3631954c06fbba1da25b7e70db2e920ef1f2be77aa06f76da200fe.json @@ -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" +} diff --git a/apps/labrinth/.sqlx/query-f1f93419f4394c702f256fe3e5de0368ee972ed20bd4d4b2490c655fde999dda.json b/apps/labrinth/.sqlx/query-f1f93419f4394c702f256fe3e5de0368ee972ed20bd4d4b2490c655fde999dda.json deleted file mode 100644 index f2104ac61..000000000 --- a/apps/labrinth/.sqlx/query-f1f93419f4394c702f256fe3e5de0368ee972ed20bd4d4b2490c655fde999dda.json +++ /dev/null @@ -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" -} diff --git a/apps/labrinth/src/database/models/user_item.rs b/apps/labrinth/src/database/models/user_item.rs index 05db19929..8c3ec18b0 100644 --- a/apps/labrinth/src/database/models/user_item.rs +++ b/apps/labrinth/src/database/models/user_item.rs @@ -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 ",