import bcrypt from 'bcryptjs' import jwt from 'jsonwebtoken' import { prisma } from '@/lib/db' export async function createUser(email: string, password: string, name?: string) { const passwordHash = await bcrypt.hash(password, 10) return prisma.user.create({ data: { email, passwordHash, name } }) } export async function validateUser(email: string, password: string) { const user = await prisma.user.findUnique({ where: { email } }) if (!user) return null const isValid = await bcrypt.compare(password, user.passwordHash) return isValid ? user : null } export function generateToken(userId: string): string { return jwt.sign({ userId }, process.env.JWT_SECRET!, { expiresIn: '7d' }) } export async function verifyToken(token: string) { try { const payload = jwt.verify(token, process.env.JWT_SECRET!) as { userId: string } return payload } catch (error) { throw new Error('Invalid token') } } export async function getUserFromToken(token: string) { try { const payload = await verifyToken(token) const user = await prisma.user.findUnique({ where: { id: payload.userId }, select: { id: true, email: true, name: true, theme: true, fontSize: true } }) return user } catch (error) { return null } }