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

Posso juntar esses 2 métodos e fazer 1?

No curso foi desenvolvido esses 2 métodos em "Services.js":

onst dataSource = require('../database/models');

class Services {
  constructor(nomeDoModel) {
    this.model = nomeDoModel;
  }

  async pegaTodosOsRegistros(where = {}) {
    return dataSource[this.model].findAll({ where: { ...where } });
  }

  async pegaRegistrosPorEscopo(escopo) {
    return dataSource[this.model].scope(escopo).findAll();
  }

Eu pensei em juntar esses 2 método fazendo esse:

const dataSource = require('../database/models'); //como o arquivo é index.js não precisamos passar o nome do arquivo.

class Services {
    constructor(modelo) {
        this.modelo = modelo;
    }

    async pegaTodosOsRegistros(opts = {}) {
    const { scope, where, ...resto } = opts;

    // 1) Resolve o "model" (com ou sem scope)
    let modelo = dataSource[this.modelo];
    if (scope) {
      modelo = modelo.scope(scope);
    }

    // 2) Monta as opções finais pro findAll
    const opcoes = { ...resto };
    if (where && Object.keys(where).length > 0) {
      opcoes.where = where; // deixa o Sequelize combinar com o que vier do scope
    }
    // 3) Executa
    return modelo.findAll(opcoes);
  }
}

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta
solução!

Olá Luidi! Tudo bem?

Você está no caminho certo ao tentar combinar os dois métodos em um só, e a abordagem que você propôs parece bastante sólida. Ao unificar os métodos, você está tornando o código mais limpo e reutilizável, o que é uma boa prática.

O método combinado que você criou permite que você especifique tanto o scope quanto o where através de um único objeto de opções (opts). Isso oferece flexibilidade para buscar registros com ou sem escopo, além de aplicar filtros adicionais.

Aqui está um exemplo de como você poderia usar o método unificado:

// Para buscar todos os registros sem escopo
const registros = await services.pegaTodosOsRegistros();

// Para buscar registros com um escopo específico
const registrosComEscopo = await services.pegaTodosOsRegistros({ scope: 'escopoDesejado' });

// Para buscar registros com um filtro 'where'
const registrosComFiltro = await services.pegaTodosOsRegistros({ where: { ativo: true } });

// Para buscar registros com escopo e filtro
const registrosComEscopoEFiltro = await services.pegaTodosOsRegistros({ scope: 'escopoDesejado', where: { ativo: true } });

Essa abordagem é bastante flexível e deve atender à maioria dos casos de uso que você encontrará. Apenas certifique-se de que os escopos que você está tentando aplicar estão corretamente definidos no seu modelo.

Espero ter ajudado e bons estudos!

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