Explicar
Essa é uma
race condition
. O que é uma condição de corrida?
Solução:
Existem muitas maneiras de evitar conflitos de dados neste caso, um bloqueio é 1 opção.
Você pode bloquear no nível do aplicativo ou no nível do banco de dados... mas eu prefiro que você leia este tópico antes de escolher qualquer um deles.
Bloqueio otimista x pessimista
Solução rápida:
pessimistic-lock
https://www.npmjs.com/package/redis-lock