Este archivo define los servicios de autenticación en Matchify, utilizando los repositorios userRepository.js y companyRepository.js para gestionar usuarios y sus asociaciones con empresas. Los servicios incluyen la lógica de negocio para el registro de usuarios y el inicio de sesión con autenticación JWT.
import bcrypt from 'bcryptjs';
import jwt from 'jsonwebtoken';
import { findUserByEmail, createUser } from '../repositories/userRepository.js';
import { findEmpresaUsuarioByUserId } from '../repositories/companyRepository.js';
export const loginUser = async (email, password) => {
const user = await findUserByEmail(email);
if (!user) throw new Error('User not found');
const validPassword = await bcrypt.compare(password, user.password);
if (!validPassword) throw new Error('Incorrect password');
const empresaUsuario = await findEmpresaUsuarioByUserId(user.id);
const tokenPayload = {
id: user.id,
email: user.email,
empresaId: empresaUsuario ? empresaUsuario.empresaId : null,
rolId: empresaUsuario ? empresaUsuario.rolId : null
};
const token = jwt.sign(tokenPayload, process.env.JWT_SECRET, { expiresIn: '1h' });
return { token, userId: user.id, empresaId: tokenPayload.empresaId, rolId: tokenPayload.rolId };
};
export const registerUser = async (userData) => {
const { email, password } = userData;
const existingUser = await findUserByEmail(email);
if (existingUser) throw new Error('Email already registered');
const hashedPassword = await bcrypt.hash(password, 10);
userData.password = hashedPassword;
const newUser = await createUser(userData);
return newUser;
};
loginUser(email, password):
empresaId y rolId asociados al usuario, si están disponibles.id, email, empresaId, y rolId, con una duración de 1 hora.userId, empresaId, y rolId del usuario autenticado.registerUser(userData):