import {hash} from 'bcrypt';
import {generateSession} from "~/server/utils/generateSession";
import prisma from "~/lib/prisma";
import {EventHandlerRequest, H3Event} from "h3";
export default defineEventHandler(async (event: H3Event<EventHandlerRequest>) => {
const userExists = await prisma.user.count();
if (userExists) {
throw createError({statusCode: 403, statusMessage: 'User already exists'});
}
const {email, name, password} = await readBody(event);
if ((!/[A-Z]/.test(password) || !/[a-z]/.test(password) || !/[0-9]/.test(password) || !/[^A-Za-z0-9]/.test(password)) && process.env.NODE_ENV !== 'development') {
return new Response('Password must contain at least one uppercase letter, one lowercase letter, one number, and one special character', {
status: 422,
});
}
const hashedPassword = await hash(password, 10);
const user = await prisma.user.create({
data: {
email,
name,
password: hashedPassword,
},
});
await generateSession(user, event);
return {
id: user.id,
email: user.email,
name: user.name,
};
});