feat: implementacion de dashboards por rol, soporte de clases virtuales concurrentes en importador de sheets y cartelera del dia

This commit is contained in:
2026-09-18 23:04:48 -03:00
parent 47b50ede7e
commit 1080acd43a
240 changed files with 8354 additions and 8886 deletions
+102
View File
@@ -0,0 +1,102 @@
const express = require('express');
const router = express.Router();
const { requireAuth } = require('../middlewares/authMiddleware');
router.use(requireAuth);
const handleMySubjectsList = async (req, res) => {
try {
let commissions = [];
try {
const resp = await req.apiClient.get('/commissions');
if (resp.data && resp.data.commissions) {
commissions = resp.data.commissions.map(c => ({
...c,
full_code: c.full_code || c.code,
subject: { name: c.subject_name || c.subject?.name, code: c.subject_code || c.subject?.code }
}));
}
} catch (e) {
console.warn('My subjects list API notice:', e.message);
}
res.render('my_subjects/list', {
title: 'Mis Materias — Edu-Space',
commissions,
view_mode: 'all',
role: req.user?.role || 'admin'
});
} catch (err) {
console.error('Error in my_subjects list:', err.message);
res.render('my_subjects/list', {
title: 'Mis Materias',
commissions: [],
view_mode: 'all',
role: 'admin'
});
}
};
const handleMySubjectDetail = async (req, res) => {
const id = req.params.id || req.query.id || req.params.commission_id || 1;
try {
let commission = null;
try {
const resp = await req.apiClient.get(`/commissions/${id}`);
if (resp.data && resp.data.commission) {
commission = resp.data.commission;
}
} catch (e) {
console.warn('Commission detail API notice:', e.message);
}
if (!commission) {
// Fallback: fetch list and find
try {
const listResp = await req.apiClient.get('/commissions');
const list = listResp.data?.commissions || [];
const found = list.find(c => String(c.id) === String(id)) || list[0];
if (found) {
commission = {
...found,
full_code: found.full_code || found.code,
subject: { name: found.subject_name, code: found.subject_code },
active: found.active !== undefined ? found.active : true
};
}
} catch (err) {}
}
if (!commission) {
commission = {
id,
code: 'C1',
full_code: 'MAT-C1',
subject: { name: 'Materia', code: 'MAT' },
shift: 'Mañana',
semester: '1C',
year: 2026,
active: true,
max_students: 35,
current_students: 20
};
}
res.render('my_subjects/detail', {
title: `${commission.subject?.name || 'Materia'} — ${commission.full_code || commission.code} — Edu-Space`,
commission,
enrollments: [],
classroom: null,
recent_reservation: null,
role: req.user?.role || 'admin'
});
} catch (err) {
console.error('Error in my_subjects detail:', err.message);
res.redirect('/my_subjects/my_subjects_list');
}
};
router.get(['/', '/list', '/my_subjects_list'], handleMySubjectsList);
router.get(['/detail', '/commission_detail', '/:id', '/detail/:id'], handleMySubjectDetail);
module.exports = router;