kodelyx-backend / src /controllers /authController.ts
kodelyx's picture
Deploy NestJS backend with Prisma SQLite support
bd9f61b
Raw
History Blame Contribute Delete
2.45 kB
import { Request, Response } from 'express';
import bcrypt from 'bcryptjs';
import jwt from 'jsonwebtoken';
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
const JWT_SECRET = process.env.JWT_SECRET || 'kodelyx-super-secret-key-123';
export const signup = async (req: Request, res: Response) => {
try {
const { firstName, lastName, email, phone, password } = req.body;
if (!firstName || !lastName || !email || !phone || !password) {
return res.status(400).json({ message: 'All fields are required.' });
}
const existingUser = await prisma.user.findUnique({ where: { email } });
if (existingUser) {
return res.status(400).json({ message: 'Email address already registered.' });
}
const hashedPassword = await bcrypt.hash(password, 10);
const user = await prisma.user.create({
data: {
firstName,
lastName,
email,
phone,
password: hashedPassword
}
});
return res.status(201).json({
message: 'Account created successfully.',
user: { id: user.id, email: user.email, firstName: user.firstName, lastName: user.lastName }
});
} catch (error: any) {
console.error('Signup error:', error);
return res.status(500).json({ message: 'Internal server error during registration.' });
}
};
export const signin = async (req: Request, res: Response) => {
try {
const { email, password } = req.body;
if (!email || !password) {
return res.status(400).json({ message: 'Email and password are required.' });
}
const user = await prisma.user.findUnique({ where: { email } });
if (!user) {
return res.status(401).json({ message: 'Invalid credentials.' });
}
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) {
return res.status(401).json({ message: 'Invalid credentials.' });
}
const token = jwt.sign(
{ userId: user.id, email: user.email },
JWT_SECRET,
{ expiresIn: '7d' }
);
return res.json({
message: 'Logged in successfully.',
token,
user: {
id: user.id,
email: user.email,
firstName: user.firstName,
lastName: user.lastName,
phone: user.phone
}
});
} catch (error: any) {
console.error('Signin error:', error);
return res.status(500).json({ message: 'Internal server error during login.' });
}
};