Skip to content

Commit 57fa12b

Browse files
committed
fix: adjusted certificates extraction query
- The query filter was not being applied - Removed the certification annotation from enrollments query, as it already exists an endpoint for retrieving only certificates.
1 parent 2fcd16e commit 57fa12b

File tree

3 files changed

+5
-32
lines changed

3 files changed

+5
-32
lines changed

nau_openedx_extensions/partner_integration/facade.py

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ def _execute_certificates_query(self, certificates_base_query, start_dt, end_dt,
174174
filters |= Q(user__nauuserextendedmodel__cc_nif__in=nifs)
175175
filters &= Q(created_date__range=(start_dt, end_dt))
176176

177-
return use_read_replica_if_available(certificates_query.values_list("id", flat=True))
177+
return use_read_replica_if_available(certificates_query.filter(filters).values_list("id", flat=True))
178178
except Exception as e:
179179
logger.error("Error executing certificates query.", exc_info=e)
180180
raise PartnerIntegrationInternalErrorException() from e
@@ -358,7 +358,6 @@ def apply_heavy_operations(self, enrollment_ids):
358358
"""
359359
enrollments_query = CourseEnrollment.objects.filter(id__in=enrollment_ids)
360360
enrollments_query = enrollments_query.select_related("user", "course")
361-
enrollments_query = self._annotate_certificates_data(enrollments_query)
362361
enrollments_query = enrollments_query.distinct()
363362

364363
return enrollments_query
@@ -391,28 +390,11 @@ def _execute_enrollments_query(self, enrollments_base_query, start_dt, end_dt, c
391390
filters |= Q(user__nauuserextendedmodel__cc_nif__in=nifs)
392391
filters &= Q(created__range=(start_dt, end_dt))
393392

394-
enrollments_query = enrollments_query.filter(filters)
395-
396-
return use_read_replica_if_available(enrollments_query.values_list("id", flat=True))
393+
return use_read_replica_if_available(enrollments_query.filter(filters).values_list("id", flat=True))
397394
except Exception as e:
398395
logger.error("Error executing enrollments query.", exc_info=e)
399396
raise PartnerIntegrationInternalErrorException() from e
400397

401-
def _annotate_certificates_data(self, enrollments_query):
402-
"""Annotates enrollments with related certificates."""
403-
try:
404-
certificates_qs = GeneratedCertificate.objects.filter(
405-
course_id=OuterRef("course_id")
406-
)
407-
return enrollments_query.annotate(
408-
certificate_download_url=Subquery(certificates_qs.values("download_url")[:1]),
409-
certificate_status=Subquery(certificates_qs.values("status")[:1]),
410-
certificate_created=Subquery(certificates_qs.values("created_date")[:1]),
411-
)
412-
except Exception as e:
413-
logger.error("Error annotating certificates data.", exc_info=e)
414-
raise PartnerIntegrationInternalErrorException() from e
415-
416398

417399
class StudentProgressExportFacade(DataExtractorFacade):
418400
"""

nau_openedx_extensions/partner_integration/serializers.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,6 @@ def validate(self, attrs):
124124

125125
class CompleteEnrollmentDataSerializer(serializers.ModelSerializer):
126126
"""Serializer to flatten course enrollment, user, and course data."""
127-
certificate_created_date = serializers.DateTimeField(source='certificate_created', read_only=True)
128-
certificate_status = serializers.CharField(read_only=True)
129-
certificate_download_url = serializers.CharField(read_only=True)
130127
user_nif = serializers.CharField(source='user.nau_nif', read_only=True)
131128
username = serializers.CharField(source='user.username', read_only=True)
132129
user_name = serializers.SerializerMethodField()
@@ -150,9 +147,6 @@ def get_user_name(self, obj):
150147
class Meta:
151148
model = CourseEnrollment
152149
fields = [
153-
"certificate_created_date",
154-
"certificate_status",
155-
"certificate_download_url",
156150
"user_nif",
157151
"username",
158152
"user_name",

nau_openedx_extensions/partner_integration/tests/test_api.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -619,7 +619,7 @@ def test_combined_filters_reduce_result_set(self):
619619
format="json",
620620
)
621621
self.assertEqual(response.status_code, status.HTTP_200_OK)
622-
self.assertEqual(len(response.data["results"]), 50)
622+
self.assertEqual(len(response.data["results"]), 30)
623623

624624
def test_no_results_returns_empty_list(self):
625625
"""
@@ -678,9 +678,6 @@ def test_successful_validate_fields(self):
678678
partner_client = self.base_data["partner_clients"][0]
679679
access_token = self.authenticate_partner_client(partner_client)
680680
fields = [
681-
"certificate_created_date",
682-
"certificate_status",
683-
"certificate_download_url",
684681
"user_nif",
685682
"username",
686683
"user_email",
@@ -706,7 +703,7 @@ def test_successful_validate_fields(self):
706703
self.assertIn("results", response.data)
707704
self.assertTrue(len(response.data["results"]))
708705
fields_from_response = dict(response.data["results"][0]).keys()
709-
self.assertEqual(len(fields_from_response), 16)
706+
self.assertEqual(len(fields_from_response), 13)
710707
for field in fields:
711708
self.assertIn(field, fields_from_response)
712709

@@ -876,7 +873,7 @@ def test_pagination_applies_limits(self):
876873

877874
self.assertEqual(response.status_code, status.HTTP_200_OK)
878875
self.assertEqual(len(response.data["results"]), 100)
879-
self.assertEqual(len(response.data["results"][0].keys()), 16)
876+
self.assertEqual(len(response.data["results"][0].keys()), 13)
880877

881878
has_next = True
882879
while has_next:

0 commit comments

Comments
 (0)