From 662425eca6505fadb45911220fd1c6c7a3f4e680 Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Tue, 13 Jan 2026 14:59:12 +0900 Subject: [PATCH] fix: fix sorting issues in catalog learners api --- partner_catalog/api/v1/views.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/partner_catalog/api/v1/views.py b/partner_catalog/api/v1/views.py index 89968b2..3ca026d 100644 --- a/partner_catalog/api/v1/views.py +++ b/partner_catalog/api/v1/views.py @@ -1,6 +1,6 @@ """Partner Catalog API v1 Views.""" -from django.db.models import Count, OuterRef, Q, Subquery +from django.db.models import Count, F, OuterRef, Q, Subquery from django_filters.rest_framework import DjangoFilterBackend from edx_rest_framework_extensions.permissions import IsAuthenticated, IsStaff, IsSuperuser from rest_framework import filters, mixins, status, viewsets @@ -238,7 +238,7 @@ class CatalogLearnerViewset(InjectNestedFKMixin, viewsets.ReadOnlyModelViewSet): Provides access to corporate partner catalog learner information. """ - queryset = CatalogLearner.objects.select_related("catalog", "user") + queryset = CatalogLearner.objects.select_related("catalog", "user", "current_invitation") serializer_class = CatalogLearnerSerializer permission_classes = [IsPartnerCatalogManager] filter_backends = [ @@ -254,6 +254,7 @@ class CatalogLearnerViewset(InjectNestedFKMixin, viewsets.ReadOnlyModelViewSet): "accepted_at", "removed_at", "active", + "invite_sent_at", ] ordering = ["id"] @@ -269,6 +270,12 @@ def get_queryset(self): if catalog_pk: qs = qs.filter(catalog_id=catalog_pk) + qs = qs.annotate( + invite_sent_at=F("current_invitation__invited_at"), + accepted_at=F("current_invitation__accepted_at"), + removed_at=F("current_invitation__removed_at"), + ) + enrollments_subquery = CatalogCourseEnrollment.objects.filter( user_id=OuterRef("user_id"), catalog_course__catalog_id=OuterRef("catalog_id"),