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;
};

Explicación de cada función

  1. loginUser(email, password):
  2. registerUser(userData):