From a2a3ae64c4762e1ff0cc4d178a8bda642b74af79 Mon Sep 17 00:00:00 2001 From: Emma Alexia Date: Sat, 24 May 2025 11:56:35 -0400 Subject: [PATCH 1/2] Fix resubscription of servers with failed payments Resolves MOD-55 --- .../src/pages/settings/billing/index.vue | 19 +++++++++++++++++-- apps/labrinth/src/routes/internal/billing.rs | 14 ++++++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/apps/frontend/src/pages/settings/billing/index.vue b/apps/frontend/src/pages/settings/billing/index.vue index 04bf5a533..ab9a72495 100644 --- a/apps/frontend/src/pages/settings/billing/index.vue +++ b/apps/frontend/src/pages/settings/billing/index.vue @@ -361,7 +361,7 @@ " color="green" > - @@ -1098,7 +1098,7 @@ async function fetchCapacityStatuses(serverId, product) { } } -const resubscribePyro = async (subscriptionId) => { +const resubscribePyro = async (subscriptionId, wasSuspended) => { try { await useBaseFetch(`billing/subscription/${subscriptionId}`, { internal: true, @@ -1108,6 +1108,21 @@ const resubscribePyro = async (subscriptionId) => { }, }); await refresh(); + if (wasSuspended) { + data.$notify({ + group: "main", + title: "Resubscription request submitted", + text: "If the server is currently suspended, it may take up to 10 minutes for another charge attempt to be made.", + type: "success", + }); + } else { + data.$notify({ + group: "main", + title: "Success", + text: "Server subscription resubscribed successfully", + type: "success", + }); + } } catch { data.$notify({ group: "main", diff --git a/apps/labrinth/src/routes/internal/billing.rs b/apps/labrinth/src/routes/internal/billing.rs index 344fafa40..bda60abef 100644 --- a/apps/labrinth/src/routes/internal/billing.rs +++ b/apps/labrinth/src/routes/internal/billing.rs @@ -16,7 +16,7 @@ use crate::queue::session::AuthQueue; use crate::routes::ApiError; use actix_web::{HttpRequest, HttpResponse, delete, get, patch, post, web}; use ariadne::ids::base62_impl::{parse_base62, to_base62}; -use chrono::Utc; +use chrono::{Duration, Utc}; use rust_decimal::Decimal; use rust_decimal::prelude::ToPrimitive; use serde::Serialize; @@ -366,9 +366,12 @@ pub async fn edit_subscription( })?; if let Some(cancelled) = &edit_subscription.cancelled { - if open_charge.status != ChargeStatus::Open - && open_charge.status != ChargeStatus::Cancelled - { + if !matches!( + open_charge.status, + ChargeStatus::Open + | ChargeStatus::Cancelled + | ChargeStatus::Failed + ) { return Err(ApiError::InvalidInput( "You may not change the status of this subscription!" .to_string(), @@ -377,6 +380,9 @@ pub async fn edit_subscription( if *cancelled { open_charge.status = ChargeStatus::Cancelled; + } else if open_charge.status == ChargeStatus::Failed { + // Force another resubscription attempt + open_charge.last_attempt = Some(Utc::now() - Duration::days(2)); } else { open_charge.status = ChargeStatus::Open; } From 7cacb2a97605875ec0a25583d3839e2866bf3b83 Mon Sep 17 00:00:00 2001 From: Emma Alexia Date: Sat, 24 May 2025 17:43:34 -0400 Subject: [PATCH 2/2] run fix --- apps/frontend/src/pages/settings/billing/index.vue | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/frontend/src/pages/settings/billing/index.vue b/apps/frontend/src/pages/settings/billing/index.vue index ab9a72495..a1abbeee0 100644 --- a/apps/frontend/src/pages/settings/billing/index.vue +++ b/apps/frontend/src/pages/settings/billing/index.vue @@ -361,7 +361,14 @@ " color="green" > -