Postgres - Query dinâmica (em NodeJS)

eai pessoal, estava precisando recentemente de uma query dinâmica, tanto usando o OR quanto AND.

Fiz e vou compartilhar aqui caso alguém precise algum dia. (Ou até se alguém achar que dá pra melhorar também).

function buildConditions(params) {
    let conditions = [];

    if (typeof params.etnia !== 'undefined' && params.etnia !== '') {
        conditions.push(`etnia IN (${params.etnia})`);
    }

    if (typeof params.genero !== 'undefined' && params.genero !== '') {
        conditions.push(`genero = '${params.genero}'`);
    }

    if (typeof params.cabelo !== 'undefined' && params.cabelo !== '') {
        conditions.push(`cabelo = '${params.cabelo}'`);
    }

    if (typeof params.altura !== 'undefined' && params.altura !== '') {
        conditions.push(`altura = '${params.altura}'`);
    }

    if (typeof params.estado !== 'undefined' && params.estado !== '') {
        conditions.push(`estado = '${params.estado}'`);
    }

    return {
        where: conditions.length ?
            conditions.join(' AND ') : '',
    };
}

async function executeQuery(params) {
    const conditions = buildConditions(params);
    let sql = `SELECT * FROM algumaCoisa WHERE ${conditions.where}`;
    //no meu caso sempre vai ter algo no Where, então vc tem que adaptar pra o seu uso.
    console.log(sql)
}

Chamando essa function:

let params = {etnia: [`'negra'`, `'asiatica'`, `'branca'`], genero: 'masculino', cabelo: 'preto', altura: '', estado: 'São Paulo'}
executeQuery(params)

E o resultado:

SELECT * FROM algumaCoisa WHERE etnia = 'negra' OR etnia = 'asiatica' OR etnia = 'branca' AND genero = 'masculino' AND cabelo = 'preto' AND estado = 'São Paulo'

Sem o genero escolhido:

SELECT * FROM algumaCoisa WHERE etnia = 'negra' OR etnia = 'asiatica' OR etnia = 'branca' AND cabelo = 'preto' AND estado = 'São Paulo'

É isso, abraço!!