mirror of
https://github.com/binwiederhier/ntfy.git
synced 2024-11-03 10:24:14 +01:00
76 lines
2.2 KiB
JavaScript
76 lines
2.2 KiB
JavaScript
|
import db from "./db";
|
||
|
|
||
|
class SubscriptionManager {
|
||
|
async all() {
|
||
|
return db.subscriptions.toArray();
|
||
|
}
|
||
|
|
||
|
async get(subscriptionId) {
|
||
|
return await db.subscriptions.get(subscriptionId)
|
||
|
}
|
||
|
|
||
|
async save(subscription) {
|
||
|
await db.subscriptions.put(subscription);
|
||
|
}
|
||
|
|
||
|
async remove(subscriptionId) {
|
||
|
await db.subscriptions.delete(subscriptionId);
|
||
|
await db.notifications
|
||
|
.where({subscriptionId: subscriptionId})
|
||
|
.delete();
|
||
|
}
|
||
|
|
||
|
async first() {
|
||
|
return db.subscriptions.toCollection().first(); // May be undefined
|
||
|
}
|
||
|
|
||
|
async getNotifications(subscriptionId) {
|
||
|
return db.notifications
|
||
|
.where({ subscriptionId: subscriptionId })
|
||
|
.toArray();
|
||
|
}
|
||
|
|
||
|
/** Adds notification, or returns false if it already exists */
|
||
|
async addNotification(subscriptionId, notification) {
|
||
|
const exists = await db.notifications.get(notification.id);
|
||
|
if (exists) {
|
||
|
return false;
|
||
|
}
|
||
|
await db.notifications.add({ ...notification, subscriptionId });
|
||
|
await db.subscriptions.update(subscriptionId, {
|
||
|
last: notification.id
|
||
|
});
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/** Adds/replaces notifications, will not throw if they exist */
|
||
|
async addNotifications(subscriptionId, notifications) {
|
||
|
const notificationsWithSubscriptionId = notifications
|
||
|
.map(notification => ({ ...notification, subscriptionId }));
|
||
|
const lastNotificationId = notifications.at(-1).id;
|
||
|
await db.notifications.bulkPut(notificationsWithSubscriptionId);
|
||
|
await db.subscriptions.update(subscriptionId, {
|
||
|
last: lastNotificationId
|
||
|
});
|
||
|
}
|
||
|
|
||
|
async deleteNotification(notificationId) {
|
||
|
await db.notifications.delete(notificationId);
|
||
|
}
|
||
|
|
||
|
async deleteNotifications(subscriptionId) {
|
||
|
await db.notifications
|
||
|
.where({subscriptionId: subscriptionId})
|
||
|
.delete();
|
||
|
}
|
||
|
|
||
|
async pruneNotifications(thresholdTimestamp) {
|
||
|
await db.notifications
|
||
|
.where("time").below(thresholdTimestamp)
|
||
|
.delete();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const subscriptionManager = new SubscriptionManager();
|
||
|
export default subscriptionManager;
|