Este repositorio centraliza las operaciones relacionadas con el modelo CandidatoOferta en Matchify, proporcionando funciones para gestionar las candidaturas a ofertas de empleo, incluyendo el conteo de aplicaciones y la verificación de estado.
import CandidatoOferta from '../models/CandidatoOferta.js';
import Empresa from "../models/Empresa.js";
import OfertaEmpleo from "../models/OfertaEmpleo.js";
import User from "../models/User.js";
// Buscar todas las candidaturas por empresa
export const findAllCandidatosByEmpresa = async (empresaId) => {
return await CandidatoOferta.findAll({
include: [
{
model: OfertaEmpleo,
as: 'ofertaEmpleo',
where: { empresaId },
},
{
model: User,
as: 'candidato',
attributes: ['id', 'username', 'email']
}
]
});
};
// Buscar un candidato por su ID
export const findCandidatoById = async (candidatoId) => {
return await CandidatoOferta.findByPk(candidatoId);
};
// Actualizar el estado de un candidato
export const updateCandidatoStatus = async (candidatoId, estado) => {
const candidato = await findCandidatoById(candidatoId);
if (!candidato) {
throw new Error('Candidato no encontrado');
}
candidato.estado = estado;
await candidato.save();
return candidato;
};
// Verificar si el usuario ya ha aplicado a una oferta
export const checkApplication = async (usuarioId, ofertaEmpleoId) => {
return await CandidatoOferta.findOne({
where: { usuarioId, ofertaEmpleoId },
});
};
// Aplicar a una oferta de empleo
export const applyToJobOffer = async (usuarioId, ofertaEmpleoId) => {
return await CandidatoOferta.create({
usuarioId,
ofertaEmpleoId,
estado: 'pendiente',
});
};
export const getApplicationCountsByStatusFromDB = async (usuarioId) => {
try {
console.log(`Obteniendo conteos para usuarioId: ${usuarioId}`);
const countAceptadas = await CandidatoOferta.count({
where: { usuarioId, estado: 'aceptada' }
});
const countRechazadas = await CandidatoOferta.count({
where: { usuarioId, estado: 'rechazada' }
});
const countPendientes = await CandidatoOferta.count({
where: { usuarioId, estado: 'pendiente' }
});
return [
{ estado: 'aceptada', cantidad: countAceptadas },
{ estado: 'rechazada', cantidad: countRechazadas },
{ estado: 'pendiente', cantidad: countPendientes },
];
} catch (error) {
console.error('Error al obtener los conteos de la base de datos:', error);
throw new Error('Error al obtener los conteos de las solicitudes.');
}
};
findAllCandidatosByEmpresa(empresaId):
findCandidatoById(candidatoId):
updateCandidatoStatus(candidatoId, estado):
checkApplication(usuarioId, ofertaEmpleoId):
null si no existe.applyToJobOffer(usuarioId, ofertaEmpleoId):
pendiente para un usuario en una oferta específica.getApplicationCountsByStatusFromDB(usuarioId):
aceptada, rechazada, pendiente) para un usuario específico.