MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como o Trello lida com a reorganização de cartões, listas, listas de verificação, etc.


Cada item recebe um pos (um número JavaScript, portanto, float de precisão dupla). Em seguida, eles são renderizados classificando por pos .

Quando um novo item é adicionado, é pos é baseado em onde na lista está:
  • parte inferior da lista - máximo de pos atualmente na lista + um buffer (acho que 1024 é usado)
  • topo da lista - mínimo pos atualmente na lista dividida por dois
  • meio da lista - média de pos dos dois itens adjacentes

A opção do meio seria atribuída pelo cliente; o top/bottom pode ser atribuído pelo cliente ou passado para o servidor como as strings "top" ou "bottom" nesse caso, o servidor executará a lógica.

No servidor, após atribuir o pos para o novo item, conforme mostrado acima, o item é verificado em relação aos vizinhos mais próximos quanto à adjacência - se eles estiverem a menos de uma distância mínima (.01 é usado, eu acredito), eles estão espalhados (potencialmente em cascata para aumentar o pos de toda a lista).

Não acho que essa seja a maneira ideal, mas é assim que o Trello faz.