import { hash } from 'argon2'; import { useValidatedBody, z } from 'h3-zod'; import prisma from '~~/lib/prisma'; export default defineEventHandler(async (event) => { await clearUserSession(event); const { email, password, name } = await useValidatedBody( event, z.object({ email: z.email().min(5).trim(), password: z.string().min(8), name: z.string().min(1).max(64).trim() }) ); const exists = await prisma.user.findUnique({ where: { email }, select: { id: true } }); if (exists !== null) { throw createError({ status: 409, statusText: 'User with that email already exists!' }); } const passwordHash = await hash(password); const user = await prisma.user.create({ data: { password: passwordHash, name, email }, select: { id: true, name: true, role: true } }); console.warn(`Successful register: ${email}`); await setUserSession(event, { loggedInAt: new Date().toISOString(), user: user }); return { success: true, user: { id: user.id } }; });