El modelo OfertaEmpleo representa una oferta de trabajo publicada en Matchify. Define los atributos básicos de una oferta, como el título, descripción, salario, fechas, y otros requisitos relacionados con el puesto de trabajo.

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

const OfertaEmpleo = sequelize.define('OfertaEmpleo', {
    titulo: {
        type: DataTypes.STRING,
        allowNull: false,
    },
    descripcion: {
        type: DataTypes.TEXT,
        allowNull: false,
        validate: {
            len: [0, 255],
        },
    },
    ubicacion: {
        type: DataTypes.STRING,
        allowNull: true,
    },
    salario: {
        type: DataTypes.DECIMAL,
        allowNull: true,
    },
    fechaPublicacion: {
        type: DataTypes.DATE,
        allowNull: true,
    },
    fechaCierre: {
        type: DataTypes.DATE,
        allowNull: true,
    },
    empresaId: {
        type: DataTypes.INTEGER,
        allowNull: false,
    },
    userId: {
        type: DataTypes.INTEGER,
        allowNull: false,
    },
    estatus: {
        type: DataTypes.ENUM('Activo', 'Inactivo'),
        allowNull: false,
        defaultValue: 'Activo',
    },
    tags: {
        type: DataTypes.TEXT,
        get() {
            const rawValue = this.getDataValue('tags');
            return rawValue ? rawValue.split(',') : [];
        },
        set(value) {
            if (Array.isArray(value)) {
                this.setDataValue('tags', value.join(','));
            } else {
                throw new Error('Los tags deben ser un arreglo.');
            }
        },
    },
    modalidad: {
        type: DataTypes.ENUM('Presencial', 'Virtual', 'Híbrido'),
        allowNull: false,
        defaultValue: 'Presencial',
    },
    tipoTrabajo: {
        type: DataTypes.ENUM('Tiempo Completo', 'Tiempo Parcial', 'Por Proyecto'),
        allowNull: false,
        defaultValue: 'Tiempo Completo',
    },
    Funciones_Requerimiento: {
        type: DataTypes.STRING,
        allowNull: true,
    },
    Estudios_Requerimiento: {
        type: DataTypes.STRING,
        allowNull: true,
    },
    Experiencia_Requerimiento: {
        type: DataTypes.STRING,
        allowNull: true,
    },
    Conocimientos_Requerimiento: {
        type: DataTypes.STRING,
        allowNull: true,
    },
    Competencias_Requerimiento: {
        type: DataTypes.STRING,
        allowNull: true,
    },
}, {
    tableName: 'ofertas_empleos',
    timestamps: true,
});

export default OfertaEmpleo;

Explicación de cada propiedad

  1. titulo: Almacena el título de la oferta de empleo. Campo obligatorio.
  2. descripcion: Contiene una descripción de la oferta. Limita el texto a 255 caracteres.
  3. ubicacion: Almacena la ubicación de la oferta, opcional.
  4. salario: Define el salario ofrecido, opcional.
  5. fechaPublicacion y fechaCierre: Fechas opcionales para publicar y cerrar la oferta.
  6. empresaId y userId: Identificadores obligatorios de la empresa y usuario que crean la oferta.
  7. estatus: Estado de la oferta, con opciones Activo o Inactivo, siendo Activo el valor por defecto.
  8. tags: Campo que almacena etiquetas para la oferta. La función get() convierte el valor en un arreglo, y set() lo almacena como una cadena de texto separada por comas.
  9. modalidad: Define la modalidad de trabajo, con opciones Presencial, Virtual o Híbrido. Valor por defecto: Presencial.
  10. tipoTrabajo: Tipo de contrato (Tiempo Completo, Tiempo Parcial, Por Proyecto). Valor por defecto: Tiempo Completo.
  11. Funciones_Requerimiento, Estudios_Requerimiento, Experiencia_Requerimiento, Conocimientos_Requerimiento, Competencias_Requerimiento: Campos opcionales que especifican requisitos de la oferta.

Configuración del modelo

Este modelo gestiona las ofertas de empleo en Matchify, permitiendo almacenar y acceder a los detalles y requisitos de cada oferta.