From 66981c4d2c31a7807179bfd6bcf089c19f274a51 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Mon, 19 Sep 2022 00:26:16 -0400 Subject: [PATCH] Track subscription status --- _migrations/2022-09-17-173657_user_subscriptions/up.sql | 4 ++++ .../customer_subscription_created_handler.rs | 1 + .../customer_subscription_updated_handler.rs | 1 + .../subscriptions/upsert_subscription_by_stripe_id.rs | 5 +++++ 4 files changed, 11 insertions(+) diff --git a/_migrations/2022-09-17-173657_user_subscriptions/up.sql b/_migrations/2022-09-17-173657_user_subscriptions/up.sql index 154a3f582b..881f89c680 100644 --- a/_migrations/2022-09-17-173657_user_subscriptions/up.sql +++ b/_migrations/2022-09-17-173657_user_subscriptions/up.sql @@ -41,6 +41,9 @@ CREATE TABLE user_subscriptions ( maybe_stripe_customer_id VARCHAR(255) DEFAULT NULL, + -- Subscription object status enum as string + maybe_stripe_subscription_status VARCHAR(32) DEFAULT NULL, + maybe_stripe_is_production BOOLEAN DEFAULT NULL, -- ========== VECTOR CLOCK ========== @@ -73,6 +76,7 @@ CREATE TABLE user_subscriptions ( UNIQUE KEY (maybe_stripe_subscription_id), KEY index_subscription_category (subscription_category), KEY index_subscription_product_key (subscription_product_key), + KEY index_maybe_stripe_subscription_status (maybe_stripe_subscription_status), KEY fk_maybe_user_token (maybe_user_token) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; diff --git a/crates/component_subsystem/billing/src/stripe/webhook_event_handlers/customer_subscription/customer_subscription_created_handler.rs b/crates/component_subsystem/billing/src/stripe/webhook_event_handlers/customer_subscription/customer_subscription_created_handler.rs index 837bb10e01..5b0a8f4a4d 100644 --- a/crates/component_subsystem/billing/src/stripe/webhook_event_handlers/customer_subscription/customer_subscription_created_handler.rs +++ b/crates/component_subsystem/billing/src/stripe/webhook_event_handlers/customer_subscription/customer_subscription_created_handler.rs @@ -49,6 +49,7 @@ pub async fn customer_subscription_created_handler( subscription_product_key: "todo", maybe_stripe_product_id: Some(&summary.stripe_product_id), maybe_stripe_customer_id: Some(&summary.stripe_customer_id), + maybe_stripe_subscription_status: Some(summary.stripe_subscription_status.as_str()), maybe_stripe_is_production: Some(summary.stripe_is_production), subscription_created_at: summary.subscription_period_start, subscription_expires_at: summary.subscription_period_end, diff --git a/crates/component_subsystem/billing/src/stripe/webhook_event_handlers/customer_subscription/customer_subscription_updated_handler.rs b/crates/component_subsystem/billing/src/stripe/webhook_event_handlers/customer_subscription/customer_subscription_updated_handler.rs index 63f29a524d..b5b77e9ae2 100644 --- a/crates/component_subsystem/billing/src/stripe/webhook_event_handlers/customer_subscription/customer_subscription_updated_handler.rs +++ b/crates/component_subsystem/billing/src/stripe/webhook_event_handlers/customer_subscription/customer_subscription_updated_handler.rs @@ -25,6 +25,7 @@ pub async fn customer_subscription_updated_handler( subscription_product_key: "todo", maybe_stripe_product_id: Some(&summary.stripe_product_id), maybe_stripe_customer_id: Some(&summary.stripe_customer_id), + maybe_stripe_subscription_status: Some(summary.stripe_subscription_status.as_str()), maybe_stripe_is_production: Some(summary.stripe_is_production), subscription_created_at: summary.subscription_period_start, subscription_expires_at: summary.subscription_period_end, diff --git a/crates/lib/database_queries/src/queries/billing/subscriptions/upsert_subscription_by_stripe_id.rs b/crates/lib/database_queries/src/queries/billing/subscriptions/upsert_subscription_by_stripe_id.rs index 07cb9f5603..a8e200a057 100644 --- a/crates/lib/database_queries/src/queries/billing/subscriptions/upsert_subscription_by_stripe_id.rs +++ b/crates/lib/database_queries/src/queries/billing/subscriptions/upsert_subscription_by_stripe_id.rs @@ -22,6 +22,7 @@ pub struct UpsertSubscriptionByStripeId <'a> { pub maybe_stripe_product_id: Option<&'a str>, pub maybe_stripe_customer_id: Option<&'a str>, + pub maybe_stripe_subscription_status: Option<&'a str>, pub maybe_stripe_is_production: Option, pub subscription_created_at: NaiveDateTime, @@ -54,6 +55,7 @@ SET maybe_stripe_product_id = ?, maybe_stripe_customer_id = ?, + maybe_stripe_subscription_status = ?, maybe_stripe_is_production = ?, subscription_created_at = ?, @@ -63,6 +65,7 @@ SET ON DUPLICATE KEY UPDATE subscription_expires_at = ?, + maybe_stripe_subscription_status = ?, maybe_user_token = COALESCE(NULLIF(?, ''), maybe_user_token), version = version + 1 @@ -77,6 +80,7 @@ ON DUPLICATE KEY UPDATE self.maybe_stripe_product_id, self.maybe_stripe_customer_id, + self.maybe_stripe_subscription_status, self.maybe_stripe_is_production, self.subscription_created_at, @@ -84,6 +88,7 @@ ON DUPLICATE KEY UPDATE // Upsert self.subscription_expires_at, + self.maybe_stripe_subscription_status, self.maybe_user_token, );