Skip to main content

lago_client/queries/
applied_coupon.rs

1use lago_types::{
2    error::{LagoError, Result},
3    requests::applied_coupon::{ApplyCouponRequest, ListAppliedCouponsRequest},
4    responses::applied_coupon::{ApplyCouponResponse, ListAppliedCouponsResponse},
5};
6use url::Url;
7
8use crate::client::LagoClient;
9
10impl LagoClient {
11    /// Retrieves a list of applied coupons with optional filtering parameters
12    ///
13    /// # Arguments
14    /// * `request` - Optional filtering parameters for the applied coupon list
15    ///
16    /// # Returns
17    /// A `Result` containing the list of applied coupons or an error
18    pub async fn list_applied_coupons(
19        &self,
20        request: Option<ListAppliedCouponsRequest>,
21    ) -> Result<ListAppliedCouponsResponse> {
22        let request = request.unwrap_or_default();
23        let region = self.config.region()?;
24        let mut url = Url::parse(&format!("{}/applied_coupons", region.endpoint()))
25            .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
26
27        let query_params = request.to_query_params();
28
29        if !query_params.is_empty() {
30            let query_string = query_params
31                .iter()
32                .map(|(k, v)| format!("{k}={v}"))
33                .collect::<Vec<_>>()
34                .join("&");
35            url.set_query(Some(&query_string));
36        }
37
38        self.make_request("GET", url.as_str(), None::<&()>).await
39    }
40
41    /// Applies a coupon to a customer
42    ///
43    /// # Arguments
44    /// * `request` - The request containing the coupon application data
45    ///
46    /// # Returns
47    /// A `Result` containing the applied coupon data or an error
48    pub async fn apply_coupon(&self, request: ApplyCouponRequest) -> Result<ApplyCouponResponse> {
49        let region = self.config.region()?;
50        let url = format!("{}/applied_coupons", region.endpoint());
51
52        self.make_request("POST", &url, Some(&request)).await
53    }
54}