use std::collections::HashMap;
use std::str::FromStr;
use common::remote::services::USER_API;
use common::store::build_exp_link;
use common::store::{delete, get, post, put};
use uuid::Uuid;
use crate::dto::add_role_request::AddRoleRequest;
use crate::dto::get_token_response::GetTokenResponse;
use crate::dto::mailing_letters_request::MailingLettersRequest;
use crate::dto::user_role_request::UserRoleRequest;
use crate::dto::user_role_response::UserRoleResponse;
use crate::dto::user_with_roles_response::UserWithRolesResponse;
pub struct UserRoleStore {}
impl UserRoleStore {
pub async fn create(new_user_role: UserRoleRequest) -> Result<UserRoleResponse, String> {
post::<_, UserRoleResponse>(
build_exp_link(USER_API, format!("/userRole")),
new_user_role,
)
.await
}
pub async fn get(user_role_id: Uuid) -> Result<UserRoleResponse, String> {
get::<UserRoleResponse>(build_exp_link(
USER_API,
format!("/userRole/{user_role_id}"),
))
.await
}
pub async fn update(user_role: UserRoleRequest) -> Result<UserRoleResponse, String> {
put::<_, UserRoleResponse>(build_exp_link(USER_API, format!("/userRole")), user_role).await
}
pub async fn delete(user_id: Uuid) -> Result<usize, String> {
delete::<usize>(build_exp_link(USER_API, format!("/userRole/{user_id}"))).await
}
pub async fn get_user_roles_by_list_ids(
ur_role_ids: Vec<Uuid>,
) -> Result<HashMap<Uuid, UserRoleResponse>, String> {
post::<_, HashMap<Uuid, UserRoleResponse>>(
build_exp_link(USER_API, format!("/userRole/getUserRolesByListIds")),
ur_role_ids,
)
.await
}
pub async fn mailing_letters(
select_type: i32,
org_type: String,
data: MailingLettersRequest,
) -> Result<String, String> {
post::<_, String>(
build_exp_link(
USER_API,
format!("/userRole/mailingLetters/{select_type}/{org_type}"),
),
data,
)
.await
}
pub async fn change_current(id: Uuid) -> Result<GetTokenResponse, String> {
get::<GetTokenResponse>(build_exp_link(
USER_API,
format!("/userRole/changeCurrent{id}"),
))
.await
}
pub async fn get_current() -> Result<UserRoleResponse, String> {
get::<UserRoleResponse>(build_exp_link(USER_API, format!("/userRole/current"))).await
}
pub async fn set_first_login() -> Result<UserRoleResponse, String> {
put::<_, UserRoleResponse>(
build_exp_link(USER_API, format!("/userRole/setFirstLogin")),
serde_json::Value::from_str("{}").unwrap(),
)
.await
}
pub async fn get_by_user(id: Uuid) -> Result<Vec<UserRoleResponse>, String> {
get::<Vec<UserRoleResponse>>(build_exp_link(
USER_API,
format!("/userRole/findByUser/{id}"),
))
.await
}
pub async fn get_facilitators_users_for_org() -> Result<Vec<UserWithRolesResponse>, String> {
get::<Vec<UserWithRolesResponse>>(build_exp_link(
USER_API,
format!("/userRole/facilitatorsUsersForOrg"),
))
.await
}
pub async fn get_students_for_org() -> Result<Vec<UserRoleResponse>, String> {
get::<Vec<UserRoleResponse>>(build_exp_link(
USER_API,
format!("/userRole/studentsForOrg"),
))
.await
}
pub async fn add_class_manager_role(user_id: Uuid, org_id: Uuid) -> Result<String, String> {
post::<_, String>(
build_exp_link(
USER_API,
format!("/userRole/addClassManagerRole/{user_id}/{org_id}"),
),
serde_json::Value::from_str("{}").unwrap(),
)
.await
}
pub async fn get_students_for_class(class_id: Uuid) -> Result<Vec<UserRoleResponse>, String> {
get::<Vec<UserRoleResponse>>(build_exp_link(
USER_API,
format!("/userRole/studentsForClass/{class_id}"),
))
.await
}
pub async fn edit_class(
ur_id: Uuid,
class_id: Uuid,
subgroups: Vec<Uuid>,
) -> Result<UserRoleResponse, String> {
put::<_, UserRoleResponse>(
build_exp_link(
USER_API,
format!("/userRole/editSchoolClass/{ur_id}/{class_id}"),
),
subgroups,
)
.await
}
pub async fn edit_administration(
ur_id: Uuid,
allowed: bool,
) -> Result<UserWithRolesResponse, String> {
put::<_, UserWithRolesResponse>(
build_exp_link(
USER_API,
format!("/userRole/editAdministration/{ur_id}/{allowed}"),
),
serde_json::Value::from_str("{}").unwrap(),
)
.await
}
pub async fn add_role(new_user_role: AddRoleRequest) -> Result<UserRoleResponse, String> {
post::<_, UserRoleResponse>(
build_exp_link(USER_API, format!("/userRole/addRole")),
new_user_role,
)
.await
}
}