Files
edx-platform/lms/djangoapps/learner_dashboard/serializers.py
Nathan Sprenkle 71fabb7f87 feat: add remaining learner dash serializers (#30707)
* feat: add UnfulfilledEntitlementSerializer

* feat: add SuggestedCoursesSerializer

* feat: add new enrollment serializer fields

* test: new enrollment serializer fields

* feat: add new entitlement serializer fields

* feat: add EmailConfirmationSerializer

* feat: add EnterpriseDashboardsSerializer

* fix: update learner view with new serializers

Co-authored-by: nsprenkle <nsprenkle@2u.com>
2022-07-13 15:46:49 -04:00

194 lines
6.2 KiB
Python

"""
Serializers for the Learner Dashboard
"""
from rest_framework import serializers
class PlatformSettingsSerializer(serializers.Serializer):
"""Serializer for platform-level info, emails, and URLs"""
supportEmail = serializers.EmailField()
billingEmail = serializers.EmailField()
courseSearchUrl = serializers.URLField()
class CourseProviderSerializer(serializers.Serializer):
"""Info about a course provider (institution/business)"""
name = serializers.CharField()
website = serializers.URLField()
email = serializers.EmailField()
class CourseSerializer(serializers.Serializer):
"""Serializer for course header info"""
bannerImgSrc = serializers.URLField()
courseName = serializers.CharField()
class CourseRunSerializer(serializers.Serializer):
"""Serializer for course run info"""
isPending = serializers.BooleanField()
isStarted = serializers.BooleanField()
isFinished = serializers.BooleanField()
isArchived = serializers.BooleanField()
courseNumber = serializers.CharField()
accessExpirationDate = serializers.DateTimeField()
minPassingGrade = serializers.DecimalField(max_digits=5, decimal_places=2)
endDate = serializers.DateTimeField()
homeUrl = serializers.URLField()
marketingUrl = serializers.URLField()
progressUrl = serializers.URLField()
unenrollUrl = serializers.URLField()
upgradeUrl = serializers.URLField()
class EnrollmentSerializer(serializers.Serializer):
"""Info about this particular enrollment"""
isAudit = serializers.BooleanField()
isVerified = serializers.BooleanField()
canUpgrade = serializers.BooleanField()
isAuditAccessExpired = serializers.BooleanField()
isEmailEnabled = serializers.BooleanField()
lastEnrolled = serializers.DateTimeField()
isEnrolled = serializers.BooleanField()
class GradeDataSerializer(serializers.Serializer):
"""Info about grades for this enrollment"""
isPassing = serializers.BooleanField()
class CertificateSerializer(serializers.Serializer):
"""Certificate availability info"""
availableDate = serializers.DateTimeField(allow_null=True)
isRestricted = serializers.BooleanField()
isAvailable = serializers.BooleanField()
isEarned = serializers.BooleanField()
isDownloadable = serializers.BooleanField()
certPreviewUrl = serializers.URLField(allow_null=True)
certDownloadUrl = serializers.URLField(allow_null=True)
honorCertDownloadUrl = serializers.URLField(allow_null=True)
class AvailableEntitlementSessionSerializer(serializers.Serializer):
"""An available entitlement session"""
startDate = serializers.DateTimeField()
endDate = serializers.DateTimeField()
courseNumber = serializers.CharField()
class EntitlementSerializer(serializers.Serializer):
"""Entitlements info"""
availableSessions = serializers.ListField(
child=AvailableEntitlementSessionSerializer(), allow_empty=True
)
isRefundable = serializers.BooleanField()
isFulfilled = serializers.BooleanField()
canViewCourse = serializers.BooleanField()
changeDeadline = serializers.DateTimeField()
isExpired = serializers.BooleanField()
expirationDate = serializers.DateTimeField()
class RelatedProgramSerializer(serializers.Serializer):
"""Related programs information"""
provider = serializers.CharField()
programUrl = serializers.URLField()
bannerUrl = serializers.URLField()
logoUrl = serializers.URLField()
title = serializers.CharField()
# Note - this should probably be a choice, eventually
programType = serializers.CharField()
programTypeUrl = serializers.URLField()
numberOfCourses = serializers.IntegerField()
estimatedNumberOfWeeks = serializers.IntegerField()
class ProgramsSerializer(serializers.Serializer):
"""Programs information"""
relatedPrograms = serializers.ListField(
child=RelatedProgramSerializer(), allow_empty=True
)
class LearnerEnrollmentSerializer(serializers.Serializer):
"""Info for displaying an enrollment on the learner dashboard"""
courseProvider = CourseProviderSerializer(allow_null=True)
course = CourseSerializer()
courseRun = CourseRunSerializer()
enrollment = EnrollmentSerializer()
gradeData = GradeDataSerializer()
certificate = CertificateSerializer()
entitlements = EntitlementSerializer()
programs = ProgramsSerializer()
class UnfulfilledEntitlementSerializer(serializers.Serializer):
"""Serializer for an unfulfilled entitlement"""
courseProvider = CourseProviderSerializer(allow_null=True)
course = CourseSerializer()
entitlements = EntitlementSerializer()
programs = ProgramsSerializer()
class SuggestedCourseSerializer(serializers.Serializer):
"""Serializer for a suggested course"""
bannerUrl = serializers.URLField()
logoUrl = serializers.URLField()
title = serializers.CharField()
courseUrl = serializers.URLField()
class EmailConfirmationSerializer(serializers.Serializer):
"""Serializer for email confirmation banner resources"""
isNeeded = serializers.BooleanField()
sendEmailUrl = serializers.URLField()
class EnterpriseDashboardSerializer(serializers.Serializer):
"""Serializer for individual enterprise dashboard data"""
label = serializers.CharField()
url = serializers.URLField()
class EnterpriseDashboardsSerializer(serializers.Serializer):
"""Listing of available enterprise dashboards"""
availableDashboards = serializers.ListField(
child=EnterpriseDashboardSerializer(), allow_empty=True
)
mostRecentDashboard = EnterpriseDashboardSerializer()
class LearnerDashboardSerializer(serializers.Serializer):
"""Serializer for all info required to render the Learner Dashboard"""
emailConfirmation = EmailConfirmationSerializer()
enterpriseDashboards = EnterpriseDashboardsSerializer()
platformSettings = PlatformSettingsSerializer()
enrollments = serializers.ListField(
child=LearnerEnrollmentSerializer(), allow_empty=True
)
unfulfilledEntitlements = serializers.ListField(
child=UnfulfilledEntitlementSerializer(), allow_empty=True
)
suggestedCourses = serializers.ListField(
child=SuggestedCourseSerializer(), allow_empty=True
)