Fix subscriptions edge case (#952)

* Fix subscriptions edge case

* prep
This commit is contained in:
Geometrically
2024-08-15 02:03:46 -07:00
committed by GitHub
parent 1d0d8d7fbe
commit 7dd340f0b6
3 changed files with 22 additions and 3 deletions

View File

@@ -117,7 +117,8 @@ impl UserSubscriptionItem {
SET interval = EXCLUDED.interval,
expires = EXCLUDED.expires,
last_charge = EXCLUDED.last_charge,
status = EXCLUDED.status
status = EXCLUDED.status,
price_id = EXCLUDED.price_id
",
self.id.0,
self.user_id.0,

View File

@@ -670,6 +670,20 @@ pub async fn initiate_payment(
..Default::default()
};
let mut metadata = HashMap::new();
metadata.insert("modrinth_user_id".to_string(), to_base62(user.id.0));
metadata.insert(
"modrinth_price_id".to_string(),
to_base62(price_item.id.0 as u64),
);
if let Some(interval) = payment_request.interval {
metadata.insert(
"modrinth_subscription_interval".to_string(),
interval.as_str().to_string(),
);
}
update_payment_intent.metadata = Some(metadata);
if let PaymentRequestType::PaymentMethod { .. } = payment_request.type_ {
update_payment_intent.payment_method = Some(payment_method.id.clone());
}
@@ -897,6 +911,7 @@ pub async fn stripe_webhook(
user_subscription.expires += duration;
user_subscription.status = SubscriptionStatus::Active;
user_subscription.interval = interval;
user_subscription.price_id = metadata.product_price.id;
user_subscription.upsert(&mut transaction).await?;
} else {
user_subscription_item::UserSubscriptionItem {
@@ -952,6 +967,7 @@ pub async fn stripe_webhook(
if let Some(mut user_subscription) = metadata.user_subscription {
user_subscription.status = SubscriptionStatus::PaymentProcessing;
user_subscription.interval = interval;
user_subscription.price_id = metadata.product_price.id;
user_subscription.upsert(&mut transaction).await?;
} else {
user_subscription_item::UserSubscriptionItem {
@@ -988,6 +1004,8 @@ pub async fn stripe_webhook(
if let Some(mut user_subscription) = metadata.user_subscription {
user_subscription.last_charge = Some(Utc::now());
user_subscription.status = SubscriptionStatus::PaymentFailed;
user_subscription.price_id = metadata.product_price.id;
user_subscription.interval = interval;
user_subscription.upsert(&mut transaction).await?;
} else {
user_subscription_item::UserSubscriptionItem {