0
respostas

Posso fazer esse método apontando para o outro?

No "Services.js" eu tenho o método "pegaUmRegistro" que dentro dele ele chama o método "pegaTodosOsRegistros" que resolve o problema de pegar um registro somente também, porém ele usa o método "findAll" que retorna um array, então tenho que pegar o resultado na posição zero dentro do método "pegaUmRegistro", isso é um boa prática ou é ruim já que não se utiliza do método "findOne"?

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);
  }

  async pegaUmRegistro(opts) {
  if (!opts || !opts.where || Object.keys(opts.where).length === 0) {
    throw new Error('Nenhum filtro (where) foi informado para busca única.');
  }

  const registros = await this.pegaTodosOsRegistros(opts);
  return registros[0] || null;
}
}

module.exports = Services;