feat: completar fases 3 y 4 del roadmap mvp (gradebook, drag-and-drop, impersonacion) y actualizar README

This commit is contained in:
2026-09-23 12:10:31 -03:00
parent 4ebc5df4fd
commit 7ad4e3f099
38 changed files with 3804 additions and 390 deletions
+20
View File
@@ -189,10 +189,27 @@ app.use((req, res, next) => {
};
} catch (e) {}
}
let isImpersonating = false;
let impersonatedUser = null;
if (user.is_admin() && req.cookies.impersonate_user_id) {
isImpersonating = true;
const targetId = req.cookies.impersonate_user_id;
try {
if (req.cookies.impersonate_user_data) {
impersonatedUser = JSON.parse(req.cookies.impersonate_user_data);
}
} catch (e) {}
if (!impersonatedUser) {
impersonatedUser = { id: targetId, name: `Usuario #${targetId}`, role: 'usuario' };
}
}
req.user = user;
res.locals.user = user;
res.locals.current_user = user;
res.locals.role = user.role;
res.locals.is_impersonating = isImpersonating;
res.locals.impersonated_user = impersonatedUser;
res.locals.session = { get: (k, d) => d };
res.locals.occupancy_metrics = { get: (k, d) => d };
next();
@@ -259,6 +276,9 @@ app.use('/api', async (req, res) => {
if (token) {
headers['Authorization'] = `Bearer ${token}`;
}
if (req.cookies.impersonate_user_id) {
headers['X-Impersonate-User'] = req.cookies.impersonate_user_id;
}
const flaskUrl = `http://127.0.0.1:5000/api${req.url}`;
const response = await axios({
method: req.method,