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;
titulo: Almacena el título de la oferta de empleo. Campo obligatorio.descripcion: Contiene una descripción de la oferta. Limita el texto a 255 caracteres.ubicacion: Almacena la ubicación de la oferta, opcional.salario: Define el salario ofrecido, opcional.fechaPublicacion y fechaCierre: Fechas opcionales para publicar y cerrar la oferta.empresaId y userId: Identificadores obligatorios de la empresa y usuario que crean la oferta.estatus: Estado de la oferta, con opciones Activo o Inactivo, siendo Activo el valor por defecto.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.modalidad: Define la modalidad de trabajo, con opciones Presencial, Virtual o Híbrido. Valor por defecto: Presencial.tipoTrabajo: Tipo de contrato (Tiempo Completo, Tiempo Parcial, Por Proyecto). Valor por defecto: Tiempo Completo.Funciones_Requerimiento, Estudios_Requerimiento, Experiencia_Requerimiento, Conocimientos_Requerimiento, Competencias_Requerimiento: Campos opcionales que especifican requisitos de la oferta.tableName: 'ofertas_empleos': Define el nombre de la tabla como ofertas_empleos.timestamps: true: Habilita los campos createdAt y updatedAt para gestionar fechas de creación y actualización.Este modelo gestiona las ofertas de empleo en Matchify, permitiendo almacenar y acceder a los detalles y requisitos de cada oferta.