EinsatzOnline/src/database/controller/members_groups.rs

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)
}
}
}