diff --git a/server/config/urls.py b/server/config/urls.py index 735a4f0d..2d5c3f74 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -7,6 +7,9 @@ from django.urls import include, path, re_path from django.views import defaults as default_views from grapple import urls as grapple_urls from ratelimit.exceptions import Ratelimited +from wagtail import urls as wagtail_urls +from wagtail.admin import urls as wagtailadmin_urls +from wagtail.documents import urls as wagtaildocs_urls from vbv_lernwelt.core.middleware.auth import django_view_authentication_exempt from vbv_lernwelt.core.views import ( @@ -25,10 +28,8 @@ from vbv_lernwelt.course.views import ( get_course_sessions, mark_course_completion, request_course_completion, + get_course_session_users, ) -from wagtail import urls as wagtail_urls -from wagtail.admin import urls as wagtailadmin_urls -from wagtail.documents import urls as wagtaildocs_urls def raise_example_error(request): @@ -62,6 +63,8 @@ urlpatterns = [ # course path(r"api/course/sessions/", get_course_sessions, name="get_course_sessions"), + path(r"api/course/sessions//users/", get_course_session_users, + name="get_course_session_users"), path(r"api/course/page//", course_page_api_view, name="course_page_api_view"), path(r"api/course/completion/mark/", mark_course_completion, diff --git a/server/vbv_lernwelt/course/serializers.py b/server/vbv_lernwelt/course/serializers.py index 8306bc42..c515796e 100644 --- a/server/vbv_lernwelt/course/serializers.py +++ b/server/vbv_lernwelt/course/serializers.py @@ -13,7 +13,7 @@ from vbv_lernwelt.learnpath.models import Circle class CourseSerializer(serializers.ModelSerializer): class Meta: model = Course - fields = ["id", "title", "category_name"] + fields = ["id", "title", "category_name", "slug"] class CourseCategorySerializer(serializers.ModelSerializer): diff --git a/server/vbv_lernwelt/course/views.py b/server/vbv_lernwelt/course/views.py index 8b2ea11d..a047cfce 100644 --- a/server/vbv_lernwelt/course/views.py +++ b/server/vbv_lernwelt/course/views.py @@ -5,7 +5,7 @@ from rest_framework.response import Response from wagtail.models import Page from vbv_lernwelt.core.utils import api_page_cache_get_or_set -from vbv_lernwelt.course.models import CourseCompletion +from vbv_lernwelt.course.models import CourseCompletion, CourseSessionUser from vbv_lernwelt.course.permissions import ( course_sessions_for_user_qs, has_course_access_by_page_request, @@ -115,3 +115,30 @@ def get_course_sessions(request): except Exception as e: logger.error(e) return Response({"error": str(e)}, status=404) + + +@api_view(["GET"]) +def get_course_session_users(request, course_slug): + try: + course_sessions = course_sessions_for_user_qs(request.user).filter( + course__slug=course_slug + ) + qs = CourseSessionUser.objects.filter(course_session__in=course_sessions) + data = [ + { + "session_title": csu.course_session.title, + "user_id": csu.user.id, + "first_name": csu.user.first_name, + "last_name": csu.user.last_name, + "email": csu.user.email, + "avatar_url": csu.user.avatar_url, + } + for csu in qs + ] + + return Response(status=200, data=data) + except PermissionDenied as e: + raise e + except Exception as e: + logger.error(e) + return Response({"error": str(e)}, status=404)