iceshrimp-legacy/packages/backend/src/server/api/common/read-notification.ts
ThatOneCalculator 6b00abf05c
refactor: 🎨 rome
2023-01-12 20:40:33 -08:00

60 lines
1.6 KiB
TypeScript

import { In } from "typeorm";
import { publishMainStream } from "@/services/stream.js";
import { pushNotification } from "@/services/push-notification.js";
import type { User } from "@/models/entities/user.js";
import type { Notification } from "@/models/entities/notification.js";
import { Notifications, Users } from "@/models/index.js";
export async function readNotification(
userId: User["id"],
notificationIds: Notification["id"][],
) {
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: User["id"],
query: Record<string, any>,
) {
const notificationIds = await Notifications.findBy({
...query,
notifieeId: userId,
isRead: false,
}).then((notifications) =>
notifications.map((notification) => notification.id),
);
return readNotification(userId, notificationIds);
}
function postReadAllNotifications(userId: User["id"]) {
publishMainStream(userId, "readAllNotifications");
return pushNotification(userId, "readAllNotifications", undefined);
}
function postReadNotifications(
userId: User["id"],
notificationIds: Notification["id"][],
) {
publishMainStream(userId, "readNotifications", notificationIds);
return pushNotification(userId, "readNotifications", { notificationIds });
}