44 lines
1.8 KiB
Python
44 lines
1.8 KiB
Python
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
|