1
0
mirror of https://gitlab.com/comunic/comunicapiv3 synced 2025-06-21 00:45:18 +00:00

Notify about notifications number update

This commit is contained in:
2021-02-06 11:58:22 +01:00
parent 3e4d2872ea
commit dab76a3677
4 changed files with 74 additions and 9 deletions

View File

@ -4,12 +4,15 @@
use crate::data::error::Res;
use crate::data::conversation_message::ConversationMessage;
use crate::controllers::{conversations_controller, comments_controller};
use crate::controllers::{comments_controller, conversations_controller, notifications_controller};
use crate::data::comment::Comment;
use crate::data::conversation_message::ConversationMessage;
use crate::data::error::Res;
use crate::data::user::UserID;
pub enum Event<'a> {
/// Updated the number of notifications of one of multiple users user
UpdatedNotificationsNumber(&'a Vec<UserID>),
/// Created a new conversation message
NewConversationMessage(&'a ConversationMessage),
@ -37,5 +40,6 @@ pub enum Event<'a> {
pub fn propagate_event(e: &Event) -> Res {
conversations_controller::handle_event(e)?;
comments_controller::handle_event(e)?;
notifications_controller::handle_event(e)?;
Ok(())
}

View File

@ -5,12 +5,13 @@
use std::collections::HashMap;
use crate::constants::database_tables_names::NOTIFICATIONS_TABLE;
use crate::data::error::ResultBoxError;
use crate::data::error::{ExecError, ResultBoxError};
use crate::data::group_id::GroupID;
use crate::data::notification::{NotifElemType, NotifEventType, NotifEventVisibility, Notification, PartialNotification};
use crate::data::post::{PostID, PostPageKind, PostVisibilityLevel};
use crate::data::user::UserID;
use crate::helpers::{database, groups_helper, posts_helper};
use crate::helpers::{database, events_helper, groups_helper, posts_helper};
use crate::helpers::events_helper::Event;
use crate::helpers::friends_helper::GetFriendsQuery;
use crate::utils::date_utils;
@ -218,11 +219,17 @@ fn push_private(n: &mut PartialNotification) -> ResultBoxError {
/// Create a new notification
fn create(n: &PartialNotification) -> ResultBoxError {
if n.dest_user_id.is_none() || n.from_user_id.is_none()
{
return Err(ExecError::boxed_new("Trying to send a notification without a source or a destination!"));
}
database::InsertQuery::new(NOTIFICATIONS_TABLE)
.add_values(notif_to_db(n, true))
.insert_drop_result()?;
// TODO : Send a notification (updated_number_conversations)
// Send a notification (updated_number_conversations)
events_helper::propagate_event(&Event::UpdatedNotificationsNumber(&vec![n.dest_user_id.clone().unwrap()]))?;
Ok(())
}
@ -232,12 +239,19 @@ fn create(n: &PartialNotification) -> ResultBoxError {
pub fn delete(notification: &PartialNotification) -> ResultBoxError {
let conditions = notif_to_db(notification, false);
// Get the list of affected users
let users = database::QueryInfo::new(NOTIFICATIONS_TABLE)
.add_conditions(&conditions)
.add_field("dest_user_id")
.exec(|r| r.get_user_id("dest_user_id"))?;
// Delete the notifications
database::DeleteQuery::new(NOTIFICATIONS_TABLE)
.add_conditions(conditions)
.exec()?;
// TODO : Send a notification (updated_number_conversations)
// Send a notification (updated_number_conversations)
events_helper::propagate_event(&Event::UpdatedNotificationsNumber(&users))?;
Ok(())
}