-
-
Notifications
You must be signed in to change notification settings - Fork 88
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Automação de criação de novos termos e resolução de colisões na geração de IDs #100
Comments
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! |
@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
.$ npm run new Digite o valor para title: Lambda Digite o valor para description: Uma função lambda permite a criação de funções anônimas de primeira classe... Digite o valor para tags: Conceito Digite o valor para code: quadrado = lambda x: x**2
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.
The text was updated successfully, but these errors were encountered: