ÿØÿà JFIF ` ` ÿþ
|
Server : Apache System : Linux cloud.heroica.com.br 4.18.0-553.36.1.el8_10.x86_64 #1 SMP Wed Jan 22 03:07:54 EST 2025 x86_64 User : farolpborg ( 1053) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /var/www/node_services/apicentralquestoes/src/services/ |
Upload File : |
const Prova = require("../models/Prova");
const ProgressoProva = require("../models/ProgressoProva");
const provasService = {
listarProvas: async (segmento) => {
try {
const segmentosValidos = ["Direito", "Medicina"];
if (segmento && !segmentosValidos.includes(segmento)) {
return {
erro: 400,
mensagem: "Segmento inválido. Use 'Direito' ou 'Medicina'.",
};
}
const where = segmento ? { segment: segmento } : {};
const provas = await Prova.findAll({
where,
attributes: { exclude: ["questions"] },
});
if (provas.length === 0) {
return {
erro: 404,
mensagem: "Nenhuma prova encontrada para o segmento especificado.",
};
}
return provas;
} catch (erro) {
console.error("Erro ao listar provas:", erro);
return { erro: 500, mensagem: "Erro interno no servidor." };
}
},
obterProvaPorId: async (id, userId) => {
try {
const prova = await Prova.findByPk(id);
if (!prova) {
return { erro: 404, mensagem: "Prova não encontrada." };
}
let progresso = await ProgressoProva.findOne({
where: { prova_id: id, user_id: userId },
});
if (progresso) {
progresso.questoes_certas = 0;
progresso.questoes_erradas = 0;
progresso.questoes_detalhes = [];
await progresso.save();
} else {
progresso = await ProgressoProva.create({
user_id: userId,
prova_id: id,
questoes_certas: 0,
questoes_erradas: 0,
questoes_detalhes: [],
});
}
return { prova, progresso };
} catch (erro) {
console.error("Erro ao obter prova:", erro);
return { erro: 500, mensagem: "Erro interno no servidor." };
}
},
obterProgressoPorProva: async (provaId, userId) => {
try {
let progresso = await ProgressoProva.findOne({
where: { prova_id: provaId, user_id: userId },
});
if (!progresso) {
progresso = await ProgressoProva.create({
user_id: userId,
prova_id: provaId,
questoes_certas: 0,
questoes_erradas: 0,
questoes_detalhes: [],
});
}
return progresso;
} catch (erro) {
console.error("Erro ao obter progresso da prova:", erro);
return { erro: 500, mensagem: "Erro interno no servidor." };
}
},
registrarResposta: async (provaId, userId, numeroQuestao, alternativa) => {
try {
const prova = await Prova.findByPk(provaId);
if (!prova) {
return { erro: 404, mensagem: "Prova não encontrada." };
}
if (!prova.questions || !Array.isArray(prova.questions)) {
return { erro: 404, mensagem: "Nenhuma questão encontrada na prova." };
}
const questao = prova.questions.find(
(q) => q.number === numeroQuestao || q.question_number === numeroQuestao
);
if (!questao) {
return { erro: 404, mensagem: "Questão não encontrada na prova." };
}
const correta =
(questao.correct_answer || questao.correct_answer_letter) ===
alternativa;
let progresso = await ProgressoProva.findOne({
where: { prova_id: provaId, user_id: userId },
});
if (!progresso) {
progresso = await ProgressoProva.create({
user_id: userId,
prova_id: provaId,
questoes_certas: 0,
questoes_erradas: 0,
questoes_detalhes: [],
});
}
if (correta) {
progresso.questoes_certas += 1;
} else {
progresso.questoes_erradas += 1;
}
const detalhes = progresso.questoes_detalhes || [];
detalhes.push({ numero_questao: numeroQuestao, alternativa, correta });
progresso.questoes_detalhes = detalhes;
await progresso.save();
return progresso;
} catch (erro) {
console.error("Erro ao registrar resposta:", erro);
return { erro: 500, mensagem: "Erro interno no servidor." };
}
},
};
module.exports = provasService;