You've already forked AstralRinth
forked from didirus/AstralRinth
Fix subscriptions edge case (#952)
* Fix subscriptions edge case * prep
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"db_name": "PostgreSQL",
|
"db_name": "PostgreSQL",
|
||||||
"query": "\n INSERT INTO users_subscriptions (\n id, user_id, price_id, interval, created, expires, last_charge, status\n )\n VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8\n )\n ON CONFLICT (id)\n DO UPDATE\n SET interval = EXCLUDED.interval,\n expires = EXCLUDED.expires,\n last_charge = EXCLUDED.last_charge,\n status = EXCLUDED.status\n ",
|
"query": "\n INSERT INTO users_subscriptions (\n id, user_id, price_id, interval, created, expires, last_charge, status\n )\n VALUES (\n $1, $2, $3, $4, $5, $6, $7, $8\n )\n ON CONFLICT (id)\n DO UPDATE\n SET interval = EXCLUDED.interval,\n expires = EXCLUDED.expires,\n last_charge = EXCLUDED.last_charge,\n status = EXCLUDED.status,\n price_id = EXCLUDED.price_id\n ",
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [],
|
"columns": [],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
@@ -17,5 +17,5 @@
|
|||||||
},
|
},
|
||||||
"nullable": []
|
"nullable": []
|
||||||
},
|
},
|
||||||
"hash": "0e7a1aaa7999dcae156e1b1194232a12742a24740e48dd0d99582a79da873383"
|
"hash": "e82ba8bafb4e45b8a8a100c639a9174f196a50cd74c9243ddd57d6f4f3d0b062"
|
||||||
}
|
}
|
||||||
@@ -117,7 +117,8 @@ impl UserSubscriptionItem {
|
|||||||
SET interval = EXCLUDED.interval,
|
SET interval = EXCLUDED.interval,
|
||||||
expires = EXCLUDED.expires,
|
expires = EXCLUDED.expires,
|
||||||
last_charge = EXCLUDED.last_charge,
|
last_charge = EXCLUDED.last_charge,
|
||||||
status = EXCLUDED.status
|
status = EXCLUDED.status,
|
||||||
|
price_id = EXCLUDED.price_id
|
||||||
",
|
",
|
||||||
self.id.0,
|
self.id.0,
|
||||||
self.user_id.0,
|
self.user_id.0,
|
||||||
|
|||||||
@@ -670,6 +670,20 @@ pub async fn initiate_payment(
|
|||||||
..Default::default()
|
..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_ {
|
if let PaymentRequestType::PaymentMethod { .. } = payment_request.type_ {
|
||||||
update_payment_intent.payment_method = Some(payment_method.id.clone());
|
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.expires += duration;
|
||||||
user_subscription.status = SubscriptionStatus::Active;
|
user_subscription.status = SubscriptionStatus::Active;
|
||||||
user_subscription.interval = interval;
|
user_subscription.interval = interval;
|
||||||
|
user_subscription.price_id = metadata.product_price.id;
|
||||||
user_subscription.upsert(&mut transaction).await?;
|
user_subscription.upsert(&mut transaction).await?;
|
||||||
} else {
|
} else {
|
||||||
user_subscription_item::UserSubscriptionItem {
|
user_subscription_item::UserSubscriptionItem {
|
||||||
@@ -952,6 +967,7 @@ pub async fn stripe_webhook(
|
|||||||
if let Some(mut user_subscription) = metadata.user_subscription {
|
if let Some(mut user_subscription) = metadata.user_subscription {
|
||||||
user_subscription.status = SubscriptionStatus::PaymentProcessing;
|
user_subscription.status = SubscriptionStatus::PaymentProcessing;
|
||||||
user_subscription.interval = interval;
|
user_subscription.interval = interval;
|
||||||
|
user_subscription.price_id = metadata.product_price.id;
|
||||||
user_subscription.upsert(&mut transaction).await?;
|
user_subscription.upsert(&mut transaction).await?;
|
||||||
} else {
|
} else {
|
||||||
user_subscription_item::UserSubscriptionItem {
|
user_subscription_item::UserSubscriptionItem {
|
||||||
@@ -988,6 +1004,8 @@ pub async fn stripe_webhook(
|
|||||||
if let Some(mut user_subscription) = metadata.user_subscription {
|
if let Some(mut user_subscription) = metadata.user_subscription {
|
||||||
user_subscription.last_charge = Some(Utc::now());
|
user_subscription.last_charge = Some(Utc::now());
|
||||||
user_subscription.status = SubscriptionStatus::PaymentFailed;
|
user_subscription.status = SubscriptionStatus::PaymentFailed;
|
||||||
|
user_subscription.price_id = metadata.product_price.id;
|
||||||
|
user_subscription.interval = interval;
|
||||||
user_subscription.upsert(&mut transaction).await?;
|
user_subscription.upsert(&mut transaction).await?;
|
||||||
} else {
|
} else {
|
||||||
user_subscription_item::UserSubscriptionItem {
|
user_subscription_item::UserSubscriptionItem {
|
||||||
|
|||||||
Reference in New Issue
Block a user