1
0
mirror of https://gitlab.com/comunic/comunicapiv3 synced 2024-11-23 05:49:22 +00:00

Add the method /notifications/count_all_news

This commit is contained in:
Pierre HUBERT 2020-07-10 13:31:40 +02:00
parent 32aa7e7d1e
commit 1eac896291
5 changed files with 57 additions and 2 deletions

View File

@ -38,4 +38,5 @@ pub mod comment_api;
pub mod res_create_post; pub mod res_create_post;
pub mod posts_targets_api; pub mod posts_targets_api;
pub mod res_create_comment; pub mod res_create_comment;
pub mod res_number_unread_notifications; pub mod res_number_unread_notifications;
pub mod res_count_all_unreads;

View File

@ -0,0 +1,30 @@
//! # Count unread notifications & conversation
//!
//! Optionally includes friendship requests too
//!
//! @author Pierre Hubert
use serde::Serialize;
#[derive(Serialize)]
struct CountFriendsRequests {
friends_requests: u64,
}
#[derive(Serialize)]
pub struct ResCountAllUnread {
notifications: u64,
conversations: u64,
#[serde(flatten)]
friends: Option<CountFriendsRequests>,
}
impl ResCountAllUnread {
pub fn new(notifications: u64, conversations: u64, friends_requests: Option<u64>) -> ResCountAllUnread {
ResCountAllUnread {
notifications,
conversations,
friends: friends_requests.map(|n| CountFriendsRequests { friends_requests: n }),
}
}
}

View File

@ -2,13 +2,26 @@
//! //!
//! @author Pierre Hubert //! @author Pierre Hubert
use crate::api_data::res_count_all_unreads::ResCountAllUnread;
use crate::api_data::res_number_unread_notifications::ResNumberUnreadNotifications; use crate::api_data::res_number_unread_notifications::ResNumberUnreadNotifications;
use crate::controllers::routes::RequestResult; use crate::controllers::routes::RequestResult;
use crate::data::http_request_handler::HttpRequestHandler; use crate::data::http_request_handler::HttpRequestHandler;
use crate::helpers::notifications_helper; use crate::helpers::{conversations_helper, friends_helper, notifications_helper};
/// Count the number of unread notifications /// Count the number of unread notifications
pub fn count_unread(r: &mut HttpRequestHandler) -> RequestResult { pub fn count_unread(r: &mut HttpRequestHandler) -> RequestResult {
let number = notifications_helper::count_unread(r.user_id_ref()?)?; let number = notifications_helper::count_unread(r.user_id_ref()?)?;
r.set_response(ResNumberUnreadNotifications::new(number)) 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))
} }

View File

@ -247,6 +247,8 @@ pub fn get_routes() -> Vec<Route> {
// Notifications controller // Notifications controller
Route::post("/notifications/count_unread", Box::new(notifications_controller::count_unread)), Route::post("/notifications/count_unread", Box::new(notifications_controller::count_unread)),
Route::post("/notifications/count_all_news", Box::new(notifications_controller::count_all_news)),
// Movies controller // Movies controller
Route::post("/movies/get_list", Box::new(movies_controller::get_list)), Route::post("/movies/get_list", Box::new(movies_controller::get_list)),

View File

@ -238,6 +238,15 @@ pub fn get_status(user_id: &UserID, friend_id: &UserID) -> ResultBoxError<Friend
Ok(status) Ok(status)
} }
/// Count the number of friendship requests of a user
pub fn count_requests(user_id: &UserID) -> ResultBoxError<u64> {
database::QueryInfo::new(FRIENDS_TABLE)
.cond_user_id("ID_personne", user_id)
.cond_legacy_bool("actif", false)
.exec_count()
.map(|r| r as u64)
}
/// Turn a database entry into a Friend structure /// Turn a database entry into a Friend structure
fn db_to_friend(row: &database::RowResult) -> ResultBoxError<Friend> { fn db_to_friend(row: &database::RowResult) -> ResultBoxError<Friend> {
Ok(Friend { Ok(Friend {