mirror of
https://gitlab.com/comunic/comunicapiv2
synced 2024-11-22 13:29:22 +00:00
141 lines
3.3 KiB
TypeScript
141 lines
3.3 KiB
TypeScript
import { RequestHandler } from "../entities/RequestHandler";
|
|
import { NotificationsHelper } from "../helpers/NotificationsHelper";
|
|
import { ConversationsHelper } from "../helpers/ConversationsHelper";
|
|
import { FriendsHelper } from "../helpers/FriendsHelper";
|
|
import { Notif } from "../entities/Notification";
|
|
|
|
/**
|
|
* Notifications controller
|
|
*
|
|
* @author Pierre HUBERT
|
|
*/
|
|
|
|
export class NotificationsController {
|
|
|
|
/**
|
|
* Get the number of unread notifications
|
|
*
|
|
* @param h Request handler
|
|
*/
|
|
public static async CountUnread(h: RequestHandler) {
|
|
h.send({
|
|
number: await NotificationsHelper.CountUnread(h.getUserId())
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Count the entire number of unread notifications
|
|
*
|
|
* @param h Request handler
|
|
*/
|
|
public static async CountAllNews(h: RequestHandler) {
|
|
let data = {
|
|
notifications: await NotificationsHelper.CountUnread(h.getUserId()),
|
|
conversations: await ConversationsHelper.CountUnreadForUser(h.getUserId())
|
|
}
|
|
|
|
if(h.postBool("friends_request", false))
|
|
data["friends_requests"] = await FriendsHelper.CountRequests(h.getUserId());
|
|
|
|
// TODO : add pending calls
|
|
|
|
h.send(data);
|
|
}
|
|
|
|
/**
|
|
* Get the list of unread notifications
|
|
*
|
|
* @param h Request handler
|
|
*/
|
|
public static async GetListUnread(h: RequestHandler) {
|
|
const list = await NotificationsHelper.GetListUnread(h.getUserId());
|
|
|
|
h.send(list.map(this.NotifToAPI));
|
|
}
|
|
|
|
/**
|
|
* Mark a notification as seen
|
|
*
|
|
* @param h Request handler
|
|
*/
|
|
public static async MarkSeen(h: RequestHandler) {
|
|
const notifID = await this.PostNotifyID(h, "notifID")
|
|
const deleteSimilar = h.postBool("delete_similar", false)
|
|
|
|
// Check if we are targetting a precise notification or
|
|
// an unfinite number of similar notifications
|
|
if(!deleteSimilar) {
|
|
await NotificationsHelper.Delete(new Notif({
|
|
id: notifID
|
|
}))
|
|
}
|
|
|
|
else {
|
|
// Get information about the notification
|
|
const notif = await NotificationsHelper.GetSingle(notifID);
|
|
|
|
await NotificationsHelper.Delete(new Notif({
|
|
onElemType: notif.onElemType,
|
|
onElemID: notif.onElemID,
|
|
destUserID: h.getUserId()
|
|
}));
|
|
}
|
|
|
|
|
|
h.success()
|
|
}
|
|
|
|
/**
|
|
* Delete all the notifications of a specific user
|
|
*
|
|
* @param h Request handler
|
|
*/
|
|
public static async DeleteAll(h: RequestHandler) {
|
|
|
|
await NotificationsHelper.DeleteAllUser(h.getUserId());
|
|
|
|
h.success();
|
|
}
|
|
|
|
/**
|
|
* The the ID of a notification included in a request
|
|
*
|
|
* @param h Request handler
|
|
* @param name The name of the post field
|
|
*/
|
|
private static async PostNotifyID(h: RequestHandler, name: string) {
|
|
const notifID = h.postInt(name);
|
|
|
|
// Check if the notification exists and targets the current user
|
|
const n = new Notif({
|
|
id: notifID,
|
|
destUserID: h.getUserId()
|
|
});
|
|
|
|
if(!await NotificationsHelper.SimilarExists(n))
|
|
h.error(404, "Specified notification not found!");
|
|
|
|
return notifID;
|
|
}
|
|
|
|
/**
|
|
* Transform a notification into an API entry
|
|
*
|
|
* @param n The notification to transform
|
|
*/
|
|
private static NotifToAPI(n: Notif) : Object {
|
|
return {
|
|
id: n.id,
|
|
time_create: n.timeCreate,
|
|
seen: n.seen,
|
|
from_user_id: n.fromUserID,
|
|
dest_user_id: n.destUserID,
|
|
on_elem_id: n.onElemID,
|
|
on_elem_type: n.onElemType,
|
|
type: n.type,
|
|
event_visibility: n.eventVisibility,
|
|
from_container_id: n.fromContainerID,
|
|
from_container_type: n.fromContainerType
|
|
};
|
|
}
|
|
} |