Este archivo define los controladores relacionados con la gestión de ofertas de empleo en Matchify, utilizando los servicios jobService.js para realizar las operaciones. Los controladores manejan las solicitudes HTTP y las respuestas correspondientes.
import {
createJobOfferService,
searchJobOffersService,
updateJobOfferService,
deleteJobOfferService,
getJobOffersByCompanyService,
getJobOfferByIdService,
getActiveJobOffersService,
getJobSummaryService,
getCandidateCountService
} from '../services/jobService.js';
export const createJobOfferController = async (req, res) => {
const jobData = req.body;
try {
const newJobOffer = await createJobOfferService(jobData);
return res.status(201).json({ success: true, oferta: newJobOffer });
} catch (error) {
console.error('Error creating job offer:', error);
return res.status(500).json({ success: false, message: error.message });
}
};
export const searchJobOffersController = async (req, res) => {
const filters = req.query;
const userId = req.query.userId;
try {
const ofertas = await searchJobOffersService(filters, userId);
return res.status(200).json({ success: true, ofertas });
} catch (error) {
console.error('Error searching job offers:', error);
return res.status(500).json({ success: false, message: error.message });
}
};
export const updateJobOfferController = async (req, res) => {
const { id } = req.params;
const updatedData = req.body;
try {
const updatedJobOffer = await updateJobOfferService(id, updatedData);
return res.status(200).json({ success: true, oferta: updatedJobOffer });
} catch (error) {
console.error('Error updating job offer:', error);
return res.status(500).json({ success: false, message: error.message });
}
};
export const deleteJobOfferController = async (req, res) => {
const { id } = req.params;
try {
await deleteJobOfferService(id);
return res.status(200).json({ success: true, message: 'Job offer deleted' });
} catch (error) {
console.error('Error deleting job offer:', error);
return res.status(500).json({ success: false, message: error.message });
}
};
export const getJobOffersByCompanyController = async (req, res) => {
const { empresaId, userId } = req.query;
if (!empresaId) {
return res.status(400).json({ success: false, message: 'El campo empresaId es obligatorio.' });
}
try {
const ofertas = await getJobOffersByCompanyService(empresaId, userId);
if (!ofertas || ofertas.length === 0) {
return res.status(404).json({ success: false, message: 'No se encontraron ofertas de empleo para esta empresa.' });
}
return res.status(200).json({ success: true, ofertas });
} catch (error) {
console.error('Error al obtener ofertas de empleo:', error);
return res.status(500).json({ success: false, message: 'Error interno del servidor.' });
}
};
export const getJobOfferByIdController = async (req, res) => {
const { id } = req.params;
try {
const oferta = await getJobOfferByIdService(id);
if (!oferta) {
return res.status(404).json({ success: false, message: 'Oferta no encontrada.' });
}
return res.status(200).json({ success: true, oferta });
} catch (error) {
console.error('Error al obtener la oferta de empleo:', error.message);
return res.status(500).json({ success: false, message: 'Error interno del servidor.' });
}
};
export const getActiveJobOffersController = async (req, res) => {
try {
const ofertas = await getActiveJobOffersService();
if (!ofertas || ofertas.length === 0) {
return res.status(404).json({ success: false, message: 'No se encontraron ofertas activas.' });
}
return res.status(200).json({ success: true, ofertas });
} catch (error) {
console.error('Error al obtener ofertas activas:', error);
return res.status(500).json({ success: false, message: 'Error interno del servidor.' });
}
};
export const toggleJobOfferStatusController = async (req, res) => {
const { id } = req.params;
const { estatus } = req.body;
const validStatuses = ['Activo', 'Inactivo'];
if (!validStatuses.includes(estatus)) {
return res.status(400).json({ success: false, message: 'El valor de estatus no es válido.' });
}
try {
const updatedJobOffer = await updateJobOfferService(id, { estatus });
if (!updatedJobOffer) {
return res.status(404).json({ success: false, message: 'Oferta no encontrada.' });
}
return res.status(200).json({ success: true, oferta: updatedJobOffer });
} catch (error) {
console.error('Error al cambiar el estado de la oferta de empleo:', error);
return res.status(500).json({ success: false, message: `Error interno del servidor: ${error.message}` });
}
};
export const getJobSummaryController = async (req, res) => {
const { empresaId } = req.query;
if (!empresaId) {
return res.status(400).json({ success: false, message: 'El campo empresaId es obligatorio.' });
}
try {
const { activeJobCount, inactiveJobCount, activeJobs, inactiveJobs } = await getJobSummaryService(empresaId);
return res.status(200).json({
success: true,
activeJobCount,
inactiveJobCount,
activeJobs,
inactiveJobs,
});
} catch (error) {
console.error('Error al obtener el resumen de trabajos:', error);
return res.status(500).json({ success: false, message: 'Error interno del servidor.' });
}
};
export const getCandidateCountController = async (req, res) => {
const { id } = req.params;
try {
const count = await getCandidateCountService(id);
return res.status(200).json({ success: true, candidateCount: count });
} catch (error) {
console.error('Error al obtener el conteo de candidatos:', error);
return res.status(500).json({ success: false, message: 'Error interno del servidor.' });
}
};
createJobOfferController(req, res):
req.body.searchJobOffersController(req, res):
req.query.updateJobOfferController(req, res):
req.body.deleteJobOfferController(req, res):
getJobOffersByCompanyController(req, res):
getJobOfferByIdController(req, res):
getActiveJobOffersController(req, res):
toggleJobOfferStatusController(req, res):
getJobSummaryController(req, res):
getCandidateCountController(req, res):