diff --git a/crates/schema/database/mysql_queries/src/queries/users/user_subscriptions/find_artcraft_subscription_for_owner_user.rs b/crates/schema/database/mysql_queries/src/queries/users/user_subscriptions/find_artcraft_subscription_for_owner_user.rs index 07dff49007..a95c4c2427 100644 --- a/crates/schema/database/mysql_queries/src/queries/users/user_subscriptions/find_artcraft_subscription_for_owner_user.rs +++ b/crates/schema/database/mysql_queries/src/queries/users/user_subscriptions/find_artcraft_subscription_for_owner_user.rs @@ -1,4 +1,5 @@ use crate::errors::select_optional_record_error::SelectOptionalRecordError; +use crate::helpers::boolean_converters::nullable_i8_to_bool_default_false; use chrono::{DateTime, Utc}; use enums::common::artcraft_subscription_slug::ArtcraftSubscriptionSlug; use enums::common::subscription_namespace::SubscriptionNamespace; @@ -8,7 +9,6 @@ use sqlx::pool::PoolConnection; use sqlx::MySql; use tokens::tokens::users::UserToken; - pub struct ArtcraftSubscription { pub user_token: UserToken, @@ -18,6 +18,12 @@ pub struct ArtcraftSubscription { pub stripe_customer_id: String, pub stripe_subscription_id: String, pub stripe_subscription_status: String, + pub stripe_invoice_is_paid: bool, + + /// When the subscription was created (Stripe's POV, not our db record), + /// though even Stripe might have backdated it. It defaults to our DB record + /// created timestamp until Stripe updates it. + pub subscription_start_at: DateTime, /// This is the authoritative timestamp for when the subscription expires. pub subscription_expires_at: DateTime, @@ -44,7 +50,7 @@ pub async fn find_artcraft_subscription_for_owner_user_using_transaction( ) -> Result, SelectOptionalRecordError> { let query = query(user_token); - + let result = query .fetch_optional(&mut **transaction) .await; @@ -64,6 +70,8 @@ fn map_result(result: Result, sqlx::Error>) -> R .ok_or_else(|| SelectOptionalRecordError::RequiredFieldWasNull("maybe_stripe_subscription_id"))?, stripe_subscription_status: record.maybe_stripe_subscription_status .ok_or_else(|| SelectOptionalRecordError::RequiredFieldWasNull("maybe_stripe_subscription_status"))?, + stripe_invoice_is_paid: nullable_i8_to_bool_default_false(record.maybe_stripe_invoice_is_paid), + subscription_start_at: record.subscription_start_at, subscription_expires_at: record.subscription_expires_at, })), Ok(None) => Ok(None), @@ -87,6 +95,8 @@ SELECT maybe_stripe_customer_id, maybe_stripe_subscription_id, maybe_stripe_subscription_status, + maybe_stripe_invoice_is_paid, + subscription_start_at, subscription_expires_at FROM user_subscriptions @@ -117,6 +127,8 @@ struct RawArtcraftSubscription { maybe_stripe_customer_id: Option, maybe_stripe_subscription_id: Option, maybe_stripe_subscription_status: Option, + maybe_stripe_invoice_is_paid: Option, + subscription_start_at: DateTime, subscription_expires_at: DateTime, }