Spaces:
Runtime error
Runtime error
File size: 2,450 Bytes
bd9f61b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 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.' });
}
};
|