1use crate::{
2 CreateMemberRequest, Member, MemberListResponse, Result, SumUpClient, UpdateMemberRequest,
3};
4
5impl SumUpClient {
6 pub async fn list_members(&self, merchant_code: &str) -> Result<MemberListResponse> {
11 let url = self.build_url(&format!("/v0.1/merchants/{}/members", merchant_code))?;
12
13 let response = self
14 .http_client
15 .get(url)
16 .bearer_auth(&self.api_key)
17 .send()
18 .await?;
19
20 if response.status().is_success() {
21 let members = response.json::<MemberListResponse>().await?;
22 Ok(members)
23 } else {
24 self.handle_error(response).await
25 }
26 }
27
28 pub async fn create_member(
34 &self,
35 merchant_code: &str,
36 body: &CreateMemberRequest,
37 ) -> Result<Member> {
38 let url = self.build_url(&format!("/v0.1/merchants/{}/members", merchant_code))?;
39
40 let response = self
41 .http_client
42 .post(url)
43 .bearer_auth(&self.api_key)
44 .json(body)
45 .send()
46 .await?;
47
48 if response.status().is_success() {
49 let member = response.json::<Member>().await?;
50 Ok(member)
51 } else {
52 self.handle_error(response).await
53 }
54 }
55
56 pub async fn retrieve_member(&self, merchant_code: &str, member_id: &str) -> Result<Member> {
62 let url = self.build_url(&format!(
63 "/v0.1/merchants/{}/members/{}",
64 merchant_code, member_id
65 ))?;
66
67 let response = self
68 .http_client
69 .get(url)
70 .bearer_auth(&self.api_key)
71 .send()
72 .await?;
73
74 if response.status().is_success() {
75 let member = response.json::<Member>().await?;
76 Ok(member)
77 } else {
78 self.handle_error(response).await
79 }
80 }
81
82 pub async fn update_member(
89 &self,
90 merchant_code: &str,
91 member_id: &str,
92 body: &UpdateMemberRequest,
93 ) -> Result<Member> {
94 let url = self.build_url(&format!(
95 "/v0.1/merchants/{}/members/{}",
96 merchant_code, member_id
97 ))?;
98
99 let response = self
100 .http_client
101 .put(url)
102 .bearer_auth(&self.api_key)
103 .json(body)
104 .send()
105 .await?;
106
107 if response.status().is_success() {
108 let member = response.json::<Member>().await?;
109 Ok(member)
110 } else {
111 self.handle_error(response).await
112 }
113 }
114
115 pub async fn delete_member(&self, merchant_code: &str, member_id: &str) -> Result<()> {
121 let url = self.build_url(&format!(
122 "/v0.1/merchants/{}/members/{}",
123 merchant_code, member_id
124 ))?;
125
126 let response = self
127 .http_client
128 .delete(url)
129 .bearer_auth(&self.api_key)
130 .send()
131 .await?;
132
133 if response.status().is_success() {
134 Ok(())
135 } else {
136 self.handle_error(response).await
137 }
138 }
139}