userlib/store/
user_role_store.rs1use 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 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 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}