userlib/store/
user_role_store.rs

1use std::collections::HashMap;
2use std::str::FromStr;
3
4use common::remote::services::USER_API;
5use common::store::build_exp_link;
6use common::store::{delete, get, post, put};
7use uuid::Uuid;
8
9use crate::dto::add_role_request::AddRoleRequest;
10use crate::dto::get_token_response::GetTokenResponse;
11use crate::dto::mailing_letters_request::MailingLettersRequest;
12use crate::dto::user_role_request::UserRoleRequest;
13use crate::dto::user_role_response::UserRoleResponse;
14use crate::dto::user_with_roles_response::UserWithRolesResponse;
15
16pub struct UserRoleStore {}
17
18impl UserRoleStore {
19    pub async fn create(new_user_role: UserRoleRequest) -> Result<UserRoleResponse, String> {
20        post::<_, UserRoleResponse>(
21            build_exp_link(USER_API, format!("/userRole")),
22            new_user_role,
23        )
24        .await
25    }
26
27    pub async fn get(user_role_id: Uuid) -> Result<UserRoleResponse, String> {
28        get::<UserRoleResponse>(build_exp_link(
29            USER_API,
30            format!("/userRole/{user_role_id}"),
31        ))
32        .await
33    }
34
35    pub async fn update(user_role: UserRoleRequest) -> Result<UserRoleResponse, String> {
36        // todo user role request
37        put::<_, UserRoleResponse>(build_exp_link(USER_API, format!("/userRole")), user_role).await
38    }
39
40    pub async fn delete(user_id: Uuid) -> Result<usize, String> {
41        delete::<usize>(build_exp_link(USER_API, format!("/userRole/{user_id}"))).await
42    }
43
44    pub async fn get_user_roles_by_list_ids(
45        ur_role_ids: Vec<Uuid>,
46    ) -> Result<HashMap<Uuid, UserRoleResponse>, String> {
47        post::<_, HashMap<Uuid, UserRoleResponse>>(
48            build_exp_link(USER_API, format!("/userRole/getUserRolesByListIds")),
49            ur_role_ids,
50        )
51        .await
52    }
53
54    pub async fn mailing_letters(
55        select_type: i32,
56        org_type: String,
57        data: MailingLettersRequest,
58    ) -> Result<String, String> {
59        post::<_, String>(
60            build_exp_link(
61                USER_API,
62                format!("/userRole/mailingLetters/{select_type}/{org_type}"),
63            ),
64            data,
65        )
66        .await
67    }
68
69    pub async fn change_current(id: Uuid) -> Result<GetTokenResponse, String> {
70        get::<GetTokenResponse>(build_exp_link(
71            USER_API,
72            format!("/userRole/changeCurrent{id}"),
73        ))
74        .await
75    }
76
77    pub async fn get_current() -> Result<UserRoleResponse, String> {
78        get::<UserRoleResponse>(build_exp_link(USER_API, format!("/userRole/current"))).await
79    }
80
81    pub async fn set_first_login() -> Result<UserRoleResponse, String> {
82        // todo user role request
83        put::<_, UserRoleResponse>(
84            build_exp_link(USER_API, format!("/userRole/setFirstLogin")),
85            serde_json::Value::from_str("{}").unwrap(),
86        )
87        .await
88    }
89
90    pub async fn get_by_user(id: Uuid) -> Result<Vec<UserRoleResponse>, String> {
91        get::<Vec<UserRoleResponse>>(build_exp_link(
92            USER_API,
93            format!("/userRole/findByUser/{id}"),
94        ))
95        .await
96    }
97
98    pub async fn get_facilitators_users_for_org() -> Result<Vec<UserWithRolesResponse>, String> {
99        get::<Vec<UserWithRolesResponse>>(build_exp_link(
100            USER_API,
101            format!("/userRole/facilitatorsUsersForOrg"),
102        ))
103        .await
104    }
105
106    pub async fn get_students_for_org() -> Result<Vec<UserRoleResponse>, String> {
107        get::<Vec<UserRoleResponse>>(build_exp_link(
108            USER_API,
109            format!("/userRole/studentsForOrg"),
110        ))
111        .await
112    }
113
114    pub async fn add_class_manager_role(user_id: Uuid, org_id: Uuid) -> Result<String, String> {
115        post::<_, String>(
116            build_exp_link(
117                USER_API,
118                format!("/userRole/addClassManagerRole/{user_id}/{org_id}"),
119            ),
120            serde_json::Value::from_str("{}").unwrap(),
121        )
122        .await
123    }
124
125    pub async fn get_students_for_class(class_id: Uuid) -> Result<Vec<UserRoleResponse>, String> {
126        get::<Vec<UserRoleResponse>>(build_exp_link(
127            USER_API,
128            format!("/userRole/studentsForClass/{class_id}"),
129        ))
130        .await
131    }
132
133    pub async fn edit_class(
134        ur_id: Uuid,
135        class_id: Uuid,
136        subgroups: Vec<Uuid>,
137    ) -> Result<UserRoleResponse, String> {
138        put::<_, UserRoleResponse>(
139            build_exp_link(
140                USER_API,
141                format!("/userRole/editSchoolClass/{ur_id}/{class_id}"),
142            ),
143            subgroups,
144        )
145        .await
146    }
147
148    pub async fn edit_administration(
149        ur_id: Uuid,
150        allowed: bool,
151    ) -> Result<UserWithRolesResponse, String> {
152        put::<_, UserWithRolesResponse>(
153            build_exp_link(
154                USER_API,
155                format!("/userRole/editAdministration/{ur_id}/{allowed}"),
156            ),
157            serde_json::Value::from_str("{}").unwrap(),
158        )
159        .await
160    }
161
162    pub async fn add_role(new_user_role: AddRoleRequest) -> Result<UserRoleResponse, String> {
163        post::<_, UserRoleResponse>(
164            build_exp_link(USER_API, format!("/userRole/addRole")),
165            new_user_role,
166        )
167        .await
168    }
169}