90 lines
3.3 KiB
Rust
90 lines
3.3 KiB
Rust
use crate::database::controller::connector::establish_connection;
|
|
use crate::database::controller::groups::get_groups_for_member;
|
|
use crate::database::model::api_members::RawMemberSearchResult;
|
|
use crate::helper::check_access::check_access_to_member_and_group;
|
|
use crate::helper::settings::Settings;
|
|
use crate::modules::api::members::get_member::MemberSearchResult;
|
|
use diesel::{ExpressionMethods, JoinOnDsl, QueryDsl, RunQueryDsl};
|
|
use rocket::State;
|
|
|
|
pub fn get_raw_member_search_results_in_group(
|
|
settings: &State<Settings>,
|
|
group_entity_id: uuid::Uuid,
|
|
) -> Result<Vec<RawMemberSearchResult>, diesel::result::Error> {
|
|
use crate::schema::groups_entities::dsl::*;
|
|
use crate::schema::members::dsl::*;
|
|
|
|
let connection = establish_connection(settings);
|
|
|
|
let memberlist: Result<Vec<RawMemberSearchResult>, diesel::result::Error> =
|
|
members
|
|
.left_join(groups_entities.on(
|
|
crate::schema::groups_entities::entity_id.eq(crate::schema::members::entity_id),
|
|
))
|
|
.filter(group_id.eq(group_entity_id))
|
|
.select((crate::schema::members::entity_id, firstname, lastname))
|
|
.load(&connection);
|
|
|
|
match memberlist {
|
|
Ok(list) => Ok(list),
|
|
Err(e) => {
|
|
error!("Couldn't get members for group: {}", e);
|
|
Err(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn get_member_search_results_in_group(
|
|
settings: &State<Settings>,
|
|
group_entity_id: uuid::Uuid,
|
|
caller_entity_id: uuid::Uuid,
|
|
) -> Result<Vec<MemberSearchResult>, diesel::result::Error> {
|
|
let raw_memberlist = get_raw_member_search_results_in_group(settings, group_entity_id)?;
|
|
let mut memberlist: Vec<MemberSearchResult> = vec![];
|
|
|
|
for member in raw_memberlist {
|
|
let readable = check_access_to_member_and_group(
|
|
settings,
|
|
member.entity_id,
|
|
get_groups_for_member(settings, member.entity_id),
|
|
caller_entity_id,
|
|
crate::permissions::modules::member_management::profile::VIEW.to_string(),
|
|
);
|
|
memberlist.push(MemberSearchResult {
|
|
entity_id: member.entity_id,
|
|
firstname: member.firstname,
|
|
lastname: member.lastname,
|
|
readable,
|
|
});
|
|
}
|
|
|
|
Ok(memberlist)
|
|
}
|
|
|
|
pub fn add_member_to_group(settings: &State<Settings>, member_id : uuid::Uuid, group_id2 : uuid::Uuid) -> Result<(), diesel::result::Error>{
|
|
use crate::schema::groups_entities::dsl::*;
|
|
|
|
let connection = establish_connection(settings);
|
|
|
|
match diesel::insert_into(groups_entities).values((group_id.eq(&group_id2), entity_id.eq(&member_id))).execute(&connection){
|
|
Ok(_) => Ok(()),
|
|
Err(e) => {
|
|
error!("Couldn't add member {} to group {}: {}", member_id, group_id2, e);
|
|
Err(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn remove_member_from_group(settings: &State<Settings>, member_id : uuid::Uuid, group_id2 : uuid::Uuid) -> Result<(), diesel::result::Error>{
|
|
use crate::schema::groups_entities::dsl::*;
|
|
|
|
let connection = establish_connection(settings);
|
|
|
|
match diesel::delete(groups_entities).filter(group_id.eq(group_id2)).filter(entity_id.eq(member_id)).execute(&connection){
|
|
Ok(_) => Ok(()),
|
|
Err(e) => {
|
|
error!("Couldn't remove member {} from group {}: {}", member_id, group_id2, e);
|
|
Err(e)
|
|
}
|
|
}
|
|
} |