Files
claboral.linkedcorp.net/backend/src/routes/surveys.js
T
2026-03-03 11:54:00 -05:00

59 lines
2.2 KiB
JavaScript

const express = require('express');
const { authRequired } = require('../middleware/auth');
const { resolveTenant } = require('../middleware/tenant');
const router = express.Router();
router.get('/active', resolveTenant, async (req, res, next) => {
try {
const [[period]] = await req.tenantPool.query('SELECT * FROM survey_periods WHERE estado = "activa" ORDER BY id DESC LIMIT 1');
if (!period) return res.json({ period: null, questions: [] });
const [questions] = await req.tenantPool.query(
'SELECT sq.question_id, sq.question_code, sq.text_snapshot AS text, d.name AS dimension FROM survey_questions sq JOIN dimensions d ON d.id = sq.dimension_id WHERE sq.survey_period_id = ? ORDER BY sq.sort_order ASC',
[period.id]
);
res.json({ period, questions });
} catch (err) {
next(err);
}
});
router.post('/responses', authRequired, resolveTenant, async (req, res, next) => {
try {
const { survey_period_id, answers } = req.body;
if (!survey_period_id || !Array.isArray(answers)) {
return res.status(400).json({ error: 'survey_period_id y answers requeridos' });
}
const [[{ total_questions }]] = await req.tenantPool.query(
'SELECT COUNT(*) AS total_questions FROM survey_questions WHERE survey_period_id = ?',
[survey_period_id]
);
const uniqueIds = new Set(answers.map((a) => a.question_id));
if (uniqueIds.size !== total_questions) {
return res.status(400).json({ error: 'Resultados incompletos' });
}
for (const ans of answers) {
if (![1,2,3,4,5].includes(Number(ans.value))) {
return res.status(400).json({ error: 'Valor inválido' });
}
const [[qrow]] = await req.tenantPool.query(
'SELECT question_code FROM survey_questions WHERE survey_period_id = ? AND question_id = ? LIMIT 1',
[survey_period_id, ans.question_id]
);
await req.tenantPool.query(
'INSERT INTO responses (survey_period_id, user_id, question_id, question_code, value) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE value = VALUES(value)',
[survey_period_id, req.user.id, ans.question_id, qrow?.question_code || '', ans.value]
);
}
res.json({ ok: true });
} catch (err) {
next(err);
}
});
module.exports = router;