fix: preserve brief notification preferences
All checks were successful
CI / Lint, test, typecheck and build (push) Successful in 10m45s

This commit is contained in:
zv
2026-07-04 15:28:58 +02:00
parent b1cbc771f8
commit f15ebd28dc
4 changed files with 53 additions and 8 deletions

View File

@@ -66,12 +66,24 @@ export async function GET(request: Request) {
const now = new Date();
const briefTime = normalizeTime(process.env.NOTIFICATIONS_TOMORROW_BRIEF_TIME, DEFAULT_TOMORROW_BRIEF_TIME);
const subscriptions = getPushSubscriptions().filter(
const allSubscriptions = getPushSubscriptions();
const subscriptions = allSubscriptions.filter(
(subscription) =>
subscription.tomorrowBriefEnabled &&
Number.isFinite(subscription.latitude) &&
Number.isFinite(subscription.longitude),
);
const skippedReasons = {
disabled: allSubscriptions.filter((subscription) => !subscription.tomorrowBriefEnabled).length,
missingLocation: allSubscriptions.filter(
(subscription) =>
subscription.tomorrowBriefEnabled &&
(!Number.isFinite(subscription.latitude) || !Number.isFinite(subscription.longitude)),
).length,
beforeTime: 0,
alreadySent: 0,
noBrief: 0,
};
let warningsUnavailable = false;
const hasPolishSubscriptions = subscriptions.some((subscription) => subscription.region === "PL");
const warnings = hasPolishSubscriptions
@@ -88,11 +100,13 @@ export async function GET(request: Request) {
const localToday = getLocalDateParts(subscription.timezone, now);
if (localToday.time < briefTime) {
skipped += 1;
skippedReasons.beforeTime += 1;
continue;
}
const targetDateKey = getLocalDateParts(subscription.timezone, now, 1).dateKey;
if (hasSentTomorrowBrief(subscription.endpoint, targetDateKey)) {
skipped += 1;
skippedReasons.alreadySent += 1;
continue;
}
@@ -115,6 +129,7 @@ export async function GET(request: Request) {
});
if (!brief) {
skipped += 1;
skippedReasons.noBrief += 1;
continue;
}
await sendTomorrowBriefNotification(subscription, brief);
@@ -131,10 +146,12 @@ export async function GET(request: Request) {
return NextResponse.json({
ok: true,
time: briefTime,
subscriptions: subscriptions.length,
subscriptions: allSubscriptions.length,
eligibleSubscriptions: subscriptions.length,
warningsUnavailable,
sent,
skipped,
skippedReasons,
failed,
});
}