[DÚVIDA] - Lidando com imagens no back-end
Eae pessoal, tudo certo ? Estou em dúvida de como abordar um assunto, e gostaria de ouvir a opinião de vocês.
Contexto
Estou fazendo um projeto de estudo utilizando NodeJS, só para treinar algumas coisas que eu nunca fiz. Por exemplo, nos meus projetos anteriores, sempre utilizei o Fastify como framework, algum ORM para lidar com o banco de dados, SQLite, e Javascript. Nesse projeto eu estou utilizando Express, sem nenhum ORM, utilizando Postgresql em um container docker, e Typescript.
Enfim, neste projeto há uma funcionalidade que permite o usuário adicionar produtos, contendo nome, descrição, preço e uma imagem. No Controller desta rota, eu recebo a imagem com o tipo multipart/formdata, salvo ela localmente em uma pasta public/uploads utilizando o Multer (acredito que geralmente isso é armazenado em um storage de terceiro, porém fiz dessa forma pois esse não era o foco), crio uma url com base no nome da imagem + data de upload, e salvo essa url no banco, junto com os outros dados. Esse procedimento de capturar a imagem recebida no body da requisição, validar se ela realmente é uma imagem, validar tamanho, etc. ocorre em um Middleware nessa rota de Adicionar Produto.
Está funcionando normalmente, ele cria a url corretamente, e salva localmente. A rota de deletar um produto também funciona, ele deleta o registro no banco, e remove o arquivo localmente também.
Problema - Editando o produto.
Vou criar uma rota para permitir que o usuário edite um produto. No front-end, o usuário clicaria no botão de editar produto, e seria redirecionado para uma página de formulário, carregando todas as informações do produto em questão, porém habilitando os inputs, permitindo que ele altere tanto os campos de texto, quanto a imagem. No final, ele clicaria em Salvar, que dispararia uma requisição para uma rota /produts/edit/:id, enviando TODAS as informações daquele produto (independente se foram alterados ou não).
Nos campos do tipo texto é ok, visto que é só eu fazer um UPDATE FROM WHERE, porém a questão da imagem está me intrigando um pouco: Se o usuário alterar a imagem do produto, eu iria receber a nova imagem no body, validar igual eu fiz na rota de Adicionar Produto, excluir a imagem "antiga" localmente (eu criei uma função para isso na rota de Deletar, então eu conseguiria reaproveitar), e atualizar a image_url no banco. Agora vem minha dúvida (sim, eu sei que enrolei bastante para chegar nisso kkkkkk desculpa): E se o usuário não alterar a imagem ?
Em um primeiro momento, eu pensei em fazer a mesma coisa como se ele tivesse alterado: Eu teria que excluir a imagem "antiga" localmente, e receber ela novamente no body, a mesma imagem. Mas isso me cheira estranho. Pensei em alguma forma identificar que as imagens são iguais, mas não consegui pensar em uma. Eu poderia verificar pelo nome da imagem, mas se o usuário enviar uma imagem com conteúdo diferente, porém com o mesmo nome, a aplicação rejeitaria.
Eu sei que é uma aplicação de estudo, e que provavelmente neste contexto não haveria problema em deletar e adicionar a mesma imagem, porém como eu disse, isso cheira estranho, e mesmo não trabalhando na área, acredito que não seja feito desse jeito. Gostaria do ponto de vista de vocês sobre como lidar com isso (não precisa ter exemplo em código, só quero uma explicação sobre como abordar.)
Muito obrigado, e um ótimo final de semana.