From 9424979bef1d3220fc4c82f275619343d17f8675 Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Mon, 22 Jul 2024 14:59:53 +0200 Subject: [PATCH] Select related data --- server/vbv_lernwelt/competence/services.py | 4 +-- .../dashboard/graphql/types/assignment.py | 33 ++++++++++--------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/server/vbv_lernwelt/competence/services.py b/server/vbv_lernwelt/competence/services.py index 0ef4d306..977ea2dc 100644 --- a/server/vbv_lernwelt/competence/services.py +++ b/server/vbv_lernwelt/competence/services.py @@ -17,7 +17,7 @@ def query_competence_course_session_assignments(course_session_ids, circle_ids=N AssignmentType.CASEWORK.value, ], learning_content__content_assignment__competence_certificate__isnull=False, - ): + ).select_related("submission_deadline", "learning_content"): if circle_ids and csa.learning_content.get_circle().id not in circle_ids: continue result.append(csa) @@ -34,7 +34,7 @@ def query_competence_course_session_edoniq_tests(course_session_ids, circle_ids= for cset in CourseSessionEdoniqTest.objects.filter( course_session_id__in=course_session_ids, learning_content__content_assignment__competence_certificate__isnull=False, - ): + ).select_related("deadline", "learning_content"): if circle_ids and cset.learning_content.get_circle().id not in circle_ids: continue result.append(cset) diff --git a/server/vbv_lernwelt/dashboard/graphql/types/assignment.py b/server/vbv_lernwelt/dashboard/graphql/types/assignment.py index 8199bc72..d09d5d36 100644 --- a/server/vbv_lernwelt/dashboard/graphql/types/assignment.py +++ b/server/vbv_lernwelt/dashboard/graphql/types/assignment.py @@ -2,12 +2,12 @@ import math from typing import List import graphene +from django.db import connection, reset_queries import vbv_lernwelt.assignment.models from vbv_lernwelt.assignment.models import ( AssignmentCompletion, AssignmentCompletionStatus, - AssignmentType, ) from vbv_lernwelt.competence.services import ( query_competence_course_session_assignments, @@ -176,6 +176,9 @@ def assignments( circle_ids: List[graphene.ID] | None = None, urql_id: str = None, ) -> AssignmentsStatisticsType: + import structlog + + logger = structlog.get_logger() if urql_id is None: urql_id = str(course_id) @@ -184,22 +187,20 @@ def assignments( ) records: List[AssignmentStatisticsRecordType] = [] - for course_session in course_sessions: - for csa in query_competence_course_session_assignments( - [course_session.id], circle_ids - ): - record = create_record(csa, user_selection_ids, urql_id_postfix=urql_id) - records.append(record) + reset_queries() + csas = query_competence_course_session_assignments(course_sessions, circle_ids) + csets = query_competence_course_session_edoniq_tests(course_sessions, circle_ids) - for cset in query_competence_course_session_edoniq_tests( - [course_session.id], circle_ids - ): - record = create_record( - course_session_assignment=cset, - user_selection_ids=user_selection_ids, - urql_id_postfix=urql_id, - ) - records.append(record) + for csa in csas: + record = create_record(csa, user_selection_ids, urql_id_postfix=urql_id) + records.append(record) + + for cset in csets: + record = create_record(cset, user_selection_ids, urql_id_postfix=urql_id) + records.append(record) + + num_queries = len(connection.queries) + logger.info(f"cset number of queries executed: {num_queries}") return AssignmentsStatisticsType( _id=urql_id, # noqa