from flask import Blueprint, jsonify, request, g from app.utils.jwt_decorators import jwt_required from app.services.gradebook_service import GradebookService api_students_bp = Blueprint('api_students', __name__) @api_students_bp.route('/students/my-grades', methods=['GET']) @jwt_required def get_my_grades(): """Consulta individual de calificaciones y estado académico del alumno logueado.""" user = getattr(g, 'jwt_user', None) user_id = user.id if user else getattr(request, 'current_user_id', None) if not user_id: return jsonify({'error': 'Unauthorized', 'message': 'Usuario no autenticado.'}), 401 try: grades = GradebookService.get_student_grades(user_id) return jsonify({ 'status': 'success', 'student_id': user_id, 'is_impersonating': getattr(g, 'is_impersonating', False), 'data': grades }), 200 except Exception as e: return jsonify({'error': 'ServerError', 'message': str(e)}), 500 @api_students_bp.route('/students/my-upcoming-milestones', methods=['GET']) @jwt_required def get_my_upcoming_milestones(): """Próximas evaluaciones e hitos académicos con cuenta regresiva para el dashboard.""" user = getattr(g, 'jwt_user', None) user_id = user.id if user else getattr(request, 'current_user_id', None) if not user_id: return jsonify({'error': 'Unauthorized', 'message': 'Usuario no autenticado.'}), 401 limit = request.args.get('limit', default=5, type=int) try: milestones = GradebookService.get_student_upcoming_milestones(user_id, limit=limit) return jsonify({'status': 'success', 'data': milestones}), 200 except Exception as e: return jsonify({'error': 'ServerError', 'message': str(e)}), 500