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:
parent
32aa7e7d1e
commit
1eac896291
@ -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;
|
30
src/api_data/res_count_all_unreads.rs
Normal file
30
src/api_data/res_count_all_unreads.rs
Normal 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 }),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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))
|
||||||
}
|
}
|
@ -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)),
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user