Skip to main content

context69_sdk/client/
workspace.rs

1use context69_contracts::{
2    CreateGroupRequest, CreateProjectRequest, GroupMemberResponse, GroupResponse,
3    MoveProjectRequest, ProjectMemberResponse, ProjectResponse, UpdateGroupRequest,
4    UpdateProjectRequest, UpsertMembershipRequest, UserDirectoryEntryResponse,
5};
6use reqwest::Method;
7
8use crate::{Context69Client, Error};
9
10impl Context69Client {
11    pub async fn search_user_directory(
12        &self,
13        query: &str,
14        limit: usize,
15    ) -> Result<Vec<UserDirectoryEntryResponse>, Error> {
16        let mut url = self.url("/v1/user-directory")?;
17        {
18            let mut pairs = url.query_pairs_mut();
19            pairs.append_pair("query", query);
20            pairs.append_pair("limit", &limit.to_string());
21        }
22        self.execute_json(self.client.get(url).header(
23            reqwest::header::AUTHORIZATION,
24            format!(
25                        "Bearer {}",
26                        self.session
27                            .read()
28                            .await
29                            .personal_access_token
30                            .clone()
31                            .ok_or(Error::AuthenticationRequired)?
32                    ),
33        ))
34        .await
35    }
36
37    pub async fn list_groups(&self) -> Result<Vec<GroupResponse>, Error> {
38        self.execute_json(self.authorized_request(Method::GET, "/v1/groups").await?)
39            .await
40    }
41
42    pub async fn create_group(&self, request: &CreateGroupRequest) -> Result<GroupResponse, Error> {
43        self.execute_json(
44            self.authorized_request(Method::POST, "/v1/groups")
45                .await?
46                .json(request),
47        )
48        .await
49    }
50
51    pub async fn get_group(&self, group_key: &str) -> Result<GroupResponse, Error> {
52        let path = format!("/v1/groups/{group_key}");
53        self.execute_json(self.authorized_request(Method::GET, &path).await?)
54            .await
55    }
56
57    pub async fn update_group(
58        &self,
59        group_key: &str,
60        request: &UpdateGroupRequest,
61    ) -> Result<GroupResponse, Error> {
62        let path = format!("/v1/groups/{group_key}");
63        self.execute_json(
64            self.authorized_request(Method::PATCH, &path)
65                .await?
66                .json(request),
67        )
68        .await
69    }
70
71    pub async fn delete_group(&self, group_key: &str) -> Result<(), Error> {
72        let path = format!("/v1/groups/{group_key}");
73        self.execute_empty(self.authorized_request(Method::DELETE, &path).await?)
74            .await
75    }
76
77    pub async fn list_group_members(
78        &self,
79        group_key: &str,
80    ) -> Result<Vec<GroupMemberResponse>, Error> {
81        let path = format!("/v1/groups/{group_key}/members");
82        self.execute_json(self.authorized_request(Method::GET, &path).await?)
83            .await
84    }
85
86    pub async fn upsert_group_member(
87        &self,
88        group_key: &str,
89        request: &UpsertMembershipRequest,
90    ) -> Result<(), Error> {
91        let path = format!("/v1/groups/{group_key}/members");
92        self.execute_empty(
93            self.authorized_request(Method::POST, &path)
94                .await?
95                .json(request),
96        )
97        .await
98    }
99
100    pub async fn delete_group_member(
101        &self,
102        group_key: &str,
103        login_name: &str,
104    ) -> Result<(), Error> {
105        let path = format!("/v1/groups/{group_key}/members/{login_name}");
106        self.execute_empty(self.authorized_request(Method::DELETE, &path).await?)
107            .await
108    }
109
110    pub async fn list_projects(&self, group_key: &str) -> Result<Vec<ProjectResponse>, Error> {
111        let path = format!("/v1/groups/{group_key}/projects");
112        self.execute_json(self.authorized_request(Method::GET, &path).await?)
113            .await
114    }
115
116    pub async fn create_project(
117        &self,
118        group_key: &str,
119        request: &CreateProjectRequest,
120    ) -> Result<ProjectResponse, Error> {
121        let path = format!("/v1/groups/{group_key}/projects");
122        self.execute_json(
123            self.authorized_request(Method::POST, &path)
124                .await?
125                .json(request),
126        )
127        .await
128    }
129
130    pub async fn get_project(
131        &self,
132        group_key: &str,
133        project_key: &str,
134    ) -> Result<ProjectResponse, Error> {
135        let path = format!("/v1/groups/{group_key}/projects/{project_key}");
136        self.execute_json(self.authorized_request(Method::GET, &path).await?)
137            .await
138    }
139
140    pub async fn update_project(
141        &self,
142        group_key: &str,
143        project_key: &str,
144        request: &UpdateProjectRequest,
145    ) -> Result<ProjectResponse, Error> {
146        let path = format!("/v1/groups/{group_key}/projects/{project_key}");
147        self.execute_json(
148            self.authorized_request(Method::PATCH, &path)
149                .await?
150                .json(request),
151        )
152        .await
153    }
154
155    pub async fn delete_project(&self, group_key: &str, project_key: &str) -> Result<(), Error> {
156        let path = format!("/v1/groups/{group_key}/projects/{project_key}");
157        self.execute_empty(self.authorized_request(Method::DELETE, &path).await?)
158            .await
159    }
160
161    pub async fn move_project(
162        &self,
163        group_key: &str,
164        project_key: &str,
165        request: &MoveProjectRequest,
166    ) -> Result<ProjectResponse, Error> {
167        let path = format!("/v1/groups/{group_key}/projects/{project_key}/move");
168        self.execute_json(
169            self.authorized_request(Method::POST, &path)
170                .await?
171                .json(request),
172        )
173        .await
174    }
175
176    pub async fn list_project_members(
177        &self,
178        group_key: &str,
179        project_key: &str,
180    ) -> Result<Vec<ProjectMemberResponse>, Error> {
181        let path = format!("/v1/groups/{group_key}/projects/{project_key}/members");
182        self.execute_json(self.authorized_request(Method::GET, &path).await?)
183            .await
184    }
185
186    pub async fn upsert_project_member(
187        &self,
188        group_key: &str,
189        project_key: &str,
190        request: &UpsertMembershipRequest,
191    ) -> Result<(), Error> {
192        let path = format!("/v1/groups/{group_key}/projects/{project_key}/members");
193        self.execute_empty(
194            self.authorized_request(Method::POST, &path)
195                .await?
196                .json(request),
197        )
198        .await
199    }
200
201    pub async fn delete_project_member(
202        &self,
203        group_key: &str,
204        project_key: &str,
205        login_name: &str,
206    ) -> Result<(), Error> {
207        let path = format!("/v1/groups/{group_key}/projects/{project_key}/members/{login_name}");
208        self.execute_empty(self.authorized_request(Method::DELETE, &path).await?)
209            .await
210    }
211}