1
resposta

Como seria feito se não utilizasse os mixins?

modelo pessoa:

Pessoa.hasMany(models.Matricula, {
        foreignKey: 'estudante_id',
        scope: { status: 'matriculado' },
        as: 'aulasMatriculadas' //'as' é para passar apelido para nossas tabelas
      });

PessoaController:

const Controller = require('./Controller.js');
const PessoaServices = require('../services/PessoaServices.js');

const pessoaServices = new PessoaServices();

class PessoaController extends Controller {
  constructor() {
    super(pessoaServices);
  }

  async pegaMatriculas(req, res){
    const { estudanteId } = req.params;
    try{
      const listaMatriculas = await pessoaServices.pegaMatriculasPorEstudante(Number(estudanteId));
      return res.status(200).json(listaMatriculas);
    }catch(erro){
      //erro
    }
  }
}

module.exports = PessoaController;

PessoaServices:

const Services = require('./Services.js');

class PessoaServices extends Services {
  constructor() {
    super('Pessoa');
  }

  async pegaMatriculasPorEstudante(id){
    const estudante = await super.pegaUmRegistroPorId(id);
    const listaMatriculas = await estudante.getAulasMatriculadas();
    return listaMatriculas; 
  }
}

module.exports = PessoaServices;

Como e onde seria criado o método para pegar as matrículas de um determinado estudante se não utilizasse o "getAulasMatriculadas()" que é o "mixin" criado automaticamente?

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Olá Luidi! Tudo bem?

Para implementar a funcionalidade de pegar as matrículas de um determinado estudante sem usar os mixins gerados automaticamente pelo Sequelize, você precisaria escrever uma consulta manual utilizando o Sequelize. Isso significa que você teria que fazer uma consulta direta ao banco de dados para buscar as matrículas associadas ao estudante.

Aqui está um exemplo de como você poderia fazer isso:

const { Matricula } = require('../models'); // Certifique-se de ajustar o caminho conforme necessário

class PessoaServices extends Services {
  constructor() {
    super('Pessoa');
  }

  async pegaMatriculasPorEstudante(id) {
    const listaMatriculas = await Matricula.findAll({
      where: {
        estudante_id: id,
        status: 'matriculado' // Aplicando o mesmo filtro de escopo
      }
    });
    return listaMatriculas;
  }
}

module.exports = PessoaServices;

Neste exemplo, estamos utilizando o método findAll do Sequelize para buscar todas as matrículas (Matricula) que possuem o estudante_id igual ao id fornecido e que estão com o status matriculado. Essa abordagem substitui o uso do mixin getAulasMatriculadas().

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.