mirror of
https://gitlab.com/comunic/comunicapiv3
synced 2025-06-21 00:45:18 +00:00
Implement presence mechanismes
This commit is contained in:
@ -5,12 +5,14 @@
|
||||
//!
|
||||
//! @author Pierre Hubert
|
||||
|
||||
use crate::data::http_request_handler::HttpRequestHandler;
|
||||
use crate::routes::RequestResult;
|
||||
use crate::data::config::conf;
|
||||
use crate::data::base_request_handler::BaseRequestHandler;
|
||||
use crate::api_data::group_api::GroupApi;
|
||||
use crate::helpers::groups_helper;
|
||||
use crate::data::base_request_handler::BaseRequestHandler;
|
||||
use crate::data::config::conf;
|
||||
use crate::data::http_request_handler::HttpRequestHandler;
|
||||
use crate::data::presence::Presence;
|
||||
use crate::data::user_ws_request_handler::UserWsRequestHandler;
|
||||
use crate::helpers::{forez_presence_helper, groups_helper};
|
||||
use crate::routes::RequestResult;
|
||||
|
||||
/// Get the list of declared Forez groups in the application
|
||||
pub fn get_list_groups(r: &mut HttpRequestHandler) -> RequestResult {
|
||||
@ -21,4 +23,115 @@ pub fn get_list_groups(r: &mut HttpRequestHandler) -> RequestResult {
|
||||
}
|
||||
|
||||
r.set_response(list)
|
||||
}
|
||||
|
||||
/// Set presence
|
||||
///
|
||||
/// Presences format: YYYY,MM,DD;YYYY,MM,DD;...
|
||||
pub fn set_presence(r: &mut UserWsRequestHandler) -> RequestResult {
|
||||
let group = r.post_forez_group("group")?;
|
||||
let presences = r.post_string_opt("presence", 0, false)?;
|
||||
|
||||
let mut list = vec![];
|
||||
for p in presences.split(";") {
|
||||
if p == "" {
|
||||
continue;
|
||||
}
|
||||
|
||||
let info: Vec<&str> = p.split(",").collect();
|
||||
|
||||
if info.len() != 3 {
|
||||
r.bad_request("Invalid presence information!".to_string())?;
|
||||
}
|
||||
|
||||
let year = info[0].parse::<u32>()?;
|
||||
let month = info[1].parse::<u16>()?;
|
||||
let day = info[2].parse::<u16>()?;
|
||||
|
||||
if year < 2020 || year > 2100 {
|
||||
r.bad_request("Invalid year specified!".to_string())?;
|
||||
}
|
||||
|
||||
if month < 1 || month > 12 {
|
||||
r.bad_request("Invalid month specified!".to_string())?;
|
||||
}
|
||||
|
||||
if day < 1 || day > 31 {
|
||||
r.bad_request("Invalid day specified!".to_string())?;
|
||||
}
|
||||
|
||||
let presence = Presence {
|
||||
id: 0,
|
||||
user_id: r.user_id()?,
|
||||
year,
|
||||
month,
|
||||
day,
|
||||
};
|
||||
|
||||
if !list.contains(&presence) {
|
||||
list.push(presence);
|
||||
}
|
||||
}
|
||||
|
||||
forez_presence_helper::update(&group, &r.user_id()?, list)?;
|
||||
|
||||
r.success("Presences updated.")
|
||||
}
|
||||
|
||||
/// Get the list of presences of all the members of a group
|
||||
///
|
||||
/// Format: USER_ID,YYYY,MM,DD
|
||||
pub fn get_list<H: BaseRequestHandler>(r: &mut H) -> RequestResult {
|
||||
let group = r.post_forez_group("group")?;
|
||||
let list = forez_presence_helper::get_list(&group)?;
|
||||
|
||||
let list = list
|
||||
.iter()
|
||||
.map(|p| format!("{},{},{},{}", p.user_id.id(), p.year, p.month, p.day))
|
||||
.collect::<Vec<String>>();
|
||||
|
||||
r.set_response(list)
|
||||
}
|
||||
|
||||
/// Add a new day of presence
|
||||
pub fn add_day<H: BaseRequestHandler>(r: &mut H) -> RequestResult {
|
||||
let group = r.post_forez_group("group")?;
|
||||
|
||||
let mut list = forez_presence_helper::get_user_presences(&group, &r.user_id()?)?;
|
||||
|
||||
let presence = Presence {
|
||||
id: 0,
|
||||
user_id: r.user_id()?,
|
||||
year: r.post_u32("year")?,
|
||||
month: r.post_u16("month")?,
|
||||
day: r.post_u16("day")?,
|
||||
};
|
||||
|
||||
if !list.contains(&presence) {
|
||||
list.push(presence);
|
||||
}
|
||||
|
||||
forez_presence_helper::update(&group, &r.user_id()?, list)?;
|
||||
|
||||
r.success("Updated presences.")
|
||||
}
|
||||
|
||||
/// Remove a day of presence
|
||||
pub fn del_day<H: BaseRequestHandler>(r: &mut H) -> RequestResult {
|
||||
let group = r.post_forez_group("group")?;
|
||||
|
||||
let mut list = forez_presence_helper::get_user_presences(&group, &r.user_id()?)?;
|
||||
|
||||
let presence = Presence {
|
||||
id: 0,
|
||||
user_id: r.user_id()?,
|
||||
year: r.post_u32("year")?,
|
||||
month: r.post_u16("month")?,
|
||||
day: r.post_u16("day")?,
|
||||
};
|
||||
|
||||
list.retain(|el| el != &presence);
|
||||
forez_presence_helper::update(&group, &r.user_id()?, list)?;
|
||||
|
||||
r.success("Updated presences.")
|
||||
}
|
Reference in New Issue
Block a user