#cloudflare #kv #serverless #bug #blog #arquitetura

renomeei um arquivo e os comentarios sumiram

renomeei um post e os comentarios dele sumiram. todos. sem aviso. sem backup. so pq eu mudei o nome do arquivo. (¬_¬)

o artigo era "to odiando a internet atual". ai achei q "cansada da internet atual" ficava melhor. simples. renomeei o html, ajustei os links, git push e pronto.

só q eu esqueci de uma coisa. o sistema de comentarios usa o nome do arquivo como chave no cloudflare kv. quando mudei de odeio-internet-atual pra cansada-internet-atual, o backend foi procurar numa chave q nao existia ainda. e os comentarios antigos ficaram presos na chave antiga, orfaos, sem ngm pra ler.

como funciona o sistema de comentarios

eu uso cloudflare kv pra guardar comentarios. eh um banco chave-valor simples. cada artigo tem uma chave tipo comments:artigos/nome-do-arquivo.

no frontend, o js pega o caminho da url, remove a barra inicial e o .html, e usa isso como slug. no backend, a function recebe esse slug e busca no kv.

funciona perfeitamente ate vc renomear um arquivo. ai vira um problema silencioso. nao da erro. nao da crash. so fica vazio. como se ngm tivesse comentado nunca.

descobri q nao era so esse artigo

fui ver o historico do git pra entender oq aconteceu. e lembrei q ja tinha renomeado outros posts antes.

"autenticacao-sms-celular-login" era "odeio-codigo-celular-login". "design-mobile-responsividade" era "odeio-responsividade-mobile". "mmorpgs-mobile-sao-chatos" era "mmorpgs-mobile-chatice".

provavelmente todos esses perderam comentarios no rename e eu nem percebi. pq qm vai notar q comentarios sumiram? ngm volta em post antigo pra ver se a conversa ainda ta la.

a solucao q eu fiz

em vez de ficar mexendo no kv manualmente, eu implementei uma migracao lazy no backend. quando alguem acessa um artigo e a chave nova ta vazia, o sistema verifica se existe uma chave antiga mapeada. se existir, copia os dados pra chave nova e serve normal.

adicionei um objeto simples no codigo com os slugs antigos e atuais. eh uma gambiarra? eh. mas funciona e resolve o problema sem eu ter q rodar script de migracao ou pagar por ferramenta de backup.

se vc usa kv ou qualquer banco chave-valor com slug como chave, toma cuidado ao renomear conteudo. esse tipo de bug eh silencioso e facil de passar despercebido.

agora sempre q eu for renomear um post, vou lembrar de adicionar o mapeamento no codigo primeiro. ou talvez eu mude a arquitetura futuramente pra usar um id fixo ao inves do nome do arquivo. mas por enquanto, a gambiarra salva~ (´。• ᵕ •。`)

e se vc ja comentou em algum post meu e um dia nao apareceu mais, desculpa. foi sem querer. a culpa foi do rename.

read in english →