37 lines
1.4 KiB
JavaScript
37 lines
1.4 KiB
JavaScript
import { In } from "typeorm";
|
|
import { publishMainStream } from "../../../services/stream.js";
|
|
import { pushNotification } from "../../../services/push-notification.js";
|
|
import { Notifications, Users } from "../../../models/index.js";
|
|
export async function readNotification(userId, notificationIds) {
|
|
if (notificationIds.length === 0) return;
|
|
// Update documents
|
|
const result = await Notifications.update({
|
|
notifieeId: userId,
|
|
id: In(notificationIds),
|
|
isRead: false
|
|
}, {
|
|
isRead: true
|
|
});
|
|
if (result.affected === 0) return;
|
|
if (!await Users.getHasUnreadNotification(userId)) return postReadAllNotifications(userId);
|
|
else return postReadNotifications(userId, notificationIds);
|
|
}
|
|
export async function readNotificationByQuery(userId, query) {
|
|
const notificationIds = await Notifications.findBy({
|
|
...query,
|
|
notifieeId: userId,
|
|
isRead: false
|
|
}).then((notifications)=>notifications.map((notification)=>notification.id));
|
|
return readNotification(userId, notificationIds);
|
|
}
|
|
function postReadAllNotifications(userId) {
|
|
publishMainStream(userId, "readAllNotifications");
|
|
return pushNotification(userId, "readAllNotifications", undefined);
|
|
}
|
|
function postReadNotifications(userId, notificationIds) {
|
|
publishMainStream(userId, "readNotifications", notificationIds);
|
|
return pushNotification(userId, "readNotifications", {
|
|
notificationIds
|
|
});
|
|
}
|