module.exports = { /** * @param {QueryInterface} queryInterface * @param {Sequelize} Sequelize * @returns {Promise} */ async up(queryInterface, Sequelize) { /** * @type {Transaction} */ const transaction = await queryInterface.sequelize.transaction(); try { await queryInterface.createTable( 'users', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'alumnos', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'alumnos_cursos', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'cursos', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'documentos', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'evaluaciones', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'instructores', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'personas', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'requisitos', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'usuarios', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'roles', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.createTable( 'permissions', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }, ); await queryInterface.addColumn( 'users', 'firstName', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'lastName', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'phoneNumber', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'email', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'disabled', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction }, ); await queryInterface.addColumn( 'users', 'password', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'emailVerified', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction }, ); await queryInterface.addColumn( 'users', 'emailVerificationToken', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'emailVerificationTokenExpiresAt', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'users', 'passwordResetToken', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'passwordResetTokenExpiresAt', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'users', 'provider', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'alumnos', 'personaId', { type: Sequelize.DataTypes.UUID, references: { model: 'personas', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'alumnos', 'num_control', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'alumnos', 'obs', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'alumnos_cursos', 'alumnoId', { type: Sequelize.DataTypes.UUID, references: { model: 'alumnos', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'alumnos_cursos', 'cursoId', { type: Sequelize.DataTypes.UUID, references: { model: 'cursos', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'alumnos_cursos', 'status', { type: Sequelize.DataTypes.ENUM, values: ['CURSO', 'ACREDITADO', 'NOACREDITADO', 'BAJA'], }, { transaction }, ); await queryInterface.addColumn( 'cursos', 'instructorId', { type: Sequelize.DataTypes.UUID, references: { model: 'instructores', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'cursos', 'nombre', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'cursos', 'duracion', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'cursos', 'fecha_inicio', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'cursos', 'fecha_fin', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'cursos', 'numero_sesiones', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'cursos', 'numero_evaluaciones', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'cursos', 'status', { type: Sequelize.DataTypes.ENUM, values: ['ESPERA', 'ACTIVO', 'CANCELADO', 'TERMINADO', 'OBSERVACION'], }, { transaction }, ); await queryInterface.addColumn( 'cursos', 'status_acreditacion', { type: Sequelize.DataTypes.ENUM, values: ['CURSO', 'CALIFICACIONES', 'ACREDITACION', 'CERRADO'], }, { transaction }, ); await queryInterface.addColumn( 'documentos', 'alumnoId', { type: Sequelize.DataTypes.UUID, references: { model: 'alumnos', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'documentos', 'requisitoId', { type: Sequelize.DataTypes.UUID, references: { model: 'requisitos', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'documentos', 'archivo', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'documentos', 'estatus', { type: Sequelize.DataTypes.ENUM, values: ['REVISAR', 'ACEPTADO', 'RECHAZADO'], }, { transaction }, ); await queryInterface.addColumn( 'documentos', 'fecha_subida', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'documentos', 'version', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'evaluaciones', 'alumnos_cursosId', { type: Sequelize.DataTypes.UUID, references: { model: 'alumnos_cursos', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'evaluaciones', 'numero_evaluacion', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'evaluaciones', 'calificacion', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'evaluaciones', 'faltas', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'evaluaciones', 'observaciones', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'instructores', 'personaId', { type: Sequelize.DataTypes.UUID, references: { model: 'personas', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'instructores', 'status', { type: Sequelize.DataTypes.ENUM, values: ['CONTRATACION', 'ACTIVO', 'BAJA'], }, { transaction }, ); await queryInterface.addColumn( 'personas', 'nombre', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'personas', 'ap_paterno', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'personas', 'ap_materno', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'personas', 'fecha_nacimiento', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'personas', 'curp', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'requisitos', 'documento', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'requisitos', 'obligatorio', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction }, ); await queryInterface.addColumn( 'usuarios', 'usuario', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'usuarios', 'pass', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'usuarios', 'tipo', { type: Sequelize.DataTypes.ENUM, values: ['SuperUsuario', 'AdminEscolar', 'Instructor', 'Alumno'], }, { transaction }, ); await queryInterface.addColumn( 'permissions', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'roles', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'roles', 'role_customization', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'users', 'app_roleId', { type: Sequelize.DataTypes.UUID, references: { model: 'roles', key: 'id', }, }, { transaction }, ); await transaction.commit(); } catch (err) { await transaction.rollback(); throw err; } }, /** * @param {QueryInterface} queryInterface * @param {Sequelize} Sequelize * @returns {Promise} */ async down(queryInterface, Sequelize) { /** * @type {Transaction} */ const transaction = await queryInterface.sequelize.transaction(); try { await queryInterface.removeColumn('users', 'app_roleId', { transaction }); await queryInterface.removeColumn('roles', 'role_customization', { transaction, }); await queryInterface.removeColumn('roles', 'name', { transaction }); await queryInterface.removeColumn('permissions', 'name', { transaction }); await queryInterface.removeColumn('usuarios', 'tipo', { transaction }); await queryInterface.removeColumn('usuarios', 'pass', { transaction }); await queryInterface.removeColumn('usuarios', 'usuario', { transaction }); await queryInterface.removeColumn('requisitos', 'obligatorio', { transaction, }); await queryInterface.removeColumn('requisitos', 'documento', { transaction, }); await queryInterface.removeColumn('personas', 'curp', { transaction }); await queryInterface.removeColumn('personas', 'fecha_nacimiento', { transaction, }); await queryInterface.removeColumn('personas', 'ap_materno', { transaction, }); await queryInterface.removeColumn('personas', 'ap_paterno', { transaction, }); await queryInterface.removeColumn('personas', 'nombre', { transaction }); await queryInterface.removeColumn('instructores', 'status', { transaction, }); await queryInterface.removeColumn('instructores', 'personaId', { transaction, }); await queryInterface.removeColumn('evaluaciones', 'observaciones', { transaction, }); await queryInterface.removeColumn('evaluaciones', 'faltas', { transaction, }); await queryInterface.removeColumn('evaluaciones', 'calificacion', { transaction, }); await queryInterface.removeColumn('evaluaciones', 'numero_evaluacion', { transaction, }); await queryInterface.removeColumn('evaluaciones', 'alumnos_cursosId', { transaction, }); await queryInterface.removeColumn('documentos', 'version', { transaction, }); await queryInterface.removeColumn('documentos', 'fecha_subida', { transaction, }); await queryInterface.removeColumn('documentos', 'estatus', { transaction, }); await queryInterface.removeColumn('documentos', 'archivo', { transaction, }); await queryInterface.removeColumn('documentos', 'requisitoId', { transaction, }); await queryInterface.removeColumn('documentos', 'alumnoId', { transaction, }); await queryInterface.removeColumn('cursos', 'status_acreditacion', { transaction, }); await queryInterface.removeColumn('cursos', 'status', { transaction }); await queryInterface.removeColumn('cursos', 'numero_evaluaciones', { transaction, }); await queryInterface.removeColumn('cursos', 'numero_sesiones', { transaction, }); await queryInterface.removeColumn('cursos', 'fecha_fin', { transaction }); await queryInterface.removeColumn('cursos', 'fecha_inicio', { transaction, }); await queryInterface.removeColumn('cursos', 'duracion', { transaction }); await queryInterface.removeColumn('cursos', 'nombre', { transaction }); await queryInterface.removeColumn('cursos', 'instructorId', { transaction, }); await queryInterface.removeColumn('alumnos_cursos', 'status', { transaction, }); await queryInterface.removeColumn('alumnos_cursos', 'cursoId', { transaction, }); await queryInterface.removeColumn('alumnos_cursos', 'alumnoId', { transaction, }); await queryInterface.removeColumn('alumnos', 'obs', { transaction }); await queryInterface.removeColumn('alumnos', 'num_control', { transaction, }); await queryInterface.removeColumn('alumnos', 'personaId', { transaction, }); await queryInterface.removeColumn('users', 'provider', { transaction }); await queryInterface.removeColumn( 'users', 'passwordResetTokenExpiresAt', { transaction }, ); await queryInterface.removeColumn('users', 'passwordResetToken', { transaction, }); await queryInterface.removeColumn( 'users', 'emailVerificationTokenExpiresAt', { transaction }, ); await queryInterface.removeColumn('users', 'emailVerificationToken', { transaction, }); await queryInterface.removeColumn('users', 'emailVerified', { transaction, }); await queryInterface.removeColumn('users', 'password', { transaction }); await queryInterface.removeColumn('users', 'disabled', { transaction }); await queryInterface.removeColumn('users', 'email', { transaction }); await queryInterface.removeColumn('users', 'phoneNumber', { transaction, }); await queryInterface.removeColumn('users', 'lastName', { transaction }); await queryInterface.removeColumn('users', 'firstName', { transaction }); await queryInterface.dropTable('permissions', { transaction }); await queryInterface.dropTable('roles', { transaction }); await queryInterface.dropTable('usuarios', { transaction }); await queryInterface.dropTable('requisitos', { transaction }); await queryInterface.dropTable('personas', { transaction }); await queryInterface.dropTable('instructores', { transaction }); await queryInterface.dropTable('evaluaciones', { transaction }); await queryInterface.dropTable('documentos', { transaction }); await queryInterface.dropTable('cursos', { transaction }); await queryInterface.dropTable('alumnos_cursos', { transaction }); await queryInterface.dropTable('alumnos', { transaction }); await queryInterface.dropTable('users', { transaction }); await transaction.commit(); } catch (err) { await transaction.rollback(); throw err; } }, };