"use server"; import type { z } from "zod"; import bcrypt from "bcryptjs"; import { registerSchema } from "./validation"; import { prisma } from "@/prisma"; export async function registerAction(data: z.infer) { try { const result = await registerSchema.safeParseAsync(data); if (!result.success) { return { error: result.error.errors[0].message, }; } const { email, password, username } = result.data; const user = await prisma.user.findUnique({ where: { email, }, }); if (user) { return { error: "User already exist with this email", }; } const passwordHash = await bcrypt.hash(password, 10); await prisma.$transaction(async (tx) => { const { id } = await tx.user.create({ data: { email, name: username, password_hash: passwordHash, }, }); await tx.account.create({ data: { userId: id, type: "credentials", provider: "credentials", providerAccountId: id, }, }); }); return {}; // eslint-disable-next-line @typescript-eslint/no-unused-vars } catch (_error) { return { error: "System error. Please contact support", }; } }