from django.shortcuts import redirect from rest_framework import permissions from rest_framework.decorators import api_view, permission_classes from rest_framework.generics import get_object_or_404 from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from vbv_lernwelt.core.serializers import UserSerializer from vbv_lernwelt.course.models import CourseSession, CourseSessionUser from vbv_lernwelt.iam.permissions import is_course_session_member from vbv_lernwelt.learning_mentor.content.praxis_assignment import ( get_praxis_assignments, ) from vbv_lernwelt.learning_mentor.models import LearningMentor, MentorInvitation from vbv_lernwelt.learning_mentor.serializers import PraxisAssignmentStatusSerializer from vbv_lernwelt.learnpath.models import Circle @api_view(["GET"]) @permission_classes([IsAuthenticated]) def mentor_summary(request, course_session_id: int): course_session = CourseSession.objects.get(id=course_session_id) mentor = get_object_or_404( LearningMentor, mentor=request.user, course=course_session.course ) participants = mentor.participants.filter(course_session=course_session) users = [p.user for p in participants] praxis_assignments, circle_ids = get_praxis_assignments(course_session, users) circles = Circle.objects.filter(id__in=circle_ids).values("id", "title") return Response( { "participants": [UserSerializer(user).data for user in users], "circles": list(circles), "praxis_assignments": PraxisAssignmentStatusSerializer( praxis_assignments, many=True ).data, } ) class CourseSessionMember(permissions.BasePermission): def has_permission(self, request, view): return is_course_session_member( request.user, view.kwargs.get("course_session_id") ) @api_view(["GET"]) @permission_classes([IsAuthenticated]) def list_invitations(request, course_session_id: int): pass @api_view(["POST"]) @permission_classes([IsAuthenticated, CourseSessionMember]) def create_invitation(request, course_session_id: int): course_session = get_object_or_404(CourseSession, id=course_session_id) course_session_user = get_object_or_404( CourseSessionUser, user=request.user, course_session=course_session ) email = request.data.get("email") if not email: return Response({"error": "email is required"}, status=400) invitation = MentorInvitation.objects.get_or_create( email=email, participant=course_session_user, ) return Response({}) @api_view(["GET"]) def accept_invitation(request, course_session_id: int): if not request.user.is_authenticated: return redirect(f"/onboarding/vv/account/create?next={request.path}") # Validate invitation