You've already forked AstralRinth
forked from didirus/AstralRinth
Fix subscriptions edge case (#952)
* Fix subscriptions edge case * prep
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user