El modelo CandidatoOferta gestiona la relación entre los candidatos y las ofertas de empleo en Matchify, permitiendo almacenar el estado de la aplicación de cada candidato a una oferta específica.

import { DataTypes } from 'sequelize';
import sequelize from '../config/database.js';
import OfertaEmpleo from './OfertaEmpleo.js';
import User from './User.js';

const CandidatoOferta = sequelize.define('CandidatoOferta', {
    estado: {
        type: DataTypes.ENUM('pendiente', 'en proceso', 'aceptada', 'rechazada'),
        allowNull: false,
    },
    usuarioId: {
        type: DataTypes.INTEGER,
        allowNull: false,
        references: {
            model: User,
            key: 'id',
        },
        onUpdate: 'CASCADE',
        onDelete: 'CASCADE',
    },
    ofertaEmpleoId: {
        type: DataTypes.INTEGER,
        allowNull: false,
        references: {
            model: OfertaEmpleo,
            key: 'id',
        },
        onUpdate: 'CASCADE',
        onDelete: 'CASCADE',
    },
}, {
    timestamps: true,
    tableName: 'candidato_oferta',
});

CandidatoOferta.belongsTo(User, { foreignKey: 'usuarioId', as: 'candidato' });
CandidatoOferta.belongsTo(OfertaEmpleo, { foreignKey: 'ofertaEmpleoId', as: 'ofertaEmpleo' });

export default CandidatoOferta;

Explicación de cada propiedad

  1. estado: Estado de la aplicación del candidato, con opciones pendiente, en proceso, aceptada y rechazada. Campo obligatorio.
  2. usuarioId: Referencia al usuario que aplica a la oferta, estableciendo una relación con el modelo User.
  3. ofertaEmpleoId: Referencia a la oferta de empleo a la que el usuario aplica, estableciendo una relación con el modelo OfertaEmpleo.

Configuración del modelo

Asociaciones

CandidatoOferta.belongsTo(User, { foreignKey: 'usuarioId', as: 'candidato' });
CandidatoOferta.belongsTo(OfertaEmpleo, { foreignKey: 'ofertaEmpleoId', as: 'ofertaEmpleo' });

Establece que cada CandidatoOferta pertenece tanto a un Usuario (como candidato) como a una OfertaEmpleo, permitiendo rastrear el progreso de la aplicación de cada candidato a ofertas específicas en Matchify.

Este modelo facilita la administración de aplicaciones de candidatos a ofertas laborales, permitiendo actualizar y seguir el estado de cada aplicación en la plataforma.