feat: count failed attempts
This commit is contained in:
parent
169df9715e
commit
6213f3941c
1 changed files with 21 additions and 3 deletions
|
|
@ -5,6 +5,8 @@ import { DateTime } from 'luxon'
|
||||||
import { UAParser } from 'ua-parser-js'
|
import { UAParser } from 'ua-parser-js'
|
||||||
import webpush, { PushSubscription } from 'web-push'
|
import webpush, { PushSubscription } from 'web-push'
|
||||||
|
|
||||||
|
const MAX_FAILED_ATTEMPTS = 5
|
||||||
|
|
||||||
export const EVENTS = {
|
export const EVENTS = {
|
||||||
SYSTEM: 1 << 0,
|
SYSTEM: 1 << 0,
|
||||||
|
|
||||||
|
|
@ -55,12 +57,28 @@ export class NotificationService {
|
||||||
const subscriptions = await Subscription.query()
|
const subscriptions = await Subscription.query()
|
||||||
.where('enabled', true)
|
.where('enabled', true)
|
||||||
.where('userId', colle.studentId)
|
.where('userId', colle.studentId)
|
||||||
// TODO: Check if working??
|
|
||||||
.whereRaw(`(events & ${EVENTS[notificationId]}) > 0`)
|
.whereRaw(`(events & ${EVENTS[notificationId]}) > 0`)
|
||||||
|
|
||||||
for (const subscription of subscriptions) {
|
for (const subscription of subscriptions) {
|
||||||
await this.pushNotification(subscription.data, payload)
|
try {
|
||||||
// TODO: Count failed attempts and disable subscription if too many failures
|
await this.pushNotification(subscription.data, payload)
|
||||||
|
// Reset failed attempts on successful notification
|
||||||
|
if (subscription.failedAttempts) {
|
||||||
|
subscription.failedAttempts = 0
|
||||||
|
await subscription.save()
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error(
|
||||||
|
`Error sending notification for ${notificationId} to user ${colle.studentId}:`,
|
||||||
|
err
|
||||||
|
)
|
||||||
|
// Increment failed attempts and disable subscription if too many failures
|
||||||
|
subscription.failedAttempts = (subscription.failedAttempts || 0) + 1
|
||||||
|
if (subscription.failedAttempts >= MAX_FAILED_ATTEMPTS) {
|
||||||
|
subscription.enabled = false
|
||||||
|
}
|
||||||
|
await subscription.save()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue