Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Constraints

Caso eu precise especificar melhor as constraints ou ate mesmo aplicar as validações, da para fazer isso pelo sequelize-cli, ou rodo o cli padrão e no modelo criado eu desenvolvo a cosntraints e validation ou tenho que fazer esses passos tanto no model quanto na migration ?

1 resposta
solução!

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.