O controller que é executado na rota que está dando o erro é bem básico ele simplesmente cria uma linha em um banco de dados usando Sequelize, não estou usando variáveis fora do escopo, o que me deixou bem cabreiro é que a requisição recebe um id e a api meio que "confunde" os ids com muitos acessos, eu simulei com com 1, 2, 3 usuários simultâneos e não aconteceu de novo, eu não sei dizer se o problema é na api, no banco, no app ou no server...
O escopo do projeto é basicamente esse:
App -> React Native/Expo
Api -> Node.JS/ REST
BD -> Postgress
RESUMO:
No app existem formulários que estão em uma tabela 'forms', cada formulário tem um 'id_form' e um status ('WAITING'|'COMPLETED'). Existe tambem uma tabela de questões, e cada questão tem um titulo, um tipo ('INPUT','IMAGE','RADIO' etc), e cada questão tem um id_form que é a referencia ao formulário dono da questão, existem tambem as tabelas de ResponseImage, ResponseText e ResponseAlternative que são para guardar as respostas para cada questão e cada resposta referencia um id_question ligando a questão que por sua vez referencia um formulário.
PROBLEMA:
O que aconteceu foi que em um momento 30 usuários em uma sala responderam alguns formulários, todos os formulários tinham as memas perguntas (titulo das perguntas) porém não eram os mesmos formulários pois cada ums tinham um id_form diferente, com id_questions diferentes e etc. Todos eles responderam o formulários por completo, ao fim do processo quando fui analizar os resultados, a resposta de algumas questões estavam vazias, alguns formulários ficaram em branco e algumas respostas estavam trocadas entre questões sendo que cada questão tem um formulário dono mas cada usuário iniciou em seu próprio formulário.
Um exemplo do código da rota que ocorrou o problema:
async answereImage(req, res) {
const { id_question, description } = req.body;
if (!id_question) {
return res.status(200).json({});
}
try {
const filename = req.file.filename;
const answerQuestion = await ResponseImage.create({
id_question: Number(id_question),
filename: filename,
description: description,
});
return res.status(200).json(answerQuestion);
} catch (error) {
console.log(error)
res.status(500).send(error)
}
}
Não sei se expliquei bem o caso de uso, está complexo demais pra minha cabeça, qualquer ajuda é bem vinda, qualquer duvida que for pra ajudar a resolver pode perguntar só quero entender oq está acontecendo kkkkk cada k é uma lagrima