From b08ec6256b021396f992c9e0ec82e1fad6caa919 Mon Sep 17 00:00:00 2001 From: Alexander Dusenbery Date: Mon, 7 Oct 2024 11:08:53 -0400 Subject: [PATCH] feat: add default enrollment models Adds two models, `DefaultEnterpriseEnrollmentIntention` and `DefaultEnterpriseEnrollmentRealization`. The former defines, for a customer, a course/run that associated users should be automatically enrolled into. The latter represents the relationship between that intention record and a realized EnterpriseCourseEnrollment; persisting realized enrollments in this way will help to make read operations related to default enrollments much more efficient. ENT-9577 --- enterprise/models.py | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/enterprise/models.py b/enterprise/models.py index 014f8eaf2..4b0907929 100644 --- a/enterprise/models.py +++ b/enterprise/models.py @@ -2461,6 +2461,62 @@ class LicensedEnterpriseCourseEnrollment(EnterpriseFulfillmentSource): ) +class DefaultEnterpriseEnrollmentIntention(TimeStampedModel): + """ + Specific to an enterprise customer, this model defines a course or course run + that should be auto-enrolled for any enterprise customer user linked to the customer. + """ + uuid = models.UUIDField( + primary_key=True, + editable=False, + ) + enterprise_customer = models.ForeignKey( + EnterpriseCustomer, + blank=False, + null=False, + related_name="default_course_enrollments", + on_delete=models.deletion.CASCADE, + help_text=_( + "The customer for which this default enrollment will be realized.", + ) + ) + content_key = models.CharField( + max_length=255, + blank=False, + null=False, + help_text=_( + "A course or course run that related users should be automatically enrolled into." + ) + ) + realized_enrollments = models.ManyToManyField( + EnterpriseCourseEnrollment, + through='RealizedDefaultEnterpriseEnrollment', + through_fields=("intended_enrollment", "realized_enrollment"), + ) + + @property + def current_course_run_key(self): # pragma: no cover + """ + The current run to use for realized course enrollments. + """ + raise NotImplementedError + + +class DefaultEnterpriseEnrollmentRealization(TimeStampedModel): + """ + Represents the relationship between a `DefaultEnterpriseEnrollmentIntention` + and a realized course enrollment that exists because of that intention record. + """ + intended_enrollment = models.ForeignKey( + DefaultEnterpriseEnrollmentIntention, + on_delete=models.CASCADE, + ) + realized_enrollment = models.ForignKey( + EnterpriseCourseEnrollment, + on_delete=models.CASCADE, + ) + + class EnterpriseCatalogQuery(TimeStampedModel): """ Stores a re-usable catalog query.