1
0
mirror of https://gitlab.com/comunic/comunicapiv2 synced 2024-11-22 13:29:22 +00:00

Can get the list of notifications of the user

This commit is contained in:
Pierre HUBERT 2019-12-28 12:57:55 +01:00
parent b4c44fff1b
commit e96cb38942
4 changed files with 156 additions and 0 deletions

View File

@ -2,6 +2,7 @@ import { RequestHandler } from "../entities/RequestHandler";
import { NotificationsHelper } from "../helpers/NotificationsHelper"; import { NotificationsHelper } from "../helpers/NotificationsHelper";
import { ConversationsHelper } from "../helpers/ConversationsHelper"; import { ConversationsHelper } from "../helpers/ConversationsHelper";
import { FriendsHelper } from "../helpers/FriendsHelper"; import { FriendsHelper } from "../helpers/FriendsHelper";
import { Notif } from "../entities/Notification";
/** /**
* Notifications controller * Notifications controller
@ -40,4 +41,36 @@ export class NotificationsController {
h.send(data); 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));
}
/**
* 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
};
}
} }

View File

@ -138,4 +138,6 @@ export const Routes : Route[] = [
{path: "/notifications/count_unread", cb: (h) => NotificationsController.CountUnread(h)}, {path: "/notifications/count_unread", cb: (h) => NotificationsController.CountUnread(h)},
{path: "/notifications/count_all_news", cb: (h) => NotificationsController.CountAllNews(h)}, {path: "/notifications/count_all_news", cb: (h) => NotificationsController.CountAllNews(h)},
{path: "/notifications/get_list_unread", cb: (h) => NotificationsController.GetListUnread(h)},
] ]

View File

@ -0,0 +1,82 @@
/**
* Notification object
*
* To avoid conflicts with the native Notification object,
* I renamed it Notif
*
* @author Pierre HUBERT
*/
export enum NotifElemType {
USER_PAGE = "user_page",
GROUP_PAGE = "group_page",
CONVERSATION = "conversation",
CONVERSATION_MESSAGE = "conversation_message",
POST = "post",
POST_TEXT = "post_text",
POST_IMAGE = "post_img",
POST_YOUTUBE = "post_youtube",
POST_MOVIE = "post_movie",
POST_WEBLINK = "post_weblink",
POST_PDF = "post_pdf",
POST_TIMER = "post_timer",
POST_SURVEY = "post_survey",
COMMENT = "comment",
FRIENDSHIP_REQUEST = "friend_request",
GROUP_MEMBERSHIP = "group_membership",
}
export enum NotifEventType {
COMMENT_CREATED = "comment_created",
SENT_FRIEND_REQUEST = "sent_friend_request",
ACCEPTED_FRIEND_REQUEST = "accepted_friend_request",
REJECTED_FRIEND_REQUEST = "rejected_friend_request",
ELEM_CREATED = "elem_created",
ELEM_UPDATED = "elem_updated",
SENT_GROUP_MEMBERSHIP_INVITATION = "sent_group_membership_invitation",
ACCEPTED_GROUP_MEMBERSHIP_INVITATION = "accepted_group_membership_invitation",
REJECTED_GROUP_MEMBERSHIP_INVITATION = "rejected_group_membership_invitation",
SENT_GROUP_MEMBERSHIP_REQUEST = "sent_group_membership_request",
ACCEPTED_GROUP_MEMBERSHIP_REQUEST = "accepted_group_membership_request",
REJECTED_GROUP_MEMBERSHIP_REQUEST = "rejected_group_membership_request",
}
export enum NotifEventVisibility {
EVENT_PRIVATE = "event_private",
EVENT_PUBLIC = "event_public",
}
export interface NotifBuilder {
id: number,
timeCreate: number,
seen: boolean,
fromUserID: number,
destUserID: number,
onElemID: number,
onElemType: NotifElemType,
type: NotifEventType,
eventVisibility: NotifEventVisibility,
fromContainerID ?: number,
fromContainerType ?: NotifElemType
}
export class Notif implements NotifBuilder {
id: number; timeCreate: number;
seen: boolean;
fromUserID: number;
destUserID: number;
onElemID: number;
onElemType: NotifElemType;
type: NotifEventType;
eventVisibility: NotifEventVisibility;
fromContainerID ?: number;
fromContainerType ?: NotifElemType;
constructor(info: NotifBuilder) {
for (const key in info) {
if (info.hasOwnProperty(key)) {
this[key] = info[key];
}
}
}
}

View File

@ -1,4 +1,5 @@
import { DatabaseHelper } from "./DatabaseHelper"; import { DatabaseHelper } from "./DatabaseHelper";
import { Notif } from "../entities/Notification";
/** /**
* Notifications helper * Notifications helper
@ -25,4 +26,42 @@ export class NotificationsHelper {
}); });
} }
/**
* Get the list of unread notifications of a user
*
* @param userID Target user ID
*/
public static async GetListUnread(userID: number) : Promise<Array<Notif>> {
const list = await DatabaseHelper.Query({
table: NOTIFICATIONS_TABLE,
where: {
dest_user_id: userID,
seen: 0
},
order: "id DESC"
});
return list.map((e) => this.DBToNotif(e));
}
/**
* Database entry to notification
*
* @param row Database entry
*/
private static DBToNotif(row: any) : Notif {
return new Notif({
id: row.id,
seen: row.seen == 1,
timeCreate: row.time_create,
fromUserID: row.from_user_id,
destUserID: row.dest_user_id,
onElemID: row.on_elem_id,
onElemType: row.on_elem_type,
type: row.type,
eventVisibility: row.visibility,
fromContainerID: row.from_container_id,
fromContainerType: row.from_container_type
});
}
} }