Olá, Leonardo.
Tudo bem?
Quando você utiliza o sequelize-cli
para gerar os modelos e migrations, você pode adicionar as constraints e validações diretamente no modelo ou na migration, dependendo do que você precisa.
No Modelo
Você pode adicionar validações e constraints diretamente no arquivo do modelo (pessoa.js
, por exemplo). Aqui está um exemplo prático de como fazer isso:
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Pessoa extends Model {
static associate(models) {
// define association here
}
}
Pessoa.init({
nome: {
type: DataTypes.STRING,
allowNull: false, // Constraint de não nulo
validate: {
notEmpty: true, // Validação para não permitir string vazia
}
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true, // Constraint de unicidade
validate: {
isEmail: true, // Validação para formato de email
}
},
cpf: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
len: [11, 11], // Validação para tamanho exato de 11 caracteres
}
},
ativo: {
type: DataTypes.BOOLEAN,
defaultValue: true, // Valor padrão
},
role: {
type: DataTypes.STRING,
allowNull: false,
validate: {
isIn: [['estudante', 'docente', 'admin']], // Validação para valores específicos
}
}
}, {
sequelize,
modelName: 'Pessoa',
tableName: 'pessoas',
});
return Pessoa;
};
Na Migration
Você também pode definir constraints diretamente na migration. Aqui está um exemplo de como fazer isso:
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('pessoas', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
nome: {
type: Sequelize.STRING,
allowNull: false,
},
email: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
},
cpf: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
},
ativo: {
type: Sequelize.BOOLEAN,
defaultValue: true,
},
role: {
type: Sequelize.STRING,
allowNull: false,
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('pessoas');
}
};
Você pode escolher onde adicionar as constraints e validações conforme sua necessidade. Em muitos casos, é comum adicionar validações no modelo e constraints na migration para garantir a integridade dos dados no banco de dados.
Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.