From ac06dff5c38af89605347ada6ba3c100c82361eb Mon Sep 17 00:00:00 2001 From: Livio Bieri Date: Tue, 3 Oct 2023 17:03:20 +0200 Subject: [PATCH] feat: migration for url_expert --- server/vbv_lernwelt/course_session/models.py | 18 ++--- .../migrations/0005_auto_20230925_1648.py | 65 +++++++++++++++++++ 2 files changed, 71 insertions(+), 12 deletions(-) diff --git a/server/vbv_lernwelt/course_session/models.py b/server/vbv_lernwelt/course_session/models.py index e54aa503..f96d07ea 100644 --- a/server/vbv_lernwelt/course_session/models.py +++ b/server/vbv_lernwelt/course_session/models.py @@ -63,11 +63,8 @@ class CourseSessionAttendanceCourse(models.Model): ) if not self.due_date.manual_override_fields: - course = self.learning_content.get_course() - self.due_date.url = self.learning_content.get_frontend_url() - # TODO: @livioso move this to the learning content? - self.due_date.url_expert = f"/course/{course.slug}/cockpit/attendance?id={self.learning_content_id}" + self.due_date.url_expert = f"/course/{self.due_date.course_session.course.slug}/cockpit/attendance?id={self.learning_content_id}" self.due_date.title = self.learning_content.title self.due_date.page = self.learning_content.page_ptr self.due_date.assignment_type_translation_key = ( @@ -134,11 +131,7 @@ class CourseSessionAssignment(models.Model): AssignmentType.REFLECTION.value: "learningContentTypes.reflection", } - # TODO @livioso move this to the learning content? - course = self.learning_content.get_course() - url_expert = ( - f"/course/{course.slug}/cockpit/assignment/{self.learning_content_id}" - ) + url_expert = f"/course/{self.course_session.course.slug}/cockpit/assignment/{self.learning_content_id}" if assignment_type in ( AssignmentType.CASEWORK.value, @@ -151,7 +144,6 @@ class CourseSessionAssignment(models.Model): if not self.submission_deadline.manual_override_fields: self.submission_deadline.url = url - # TODO: @livioso check what's expected here self.submission_deadline.url_expert = url_expert self.submission_deadline.title = title self.submission_deadline.assignment_type_translation_key = ( @@ -172,7 +164,7 @@ class CourseSessionAssignment(models.Model): if not self.evaluation_deadline.manual_override_fields: self.evaluation_deadline.url = url - self.submission_deadline.url_expert = url_expert + self.evaluation_deadline.url_expert = url_expert self.evaluation_deadline.title = title self.evaluation_deadline.assignment_type_translation_key = ( assignment_type_translation_keys[assignment_type] @@ -221,7 +213,9 @@ class CourseSessionEdoniqTest(models.Model): if not self.deadline.manual_override_fields: self.deadline.url = self.learning_content.get_frontend_url() - self.deadline.expert_url = self.learning_content.get_frontend_url() + self.deadline.url_expert = ( + f"/course/{self.course_session.course.slug}/cockpit/" + ) self.deadline.title = self.learning_content.title self.deadline.page = self.learning_content.page_ptr self.deadline.assignment_type_translation_key = ( diff --git a/server/vbv_lernwelt/duedate/migrations/0005_auto_20230925_1648.py b/server/vbv_lernwelt/duedate/migrations/0005_auto_20230925_1648.py index cc71a2be..f54b2a27 100644 --- a/server/vbv_lernwelt/duedate/migrations/0005_auto_20230925_1648.py +++ b/server/vbv_lernwelt/duedate/migrations/0005_auto_20230925_1648.py @@ -3,6 +3,70 @@ from django.db import migrations, models +def set_url_expert_course_session_assignments(apps): + Course = apps.get_model("course", "Course") # noqa + + CourseSessionAssignment = apps.get_model( # noqa + "course_session", "CourseSessionAssignment" + ) + + for assignment in CourseSessionAssignment.objects.all(): + for due_date in [ + assignment.submission_deadline, + assignment.evaluation_deadline, + ]: + if due_date and due_date.page: + course_slug = due_date.course_session.course.slug + content_id = due_date.page.id + due_date.url_expert = ( + f"/course/{course_slug}/cockpit/assignment/{content_id}" + ) + due_date.save() + + +def set_url_expert_course_session_edoniq_test(apps): + CourseSessionEdoniqTest = apps.get_model( # noqa + "course_session", "CourseSessionEdoniqTest" + ) + + for edoniq_test in CourseSessionEdoniqTest.objects.all(): + due_date = edoniq_test.deadline + + if due_date: + course_slug = due_date.course_session.course.slug + due_date.url_expert = f"/course/{course_slug}/cockpit/" + due_date.save() + + +def set_url_expert_course_session_attendances(apps): + Course = apps.get_model("course", "Course") # noqa + + CourseSessionAttendanceCourse = apps.get_model( # noqa + "course_session", "CourseSessionAttendanceCourse" + ) + + for attendance in CourseSessionAttendanceCourse.objects.all(): + due_date = attendance.due_date + if due_date and due_date.page: + course_slug = due_date.course_session.course.slug + content_id = due_date.page.id + due_date.url_expert = ( + f"/course/{course_slug}/cockpit/attendance?id={content_id}" + ) + due_date.save() + + +def set_url_expert_default(apps, schema_editor): + set_url_expert_course_session_assignments(apps) + set_url_expert_course_session_attendances(apps) + set_url_expert_course_session_edoniq_test(apps) + + +def reverse_func(apps, schema_editor): + # so we can reverse this migration, but noop + pass + + class Migration(migrations.Migration): dependencies = [ ("duedate", "0004_alter_duedate_start"), @@ -29,4 +93,5 @@ class Migration(migrations.Migration): max_length=1024, ), ), + migrations.RunPython(set_url_expert_default, reverse_func), ]