backend icon indicating copy to clipboard operation
backend copied to clipboard

feat: ignorar acentos e cedilhas na busca por abrigos

Open pedrobrun opened this issue 9 months ago • 3 comments

Task: https://trello.com/c/lVvrcFHW

Esse PR adiciona:

  • Lógica para ignorar acentos e cedilhas na busca de shelters
  • Alguns testes unitários para as novas funções adicionadas

Infelizmente o prisma não disponibiliza uma forma de usar unnaccent, então esse pr contém uma workaround que puxa os IDs do shelters e utiliza eles na query seguinte, que já existia. Não acho o melhor dos mundos usar essas 2 queries, mas dessa forma mantemos o trabalho que já existia com type-safety. Algumas referências que encontrei sobre isso enquanto trabalhava aqui:

  • https://github.com/prisma/prisma/issues/6428 -> https://gist.github.com/Cauen/72a03ecbbe5b06ab70bb3b24fe6648ab
  • https://github.com/prisma/prisma/issues/16211

Demo testando localmente end-to-end 👇 https://github.com/SOS-RS/backend/assets/82632528/a5a0204d-4ac3-49b2-9cb6-069daa1a7e92

pedrobrun avatar May 10 '24 01:05 pedrobrun

@AndersonCRocha subi as ultimas alterações recomendadas e também uma regra pra caso o unnaccent não encontre resultados. Eu não tinha notado, mas ele estava retornando tudo quando nada era encontrado pra uma string (e.g: "dsaijdsao" retornava tudo, ao invés de nada, que é o esperado e comportamento atual)

pedrobrun avatar May 10 '24 19:05 pedrobrun

testei a branch e está tudo funcionando

porém os testes estão quebrando consegue dar uma olhada @pedrobrun ?

@filipepacheco Feito. Era por conta das configs novas que subiram para corrigir os testes, o meu já tinha e por isso dava erro.

pedrobrun avatar May 15 '24 22:05 pedrobrun

Que loucura esse workaround, negócio era parar de usar o prisma mesmo e usar algo como sequelize, é foda ORM moderno.

Mas parando de só enxer o saco ksksks e propondo uma outra solução alternativa bem mais simples:

  • Adicionar um campo de searchName no shelter que em toda criação e update esse campo é atualizado com o mesmo valor do name, porém: tudo minúsculo e sem acento. Isso manteria a query praticamente igual (só trocar name pra searchName) e claro... fazer um contains com a string tratada do usuário (tudo minúsculo e sem acento...)

Ainda é um workaround? Sim. Porém parece que minimiza a complexidade desse código da busca, se em algum momento da vida essa busca rolasse no prisma seria trocar o searchName pra name de volta...

Mais, pra não ter que fazer esse update no searchName no código em todas partes que o name é modificado... poderia ser usado as generated columns do postgres pra fazer isso automaticamente: https://www.postgresql.org/docs/12/ddl-generated-columns.html

vanflux avatar May 17 '24 17:05 vanflux