mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-04 17:38:10 +00:00
move
This commit is contained in:
1 parent
294ee0d006
commit
75bc2a98f8
8 files changed
+68
-7
No files matched your search
@@ -29,6 +29,7 @@ pub mod tags;
|
||||
pub mod trending_model_analytics;
|
||||
pub mod tts;
|
||||
pub mod twitch;
|
||||
pub mod unsubscribe_reason;
|
||||
pub mod users;
|
||||
pub mod vocoder;
|
||||
pub mod voice_clone_requests;
|
||||
|
||||
File renamed without changes.
@@ -0,0 +1 @@
|
||||
pub mod insert_unsubscribe_reason;
|
||||
@@ -1,5 +1,4 @@
|
||||
pub mod get_user_subscription_by_stripe_subscription_id;
|
||||
pub mod get_user_subscription_by_stripe_subscription_id_transactional;
|
||||
pub mod insert_unsubscribe_reason;
|
||||
pub mod list_active_user_subscriptions;
|
||||
pub mod upsert_user_subscription_by_stripe_id;
|
||||
+59
-3
@@ -1,12 +1,68 @@
|
||||
use log::{info, warn};
|
||||
use enums::common::subscription_namespace::SubscriptionNamespace;
|
||||
use mysql_queries::queries::users::user_subscriptions::get_user_subscription_by_stripe_subscription_id_transactional::get_user_subscription_by_stripe_subscription_id_transactional;
|
||||
use mysql_queries::queries::users::user_subscriptions::upsert_user_subscription_by_stripe_id::UpsertUserSubscription;
|
||||
use reusable_types::stripe::stripe_subscription_status::StripeSubscriptionStatus;
|
||||
use crate::billing_action_fulfillment::artcraft_billing_action::SubscriptionPaidEvent;
|
||||
use crate::billing_action_fulfillment::subscriptions::upsert_subscription_details::CrudType;
|
||||
|
||||
pub async fn mark_subscription_as_paid(
|
||||
details: &SubscriptionPaidEvent,
|
||||
transaction: &mut sqlx::Transaction<'_, sqlx::MySql>,
|
||||
) -> anyhow::Result<()> {
|
||||
|
||||
let maybe_existing_subscription = get_user_subscription_by_stripe_subscription_id_transactional(
|
||||
&details.stripe_subscription_id,
|
||||
transaction,
|
||||
).await?;
|
||||
|
||||
// NB: It's possible to receive events out of order.
|
||||
// Entirely possible that the subscription object doesn't exist yet.
|
||||
if let Some(existing_sub) = maybe_existing_subscription {
|
||||
match existing_sub.maybe_stripe_subscription_status {
|
||||
Some(StripeSubscriptionStatus::Canceled) => {
|
||||
// TODO: We have to mark paid, but this is tricky...
|
||||
warn!("Existing subscription record already in terminal state...");
|
||||
return Ok(()); // Turn this into a no-op. This is stale info.
|
||||
}
|
||||
_ => {} // Fall-through
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
let upsert = UpsertUserSubscription {
|
||||
// This is the primary key
|
||||
stripe_subscription_id: &details.stripe_subscription_id,
|
||||
|
||||
// Artcraft product foreign keys
|
||||
user_token: details.owner_user_token.as_str(),
|
||||
subscription_namespace: SubscriptionNamespace::Artcraft,
|
||||
subscription_product_slug: details.subscription.slug.to_str(),
|
||||
|
||||
// Stripe object foreign keys
|
||||
maybe_stripe_customer_id: Some(&details.stripe_customer_id),
|
||||
maybe_stripe_product_id: Some(&details.stripe_product_id),
|
||||
maybe_stripe_price_id: Some(&details.stripe_price_id),
|
||||
|
||||
// Core subscription metadata
|
||||
maybe_stripe_recurring_interval: Some(details.stripe_recurring_interval),
|
||||
maybe_stripe_subscription_status: Some(details.stripe_subscription_status),
|
||||
maybe_stripe_is_production: Some(details.stripe_is_production),
|
||||
|
||||
// Timing data
|
||||
maybe_stripe_billing_cycle_anchor: Some(details.stripe_billing_cycle_anchor),
|
||||
subscription_start_at: details.subscription_start_at,
|
||||
current_billing_period_start_at: details.current_billing_period_start_at,
|
||||
current_billing_period_end_at: details.current_billing_period_end_at,
|
||||
subscription_expires_at: details.calculated_subscription_expires_at,
|
||||
maybe_cancel_at: details.maybe_cancel_at,
|
||||
maybe_canceled_at: details.maybe_canceled_at,
|
||||
};
|
||||
|
||||
upsert.upsert_with_transaction(transaction).await?;
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
Ok(())
|
||||
}
|
||||
+5
-1
@@ -18,7 +18,7 @@ pub async fn transactionally_fulfill_artcraft_billing_action(
|
||||
return Ok(())
|
||||
}
|
||||
ArtcraftBillingAction::WalletCreditsPurchase(purchase) => {
|
||||
info!("Completing credits pack purchase for user: {} ... ", purchase.owner_user_token.as_str());
|
||||
info!("Completing credits pack purchase for user: {:?} ... ", purchase.owner_user_token);
|
||||
complete_credits_pack_purchase(
|
||||
&purchase.owner_user_token,
|
||||
&purchase.pack,
|
||||
@@ -27,15 +27,19 @@ pub async fn transactionally_fulfill_artcraft_billing_action(
|
||||
).await?;
|
||||
}
|
||||
ArtcraftBillingAction::SubscriptionCreated(subscription_details) => {
|
||||
info!("Upserting subscription details (sub created) for user {:?}", subscription_details.owner_user_token);
|
||||
upsert_subscription_details(subscription_details, CrudType::Create, transaction).await?;
|
||||
}
|
||||
ArtcraftBillingAction::SubscriptionUpdated(subscription_details) => {
|
||||
info!("Upserting subscription details (sub updated) for user {:?}", subscription_details.owner_user_token);
|
||||
upsert_subscription_details(subscription_details, CrudType::Update, transaction).await?;
|
||||
}
|
||||
ArtcraftBillingAction::SubscriptionDeleted(subscription_details) => {
|
||||
info!("Upserting subscription details (sub deleted) for user {:?}", subscription_details.owner_user_token);
|
||||
upsert_subscription_details(subscription_details, CrudType::Delete, transaction).await?;
|
||||
}
|
||||
ArtcraftBillingAction::SubscriptionPaid(paid_details) => {
|
||||
info!("Completing subscription paid event for user: {:?}", paid_details.owner_user_token);
|
||||
mark_subscription_as_paid(paid_details, transaction).await?;
|
||||
}
|
||||
_ => {
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ pub async fn invoice_paid_handler(
|
||||
};
|
||||
|
||||
info!("Calling Stripe to look up subscription info...");
|
||||
|
||||
|
||||
let subscription = lookup_subscription_from_subscription_id(
|
||||
&subscription_id, stripe_client).await?;
|
||||
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ use log::{error, info};
|
||||
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
use http_server_common::response::serialize_as_json_error::serialize_as_json_error;
|
||||
use mysql_queries::queries::users::user_subscriptions::insert_unsubscribe_reason::UnsubscribeReasonInsertBuilder;
|
||||
use mysql_queries::queries::unsubscribe_reason::insert_unsubscribe_reason::UnsubscribeReasonInsertBuilder;
|
||||
|
||||
use crate::state::server_state::ServerState;
|
||||
|
||||
|
||||
Reference in new issue
Block a user