diff --git a/partner_catalog/api/v1/urls.py b/partner_catalog/api/v1/urls.py index 9201e50..a4c901e 100644 --- a/partner_catalog/api/v1/urls.py +++ b/partner_catalog/api/v1/urls.py @@ -12,6 +12,7 @@ CatalogLearnerViewset, PartnerCatalogViewSet, PartnerViewset, + CatalogEnrollmentsViewSet ) router = DefaultRouter() @@ -26,6 +27,7 @@ manage_catalogs_router.register(r"learners", CatalogLearnerViewset, basename="catalog-learners") manage_catalogs_router.register(r"courses", CatalogCourseViewSet, basename="catalog-courses") manage_catalogs_router.register(r"invitations", CatalogLearnerInvitationViewSet, basename="catalog-learner-invitations") +manage_catalogs_router.register(r"enrollments", CatalogEnrollmentsViewSet, basename="catalog-enrollments") courses_router = NestedDefaultRouter(manage_catalogs_router, r"courses", lookup="course") courses_router.register(r"enrollments", CatalogCourseEnrollmentViewSet, basename="catalog-course-enrollments") diff --git a/partner_catalog/api/v1/views.py b/partner_catalog/api/v1/views.py index 89968b2..936d082 100644 --- a/partner_catalog/api/v1/views.py +++ b/partner_catalog/api/v1/views.py @@ -216,21 +216,6 @@ def available_courses(self, request, **kwargs): } return Response(response_data) - @action(detail=True, methods=["get"], url_path="enrollments") - def enrollments(self, request, pk=None): - """Get all course enrollments for this catalog.""" - enrollments = CatalogCourseEnrollment.objects.filter( - catalog_course__catalog_id=pk - ).select_related("user", "catalog_course", "catalog_course__course_overview") - - page = self.paginate_queryset(enrollments) - if page is not None: - serializer = CatalogCourseEnrollmentSerializer(page, many=True) - return self.get_paginated_response(serializer.data) - - serializer = CatalogCourseEnrollmentSerializer(enrollments, many=True) - return Response(serializer.data) - class CatalogLearnerViewset(InjectNestedFKMixin, viewsets.ReadOnlyModelViewSet): """ @@ -504,3 +489,23 @@ def get_queryset(self): qs = self.queryset course_pk = self.kwargs.get("course_pk") return qs.filter(catalog_course_id=course_pk) if course_pk else qs + + +class CatalogEnrollmentsViewSet(viewsets.ReadOnlyModelViewSet): + serializer_class = CatalogCourseEnrollmentSerializer + permission_classes = [IsPartnerCatalogManager] + filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] + + filterset_fields = ["active", "user"] + search_fields = ["user__username", "user__email"] + ordering_fields = ["id"] + ordering = ["-id"] + + def get_queryset(self): + catalog_pk = self.kwargs["catalog_pk"] + return ( + CatalogCourseEnrollment.objects.filter( + catalog_course__catalog_id=catalog_pk + ) + .select_related("user", "catalog_course", "catalog_course__course_overview") + )