diff --git a/src/treatment/queries.mjs b/src/treatment/queries.mjs index 882ccf2..2d9d05b 100644 --- a/src/treatment/queries.mjs +++ b/src/treatment/queries.mjs @@ -24,6 +24,10 @@ function sharedNumberColumnsSql(column) { ) END AS numero_compartilhado_override_raw`; } +// So colunas de `leads`: a paginacao de listLeads roda uma consulta so-id sem +// o LEFT JOIN de segments antes de hidratar a pagina, entao um sort aqui que +// referencie uma coluna de outra tabela (ex.: segments.affinity) quebraria +// essa consulta. const SORTS = { 'prioridade:asc': 'prioridade ASC, score DESC, cidade ASC, empresa ASC', 'score:desc': 'score DESC, empresa ASC', @@ -125,7 +129,10 @@ export function listLeads(db, filtro = {}) { ).all(...pageIds) .map((lead) => [lead.id, withSharedNumberState(withWhatsAppState(db, lead))])); - const rows = pageIds.map((id) => rowsById.get(id)); + // filter(Boolean): as duas consultas nao rodam na mesma transacao, entao um + // lead da pagina pode ser removido (reset da base) entre uma e outra — sem + // isso, esse id sobraria como buraco `undefined` na resposta. + const rows = pageIds.map((id) => rowsById.get(id)).filter(Boolean); return { total, page, pageSize, rows }; }