1
0
mirror of https://gitlab.com/comunic/comunicapiv3 synced 2025-01-08 11:42:35 +00:00
comunicapiv3/src/controllers/notifications_controller.rs

75 lines
2.7 KiB
Rust
Raw Normal View History

//! # Notifications controller
//!
//! @author Pierre Hubert
use crate::api_data::notification_api::NotificationAPI;
use crate::api_data::res_count_all_unreads::ResCountAllUnread;
use crate::api_data::res_number_unread_notifications::ResNumberUnreadNotifications;
use crate::controllers::routes::RequestResult;
use crate::data::error::ResultBoxError;
use crate::data::http_request_handler::HttpRequestHandler;
2020-07-11 11:57:20 +00:00
use crate::data::notification::{Notification, PartialNotification};
use crate::helpers::{conversations_helper, friends_helper, notifications_helper};
impl HttpRequestHandler {
/// Get the id of a notification included in the request
2020-07-11 11:57:20 +00:00
pub fn post_notif_id(&mut self, name: &str) -> ResultBoxError<Notification> {
let notif_id = self.post_u64(name)?;
2020-07-11 11:57:20 +00:00
let notif = self.ok_or_not_found(
notifications_helper::get_single(notif_id),
"Specified notification not found!",
)?;
2020-07-11 11:57:20 +00:00
if notif.dest_user_id != self.user_id()? {
self.forbidden("You are not allowed to access this notification!".to_string())?;
}
2020-07-11 11:57:20 +00:00
Ok(notif)
}
}
/// Count the number of unread notifications
pub fn count_unread(r: &mut HttpRequestHandler) -> RequestResult {
let number = notifications_helper::count_unread(r.user_id_ref()?)?;
r.set_response(ResNumberUnreadNotifications::new(number))
}
/// Count the number of unread notifications
pub fn count_all_news(r: &mut HttpRequestHandler) -> RequestResult {
let notifications = notifications_helper::count_unread(r.user_id_ref()?)?;
let conversations = conversations_helper::count_unread_for_user(r.user_id_ref()?)?;
let friends_requests = match r.post_bool_opt("friends_request", false) {
true => Some(friends_helper::count_requests(r.user_id_ref()?)?),
false => None
};
r.set_response(ResCountAllUnread::new(notifications, conversations as u64, friends_requests))
}
/// Get the list of unread notifications
pub fn get_list_unread(r: &mut HttpRequestHandler) -> RequestResult {
let list = notifications_helper::get_list_unread(r.user_id_ref()?)?;
r.set_response(NotificationAPI::for_list(&list))
}
/// Mark a notification as seen
pub fn mark_seen(r: &mut HttpRequestHandler) -> RequestResult {
2020-07-11 11:57:20 +00:00
let notif = r.post_notif_id("notifID")?;
let delete_similar = r.post_bool_opt("delete_similar", false);
2020-07-11 11:47:07 +00:00
// Check if we are targeting a precise notification or an undetermined number of similar
// notifications
if !delete_similar {
notifications_helper::delete(
&PartialNotification::new()
2020-07-11 11:57:20 +00:00
.set_id(notif.id)
2020-07-11 11:47:07 +00:00
)?;
2020-07-11 11:57:20 +00:00
} else {
2020-07-11 11:47:07 +00:00
// TODO : implement me
unimplemented!();
}
r.success("Notification deleted")
}