'use server' import { auth } from '@/auth' import { prisma } from '@/lib/prisma' import { revalidatePath, revalidateTag } from 'next/cache' export type UserSettingsData = { theme?: 'light' | 'dark' | 'auto' | 'sepia' | 'midnight' | 'blue' } /** * Update user settings (theme, etc.) */ export async function updateUserSettings(settings: UserSettingsData) { const session = await auth() if (!session?.user?.id) { console.error('[updateUserSettings] Unauthorized') throw new Error('Unauthorized') } try { const result = await prisma.user.update({ where: { id: session.user.id }, data: settings }) revalidatePath('/', 'layout') revalidateTag('user-settings') return { success: true } } catch (error) { console.error('Error updating user settings:', error) throw new Error('Failed to update user settings') } } /** * Get user settings for current user (Cached) */ import { unstable_cache } from 'next/cache' // Internal cached function const getCachedUserSettings = unstable_cache( async (userId: string) => { try { const user = await prisma.user.findUnique({ where: { id: userId }, select: { theme: true } }) return { theme: (user?.theme || 'light') as 'light' | 'dark' | 'auto' | 'sepia' | 'midnight' | 'blue' } } catch (error) { console.error('Error getting user settings:', error) return { theme: 'light' as const } } }, ['user-settings'], { tags: ['user-settings'] } ) export async function getUserSettings(userId?: string) { let id = userId if (!id) { const session = await auth() id = session?.user?.id } if (!id) { return { theme: 'light' as const } } return getCachedUserSettings(id) }