From 662425eca6505fadb45911220fd1c6c7a3f4e680 Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Tue, 13 Jan 2026 14:59:12 +0900 Subject: [PATCH 1/3] 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"), From 9c94c398ea8b1e35b00efbbe2cec41a363a46405 Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Fri, 23 Jan 2026 10:44:03 +0900 Subject: [PATCH 2/3] feat: add more search fields to catalog learners api Co-authored-by: Diana Olarte --- partner_catalog/api/v1/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/partner_catalog/api/v1/views.py b/partner_catalog/api/v1/views.py index 3ca026d..40d6cc4 100644 --- a/partner_catalog/api/v1/views.py +++ b/partner_catalog/api/v1/views.py @@ -247,7 +247,7 @@ class CatalogLearnerViewset(InjectNestedFKMixin, viewsets.ReadOnlyModelViewSet): filters.OrderingFilter, ] filterset_fields = ["catalog", "active", "user"] - search_fields = ["user__username", "user__email"] + search_fields = ["user__username", "user__first_name", "user__last_name", "user__email"] ordering_fields = [ "id", "user_id", From 6f9c289e65f20f06970f8e098b5b0ce674d5c960 Mon Sep 17 00:00:00 2001 From: Alejandro Cardenas Date: Fri, 23 Jan 2026 11:06:17 +0900 Subject: [PATCH 3/3] feat: add last_login to ordering in catalog learners api --- partner_catalog/api/v1/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/partner_catalog/api/v1/views.py b/partner_catalog/api/v1/views.py index 40d6cc4..342856a 100644 --- a/partner_catalog/api/v1/views.py +++ b/partner_catalog/api/v1/views.py @@ -255,6 +255,7 @@ class CatalogLearnerViewset(InjectNestedFKMixin, viewsets.ReadOnlyModelViewSet): "removed_at", "active", "invite_sent_at", + "user__last_login", ] ordering = ["id"]