shopify_client/services/subscription/
mod.rs

1pub mod remote;
2
3use std::sync::Arc;
4
5use crate::{
6    common::types::APIError,
7    types::subscription::{
8        ActiveSubscriptionsResp, CancelSubscriptionResp, CreateCombinedSubscriptionRequest,
9        CreateRecurringSubscriptionRequest, CreateSubscriptionResp, CreateUsageRecordRequest,
10        CreateUsageRecordResp, CreateUsageSubscriptionRequest, ExtendTrialResp, MoneyInput,
11        UpdateCappedAmountResp,
12    },
13};
14
15pub struct Subscription {
16    pub shop_url: Arc<String>,
17    pub version: Arc<String>,
18    pub access_token: Arc<String>,
19}
20
21impl Subscription {
22    pub fn new(shop_url: Arc<String>, version: Arc<String>, access_token: Arc<String>) -> Self {
23        Subscription {
24            shop_url,
25            version,
26            access_token,
27        }
28    }
29
30    pub async fn create_recurring(
31        &self,
32        request: &CreateRecurringSubscriptionRequest,
33    ) -> Result<CreateSubscriptionResp, APIError> {
34        remote::create_recurring_subscription(
35            &self.shop_url,
36            &self.version,
37            &self.access_token,
38            request,
39        )
40        .await
41    }
42
43    pub async fn create_usage(
44        &self,
45        request: &CreateUsageSubscriptionRequest,
46    ) -> Result<CreateSubscriptionResp, APIError> {
47        remote::create_usage_subscription(
48            &self.shop_url,
49            &self.version,
50            &self.access_token,
51            request,
52        )
53        .await
54    }
55
56    pub async fn create_combined(
57        &self,
58        request: &CreateCombinedSubscriptionRequest,
59    ) -> Result<CreateSubscriptionResp, APIError> {
60        remote::create_combined_subscription(
61            &self.shop_url,
62            &self.version,
63            &self.access_token,
64            request,
65        )
66        .await
67    }
68
69    pub async fn cancel(
70        &self,
71        subscription_id: &String,
72        prorate: bool,
73    ) -> Result<CancelSubscriptionResp, APIError> {
74        remote::cancel_subscription(
75            &self.shop_url,
76            &self.version,
77            &self.access_token,
78            subscription_id,
79            prorate,
80        )
81        .await
82    }
83
84    pub async fn extend_trial(
85        &self,
86        subscription_id: &String,
87        days: i32,
88    ) -> Result<ExtendTrialResp, APIError> {
89        remote::extend_trial(
90            &self.shop_url,
91            &self.version,
92            &self.access_token,
93            subscription_id,
94            days,
95        )
96        .await
97    }
98
99    pub async fn update_capped_amount(
100        &self,
101        line_item_id: &String,
102        capped_amount: &MoneyInput,
103    ) -> Result<UpdateCappedAmountResp, APIError> {
104        remote::update_capped_amount(
105            &self.shop_url,
106            &self.version,
107            &self.access_token,
108            line_item_id,
109            capped_amount,
110        )
111        .await
112    }
113
114    pub async fn create_usage_record(
115        &self,
116        request: &CreateUsageRecordRequest,
117    ) -> Result<CreateUsageRecordResp, APIError> {
118        remote::create_usage_record(&self.shop_url, &self.version, &self.access_token, request)
119            .await
120    }
121
122    pub async fn get_active_subscriptions(&self) -> Result<ActiveSubscriptionsResp, APIError> {
123        remote::get_active_subscriptions(&self.shop_url, &self.version, &self.access_token).await
124    }
125}