Skip to content

fix: adiciona uma função de hash para gerar o id do card#136

Merged
freitaschz merged 2 commits into
levxyca:mainfrom
rwietter:fix/favorite-id
May 12, 2024
Merged

fix: adiciona uma função de hash para gerar o id do card#136
freitaschz merged 2 commits into
levxyca:mainfrom
rwietter:fix/favorite-id

Conversation

@rwietter

@rwietter rwietter commented Nov 9, 2023

Copy link
Copy Markdown

Descrição

Fixes #100

Esse PR resolve o problema de colisão de IDs, onde se utiliza o título do card como ID, e quando há dois cards com o mesmo título, o ID é duplicado, causando problemas para favoritar cards.

Esse PR adiciona o algoritmo djb2 (http://www.cse.yorku.ca/~oz/hash.html) para calcular o hash de uma string, e assim, evitar que IDs sejam duplicados. Embora colisões de hash sejam possíveis, a probabilidade de colisão é baixa.

Ele recebe a descrição e título do card como parâmetro, limita a string a 32 caracteres, para não criar um loop O(n) caso a descrição seja muito grande. Então itera sobre cada caractere da string, e faz uma operação utilizando o operador left-shift somado com o código ASCII do caractere. No final, converte o número para base 36, e retorna o ID. Esse ID é sempre o mesmo para a mesma string, e diferente para strings diferentes.

Também já trabalha com o uso de UUID gerado quando usado a CLI, proposto no pr #112.

function generateContentId(content = '', salt = '', hash = 5381) {
  const data = (salt + content).slice(0, 32).split(' ').join('')

  for (let i = 0; i < data.length; i++) {
    // hash * 33 + ASCII char code
    hash = ((hash << 5) + hash) + data.charCodeAt(i);
  }
  const hashString = Math.abs(hash).toString(36); // Convert to base-36 string
  return hashString;
}

Important

Remove um dos termos Python que estava duplicado.

1699553187

Tipo de mudança

  • Bug fix (non-breaking change)
  • New feature (non-breaking change)
  • Breaking change (fix ou feature que faria com que a funcionalidade existente não funcionasse conforme o esperado)
  • Esta alteração requer uma atualização da documentação

Checklist:

  • Meu código segue as diretrizes de estilo deste projeto
  • Realizei uma auto-revisão do meu próprio código
  • Comentei meu código, principalmente em áreas difíceis de entender
  • Minhas alterações não geram novos warnings
  • Quaisquer alterações dependentes foram mescladas
  • Verifiquei meu código e corrigi quaisquer erros ortográficos

Screenshots

1699552430

Referências:

@netlify

netlify Bot commented Nov 9, 2023

Copy link
Copy Markdown

Deploy Preview for diciotech ready!

Name Link
🔨 Latest commit 0ca9c33
🔍 Latest deploy log https://app.netlify.com/sites/diciotech/deploys/654d201131f5db0009cdce16
😎 Deploy Preview https://deploy-preview-136--diciotech.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@freitaschz freitaschz self-requested a review March 11, 2024 13:54
@freitaschz freitaschz added the bug Something isn't working label May 12, 2024

@freitaschz freitaschz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sensacional, @rwietter! Muito obrigado por contribuir 🚀

Esse PR resolve um inconveniente, evita o uso de dependências externas e é bem rico, principalmente por conter referências para as alterações desenvolvidas.

@freitaschz freitaschz merged commit 38ab2f1 into levxyca:main May 12, 2024
@freitaschz freitaschz added this to the v2 milestone May 12, 2024
@rwietter rwietter deleted the fix/favorite-id branch June 14, 2024 00:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Automação de criação de novos termos e resolução de colisões na geração de IDs

2 participants