85 lines · 2.6 KB · Rust
RawDownload
use super::*; #[derive(Debug)]pub struct CreateBillingCustomerParams {    pub user_id: UserId,    pub stripe_customer_id: String,} #[derive(Debug, Default)]pub struct UpdateBillingCustomerParams {    pub user_id: ActiveValue<UserId>,    pub stripe_customer_id: ActiveValue<String>,    pub has_overdue_invoices: ActiveValue<bool>,} impl Database {    /// Creates a new billing customer.    pub async fn create_billing_customer(        &self,        params: &CreateBillingCustomerParams,    ) -> Result<billing_customer::Model> {        self.transaction(|tx| async move {            let customer = billing_customer::Entity::insert(billing_customer::ActiveModel {                user_id: ActiveValue::set(params.user_id),                stripe_customer_id: ActiveValue::set(params.stripe_customer_id.clone()),                ..Default::default()            })            .exec_with_returning(&*tx)            .await?;             Ok(customer)        })        .await    }     /// Updates the specified billing customer.    pub async fn update_billing_customer(        &self,        id: BillingCustomerId,        params: &UpdateBillingCustomerParams,    ) -> Result<()> {        self.transaction(|tx| async move {            billing_customer::Entity::update(billing_customer::ActiveModel {                id: ActiveValue::set(id),                user_id: params.user_id.clone(),                stripe_customer_id: params.stripe_customer_id.clone(),                has_overdue_invoices: params.has_overdue_invoices.clone(),                ..Default::default()            })            .exec(&*tx)            .await?;             Ok(())        })        .await    }     /// Returns the billing customer for the user with the specified ID.    pub async fn get_billing_customer_by_user_id(        &self,        user_id: UserId,    ) -> Result<Option<billing_customer::Model>> {        self.transaction(|tx| async move {            Ok(billing_customer::Entity::find()                .filter(billing_customer::Column::UserId.eq(user_id))                .one(&*tx)                .await?)        })        .await    }     /// Returns the billing customer for the user with the specified Stripe customer ID.    pub async fn get_billing_customer_by_stripe_customer_id(        &self,        stripe_customer_id: &str,    ) -> Result<Option<billing_customer::Model>> {        self.transaction(|tx| async move {            Ok(billing_customer::Entity::find()                .filter(billing_customer::Column::StripeCustomerId.eq(stripe_customer_id))                .one(&*tx)                .await?)        })        .await    }}