105 lines
3.7 KiB
JavaScript
105 lines
3.7 KiB
JavaScript
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);
|
|
router.get(['/gradebook/:id', '/:id/gradebook'], (req, res) => res.redirect(`/schedule/gradebook/${req.params.id}`));
|
|
router.get(['/grades', '/my_grades', '/mis-notas'], (req, res) => res.redirect('/schedule/my_grades'));
|
|
|
|
module.exports = router;
|