Files
HealthLog/src/lib/app-settings.ts
T
Marc-André Bombeck 38309932f3 Initial release v1.0.0
HealthLog — personal health-tracking PWA with weight, blood pressure,
pulse, mood tracking, medication compliance, Withings integration,
doctor report PDF export, and Dracula-themed UI.
2026-03-10 20:14:33 +01:00

73 lines
1.9 KiB
TypeScript

import { prisma } from "@/lib/db";
import { getEvent } from "@/lib/logging/context";
export interface GlobalServiceAvailability {
telegramGlobal: boolean;
ntfyGlobal: boolean;
webPushGlobal: boolean;
apiGlobal: boolean;
moodLogGlobal: boolean;
}
export async function getGlobalServiceAvailability(): Promise<GlobalServiceAvailability> {
try {
const settings = await prisma.appSettings.findUnique({
where: { id: "singleton" },
select: {
telegramGlobal: true,
ntfyGlobal: true,
webPushGlobal: true,
apiGlobal: true,
moodLogGlobal: true,
},
});
return {
telegramGlobal: settings?.telegramGlobal ?? true,
ntfyGlobal: settings?.ntfyGlobal ?? true,
webPushGlobal: settings?.webPushGlobal ?? true,
apiGlobal: settings?.apiGlobal ?? true,
moodLogGlobal: settings?.moodLogGlobal ?? true,
};
} catch {
getEvent()?.addWarning("Failed to load app settings, using defaults");
return {
telegramGlobal: true,
ntfyGlobal: true,
webPushGlobal: true,
apiGlobal: true,
moodLogGlobal: true,
};
}
}
export async function isApiGloballyEnabled(): Promise<boolean> {
const settings = await getGlobalServiceAvailability();
return settings.apiGlobal;
}
export interface ReminderThresholds {
lateMinutes: number;
missedMinutes: number;
}
export async function getReminderThresholds(): Promise<ReminderThresholds> {
try {
const settings = await prisma.appSettings.findUnique({
where: { id: "singleton" },
select: {
reminderLateMinutes: true,
reminderMissedMinutes: true,
},
});
return {
lateMinutes: settings?.reminderLateMinutes ?? 120,
missedMinutes: settings?.reminderMissedMinutes ?? 240,
};
} catch {
getEvent()?.addWarning("Failed to load reminder thresholds, using defaults");
return { lateMinutes: 120, missedMinutes: 240 };
}
}