diff --git a/src/api/auth/login.ts b/src/api/auth/login.ts index 16875d1..295b622 100644 --- a/src/api/auth/login.ts +++ b/src/api/auth/login.ts @@ -13,7 +13,7 @@ const login = async (req: Request, res: Response) => { } const isValid = await comparePassword(userInfo.password, user.password); if (!isValid) { - return res.status(401).send('Invalid password'); + return res.status(401).send({ error: 'Invalid password' }); } return res.status(200).send(user); } catch (error) { diff --git a/src/api/auth/signup.ts b/src/api/auth/signup.ts index 0d58ec7..2bb0e14 100644 --- a/src/api/auth/signup.ts +++ b/src/api/auth/signup.ts @@ -1,15 +1,18 @@ import { newUser } from '@/controller/UserController'; -import UserModel from '@/models/UserModel'; +import { User } from '@/models/UserModel'; import { hashPassword } from '@/controller/AuthController'; -import { User } from '@prisma/client'; import { Request, Response } from 'express'; +import { User as PrismaUser } from '@prisma/client'; const signup = async (req: Request, res: Response) => { try { - UserModel.parse(req.body); req.body.password = await hashPassword(req.body.password); - const user: User = req.body; - const prismaUser = await newUser(user); + const user: User = User.parse({ ...req.body }); + const prismaUser: PrismaUser | null = await newUser(user); + if (!prismaUser) { + return res.status(400).send({ error: 'User already exists' }); + } + return res.status(200).send(prismaUser); } catch (error) { return res.status(500).send(error); diff --git a/src/controller/UserController.ts b/src/controller/UserController.ts index c970215..c7562d2 100644 --- a/src/controller/UserController.ts +++ b/src/controller/UserController.ts @@ -1,4 +1,5 @@ -import { PrismaClient, User } from '@prisma/client'; +import { PrismaClient } from '@prisma/client'; +import { User } from '@/models/UserModel'; const prisma = new PrismaClient(); @@ -12,12 +13,39 @@ const getUser = (email: string) => { return user; }; -const newUser = (user: User) => { - const prismaUser = prisma.user.create({ - data: user, +const isUserExist = (email: string) => + prisma.user + .findUnique({ + where: { + email, + }, + }) + .then((user) => { + if (user) { + return true; + } + return false; + }) + .catch((error) => { + throw error; + }); + +const newUser = async (user: User) => { + const userExist: Boolean = await isUserExist(user.email); + if (userExist) { + return null; + } + const newUser = await prisma.user.create({ + data: { + email: user.email, + password: user.password, + firstName: user.firstName, + lastName: user.lastName, + role: 'USER', + }, }); - return prismaUser; + return newUser; }; export { getUser, newUser };