import { prisma } from '../prisma.js'; import { DEFAULTS } from '$lib/utils/constants.js'; /** * Check whether the onboarding wizard should be shown. * Returns true if no users exist OR SystemSettings.onboardingComplete is false. */ export async function isOnboardingNeeded(): Promise { const userCount = await prisma.user.count(); if (userCount === 0) { return true; } try { const settings = await prisma.systemSettings.findUnique({ where: { id: DEFAULTS.SYSTEM_SETTINGS_ID }, select: { onboardingComplete: true } }); // If no settings record exists yet, onboarding is needed if (!settings) { return true; } return !settings.onboardingComplete; } catch { // If SystemSettings table doesn't exist yet, onboarding is needed return true; } } /** * Mark onboarding as complete in SystemSettings. */ export async function completeOnboarding(): Promise { await prisma.systemSettings.upsert({ where: { id: DEFAULTS.SYSTEM_SETTINGS_ID }, update: { onboardingComplete: true }, create: { id: DEFAULTS.SYSTEM_SETTINGS_ID, onboardingComplete: true } }); } /** * Get the current onboarding status. */ export async function getOnboardingStatus(): Promise<{ readonly needed: boolean; readonly hasUsers: boolean; readonly onboardingComplete: boolean; }> { const userCount = await prisma.user.count(); const hasUsers = userCount > 0; let onboardingComplete = false; try { const settings = await prisma.systemSettings.findUnique({ where: { id: DEFAULTS.SYSTEM_SETTINGS_ID }, select: { onboardingComplete: true } }); onboardingComplete = settings?.onboardingComplete ?? false; } catch { onboardingComplete = false; } return { needed: !hasUsers || !onboardingComplete, hasUsers, onboardingComplete }; }