MeetUp/src/register.ts
Dominik Stahl eb0f8d8d5f
Some checks failed
container-scan / Container Scan (pull_request) Failing after 5m8s
docker-build / docker (pull_request) Failing after 7m31s
feat: implement credentials login
implements the credentials login functionality
2025-06-08 14:58:37 +02:00

60 lines
No EOL
1.3 KiB
TypeScript

"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<typeof registerSchema>) {
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",
};
}
}