Este archivo define los controladores relacionados con la gestión de candidatos y aplicaciones en Matchify, utilizando el servicio candidatoService.js para realizar las operaciones necesarias. Los controladores manejan las solicitudes HTTP y las respuestas correspondientes.

import {
    getCandidatesByCompanyService,
    updateCandidateStatusService,
    applyToJobOfferService,
    checkApplicationStatusService,
    getApplicationCountsByStatus
} from '../services/candidatoService.js';

export const applyToJobOfferController = async (req, res) => {
    const { ofertaEmpleoId } = req.body;
    const { userId } = req.params;

    console.log("Datos recibidos:", { userId, ofertaEmpleoId });

    try {
        const nuevaCandidatura = await applyToJobOfferService(userId, ofertaEmpleoId);
        return res.status(201).json({ success: true, data: nuevaCandidatura });
    } catch (error) {
        return res.status(500).json({ success: false, message: `Error al aplicar: ${error.message}` });
    }
};

export const checkApplicationStatusController = async (req, res) => {
    const { usuarioId, ofertaEmpleoId } = req.body;

    try {
        const status = await checkApplicationStatusService(usuarioId, ofertaEmpleoId);
        return res.status(200).json({ success: true, status });
    } catch (error) {
        return res.status(500).json({ success: false, message: `Error al verificar estado: ${error.message}` });
    }
};

export const getCandidatesByCompanyController = async (req, res) => {
    const { empresaId } = req.query;

    try {
        const candidatos = await getCandidatesByCompanyService(empresaId);
        return res.status(200).json({ success: true, candidatos });
    } catch (error) {
        return res.status(500).json({ success: false, message: `Error al obtener candidatos: ${error.message}` });
    }
};

export const updateCandidateStatusController = async (req, res) => {
    const { candidatoId, estado } = req.body;

    try {
        const candidatoActualizado = await updateCandidateStatusService(candidatoId, estado);
        return res.status(200).json({ success: true, data: candidatoActualizado });
    } catch (error) {
        return res.status(500).json({ success: false, message: `Error al actualizar candidato: ${error.message}` });
    }
};

export const getApplicationCounts = async (req, res) => {
    const { usuarioId } = req.params;

    try {
        const counts = await getApplicationCountsByStatus(usuarioId);
        return res.status(200).json({ success: true, counts });
    } catch (error) {
        return res.status(500).json({ success: false, message: 'Error al obtener las estadísticas' });
    }
};

Explicación de cada función

  1. applyToJobOfferController(req, res):
  2. checkApplicationStatusController(req, res):
  3. getCandidatesByCompanyController(req, res):
  4. updateCandidateStatusController(req, res):
  5. getApplicationCounts(req, res):