lago_client/queries/
payment.rs1use lago_types::{
2 error::{LagoError, Result},
3 requests::payment::{
4 CreatePaymentRequest, GetPaymentRequest, ListCustomerPaymentsRequest, ListPaymentsRequest,
5 },
6 responses::payment::{CreatePaymentResponse, GetPaymentResponse, ListPaymentsResponse},
7};
8use url::Url;
9
10use crate::client::LagoClient;
11
12impl LagoClient {
14 pub async fn list_payments(
22 &self,
23 request: Option<ListPaymentsRequest>,
24 ) -> Result<ListPaymentsResponse> {
25 let request = request.unwrap_or_default();
26 let region = self.config.region()?;
27 let mut url = Url::parse(&format!("{}/payments", region.endpoint()))
28 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
29
30 let query_params = request.to_query_params();
31
32 if !query_params.is_empty() {
33 let query_string = query_params
34 .iter()
35 .map(|(k, v)| format!("{k}={v}"))
36 .collect::<Vec<_>>()
37 .join("&");
38 url.set_query(Some(&query_string));
39 }
40
41 self.make_request("GET", url.as_str(), None::<&()>).await
42 }
43
44 pub async fn get_payment(&self, request: GetPaymentRequest) -> Result<GetPaymentResponse> {
52 let region = self.config.region()?;
53 let url = format!("{}/payments/{}", region.endpoint(), request.lago_id);
54 self.make_request("GET", &url, None::<&()>).await
55 }
56
57 pub async fn create_payment(
65 &self,
66 request: CreatePaymentRequest,
67 ) -> Result<CreatePaymentResponse> {
68 let region = self.config.region()?;
69 let url = format!("{}/payments", region.endpoint());
70 self.make_request("POST", &url, Some(&request)).await
71 }
72
73 pub async fn list_customer_payments(
81 &self,
82 request: ListCustomerPaymentsRequest,
83 ) -> Result<ListPaymentsResponse> {
84 let region = self.config.region()?;
85 let mut url = Url::parse(&format!(
86 "{}/customers/{}/payments",
87 region.endpoint(),
88 urlencoding::encode(&request.external_customer_id)
89 ))
90 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
91
92 let query_params = request.to_query_params();
93
94 if !query_params.is_empty() {
95 let query_string = query_params
96 .iter()
97 .map(|(k, v)| format!("{k}={v}"))
98 .collect::<Vec<_>>()
99 .join("&");
100 url.set_query(Some(&query_string));
101 }
102
103 self.make_request("GET", url.as_str(), None::<&()>).await
104 }
105}