From c1fc072efea3b78a18beea973539b13aedebf85e Mon Sep 17 00:00:00 2001 From: fetch Date: Wed, 6 Aug 2025 04:09:26 -0400 Subject: [PATCH] Consider due expiring charge as unprovisionable --- apps/labrinth/src/database/models/charge_item.rs | 1 + apps/labrinth/src/routes/internal/billing.rs | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/labrinth/src/database/models/charge_item.rs b/apps/labrinth/src/database/models/charge_item.rs index 2ca8b9edb..33ea33b3d 100644 --- a/apps/labrinth/src/database/models/charge_item.rs +++ b/apps/labrinth/src/database/models/charge_item.rs @@ -240,6 +240,7 @@ impl DBCharge { charge_type = $1 AND ( (status = 'cancelled' AND due < NOW()) OR + (status = 'expiring' AND due < NOW()) OR (status = 'failed' AND last_attempt < NOW() - INTERVAL '2 days') ) "#, diff --git a/apps/labrinth/src/routes/internal/billing.rs b/apps/labrinth/src/routes/internal/billing.rs index e65de8078..a9f2958af 100644 --- a/apps/labrinth/src/routes/internal/billing.rs +++ b/apps/labrinth/src/routes/internal/billing.rs @@ -2131,7 +2131,11 @@ pub async fn index_subscriptions(pool: PgPool, redis: RedisPool) { let mut transaction = pool.begin().await?; let mut clear_cache_users = Vec::new(); - // If an active subscription has a canceled charge OR a failed charge more than two days ago, it should be cancelled + // If an active subscription has: + // - A canceled charge due now + // - An expiring charge due now + // - A failed charge more than two days ago + // It should be unprovisioned. let all_charges = DBCharge::get_unprovision(&pool).await?; let mut all_subscriptions =