Closed rwietter closed 4 months ago
@levxyca pode atribuir a mim esse problema. Posso fazer dois Pull Requests, o primeiro corrigindo o problema de colisões do pr #87 e depois podemos discutir sobre o CLI.
Assim que eles forem mesclados, eu resolvo os conflitos se houver e já subo o fix.
Magnífico, @rwietter !! Quando abri o PR #87 realmente não me atentei a isso, como no caso dos termos C e C++. Essa issue soma muito ao projeto e vai deixar tudo mais dinâmico.
sensacional @rwietter! vou atribuir a issue a você! atualmente um dos desafios do diciotech é justamente a inserção de novos termos e isso vai facilitar muito!
@levxyca pode atribuir a mim esse problema. Posso fazer dois Pull Requests, o primeiro corrigindo o problema de colisões do pr #87 e depois podemos discutir sobre o CLI.
Assim que eles forem mesclados, eu resolvo os conflitos se houver e já subo o fix.
@rwietter o plano dessa semana é dar merge nos PR's referente aos favoritos, o #77 já no jeito e assim que o @thiagofqs atualizar a branch dele dou merge no #77 e no #87 em seguida.
Colisão de IDs
Tivemos dois pr's para a feature de cards favoritos, o primeiro #77 cria a feature de favoritar cards e coloca uma identificação única sequencial. O pr #87 faz um refactor nessa feature e altera o id sequencial para id baseado no título. Isso é bom pois evita adicionar manualmente o id.
Mas ainda ocorre de o mesmo título servir para conceitos diferentes, ou no caso do gif abaixo onde é removido caracteres que não são letras e o título fica para ambos
c
ec
. Como mostrado no gif abaixo, onde o click no segundo card aciona apenas o primeiro já que ambos tem os mesmoid
. Utilizar um UUID dinamicamente também é um problema, pois toda vez que a página for carregada, o id será outro e o id salvo no localStorage não será igual ao id do card.Para resolver este inconveniente, apliquei um algoritmo de hash simples que gera um id baseado em conteúdo, mais específicamente, a partir da descrição do conceito, que é uma cadeia de caracteres maior. Isso elimina tal problemática e não necessita o uso de dependências externas.
Automação de inserção de termos por CLI
Essa issue também se destina para a discussão de um Script JS executado pelo Node.js com zero dependências externas, no qual já estou desenvolvendo, para adicionar novos conceitos via CLI (Command-line interface).
Por exemplo, para rodar script pode ser com
yarn new
ounpm run new
ou entãopnpm run new
. Ondenew
é um script dopackage.json
.Por exemplo, a saída seria o novo termo gravado juntamente com o restante do cards_pt-br.json:
Nesse caso, o
id
é gerado automaticamente pelocrypto.randomUUID
do Node, não seria necessário usar nenhuma biblioteca externa ao Node.js para fazer isso. Nesse caso, quando o termo for gerado pelo Script, terá por padrão um id e o código do card já trabalhará com este id ao invés do id gerado pelo algoritmo de hash de conteúdo descrito acima. Ou seja, ambos são suportados, podendo criar um novo termo manualmente mudando o código ou gerando a partir do CLI.As bibliotecas utilizadas do Node são:
Isso visa automatizar o processo de adição de novos termos. Também visa escalabilidade já que após o arquivo cards_pt-br vier a ter milhares de linhas, torna-se mais pesado para abrir e pode ocorrer erros de comma, bracket, etc.