Skip to content

Commit 55f002c

Browse files
authored
fix program enrollments v2 api types (#3094)
1 parent ea13434 commit 55f002c

File tree

5 files changed

+84
-31
lines changed

5 files changed

+84
-31
lines changed

courses/serializers/v1/programs.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ class Meta(ProgramSerializer.Meta):
220220
]
221221

222222

223+
@extend_schema_serializer(component_name="V1ProgramCertificate")
223224
class ProgramCertificateSerializer(serializers.ModelSerializer):
224225
"""ProgramCertificate model serializer"""
225226

courses/serializers/v2/programs.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,19 @@
66
from rest_framework import serializers
77

88
from cms.serializers import ProgramPageSerializer
9-
from courses.models import Program, ProgramCollection, ProgramRequirementNodeType
9+
from courses.models import (
10+
Program,
11+
ProgramCertificate,
12+
ProgramCollection,
13+
ProgramRequirementNodeType,
14+
)
1015
from courses.serializers.base import (
1116
BaseProgramRequirementTreeSerializer,
1217
get_thumbnail_url,
1318
)
1419
from courses.serializers.utils import get_unique_topics_from_courses
1520
from courses.serializers.v1.departments import DepartmentSerializer
21+
from courses.serializers.v2.courses import CourseRunEnrollmentSerializer
1622
from main.serializers import StrictFieldsSerializer
1723

1824
logger = logging.getLogger(__name__)
@@ -542,6 +548,14 @@ class Meta:
542548
]
543549

544550

551+
class ProgramCertificateSerializer(serializers.ModelSerializer):
552+
"""ProgramCertificate model serializer"""
553+
554+
class Meta:
555+
model = ProgramCertificate
556+
fields = ["uuid", "link"]
557+
558+
545559
@extend_schema_serializer(component_name="V2UserProgramEnrollmentDetail")
546560
class UserProgramEnrollmentDetailSerializer(serializers.Serializer):
547561
"""
@@ -552,23 +566,13 @@ class UserProgramEnrollmentDetailSerializer(serializers.Serializer):
552566
"""
553567

554568
program = ProgramSerializer()
555-
enrollments = serializers.SerializerMethodField()
569+
enrollments = CourseRunEnrollmentSerializer(many=True)
556570
certificate = serializers.SerializerMethodField(read_only=True)
557571

558-
@extend_schema_field(serializers.ListField(child=serializers.DictField()))
559-
def get_enrollments(self, instance):
560-
"""Get course run enrollments using v2 serializer."""
561-
from courses.serializers.v2.courses import CourseRunEnrollmentSerializer
562-
563-
enrollments = instance.get("enrollments", [])
564-
return CourseRunEnrollmentSerializer(enrollments, many=True).data
565-
566-
@extend_schema_field(serializers.DictField(allow_null=True))
572+
@extend_schema_field(ProgramCertificateSerializer(allow_null=True))
567573
def get_certificate(self, instance):
568574
"""
569575
Resolve a certificate for this enrollment if it exists.
570576
"""
571-
from courses.serializers.v2.certificates import ProgramCertificateSerializer
572-
573577
certificate = instance.get("certificate")
574578
return ProgramCertificateSerializer(certificate).data if certificate else None

openapi/specs/v0.yaml

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3839,7 +3839,7 @@ components:
38393839
$ref: '#/components/schemas/CourseRunEnrollment'
38403840
certificate:
38413841
allOf:
3842-
- $ref: '#/components/schemas/ProgramCertificate'
3842+
- $ref: '#/components/schemas/V1ProgramCertificate'
38433843
nullable: true
38443844
readOnly: true
38453845
required:
@@ -4248,6 +4248,24 @@ components:
42484248
- req_tree
42494249
- requirements
42504250
- title
4251+
V1ProgramCertificate:
4252+
type: object
4253+
description: ProgramCertificate model serializer
4254+
properties:
4255+
uuid:
4256+
type: string
4257+
format: uuid
4258+
readOnly: true
4259+
link:
4260+
type: string
4261+
description: |-
4262+
Get the link at which this certificate will be served
4263+
Format: /certificate/program/<uuid>/
4264+
Example: /certificate/program/93ebd74e-5f88-4b47-bb09-30a6d575328f/
4265+
readOnly: true
4266+
required:
4267+
- link
4268+
- uuid
42514269
V1ProgramRequirement:
42524270
type: object
42534271
description: Serializer for a ProgramRequirement
@@ -5008,12 +5026,10 @@ components:
50085026
enrollments:
50095027
type: array
50105028
items:
5011-
type: object
5012-
additionalProperties: {}
5013-
readOnly: true
5029+
$ref: '#/components/schemas/CourseRunEnrollmentRequestV2'
50145030
certificate:
5015-
type: object
5016-
additionalProperties: {}
5031+
allOf:
5032+
- $ref: '#/components/schemas/ProgramCertificate'
50175033
nullable: true
50185034
readOnly: true
50195035
required:

openapi/specs/v1.yaml

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3839,7 +3839,7 @@ components:
38393839
$ref: '#/components/schemas/CourseRunEnrollment'
38403840
certificate:
38413841
allOf:
3842-
- $ref: '#/components/schemas/ProgramCertificate'
3842+
- $ref: '#/components/schemas/V1ProgramCertificate'
38433843
nullable: true
38443844
readOnly: true
38453845
required:
@@ -4248,6 +4248,24 @@ components:
42484248
- req_tree
42494249
- requirements
42504250
- title
4251+
V1ProgramCertificate:
4252+
type: object
4253+
description: ProgramCertificate model serializer
4254+
properties:
4255+
uuid:
4256+
type: string
4257+
format: uuid
4258+
readOnly: true
4259+
link:
4260+
type: string
4261+
description: |-
4262+
Get the link at which this certificate will be served
4263+
Format: /certificate/program/<uuid>/
4264+
Example: /certificate/program/93ebd74e-5f88-4b47-bb09-30a6d575328f/
4265+
readOnly: true
4266+
required:
4267+
- link
4268+
- uuid
42514269
V1ProgramRequirement:
42524270
type: object
42534271
description: Serializer for a ProgramRequirement
@@ -5008,12 +5026,10 @@ components:
50085026
enrollments:
50095027
type: array
50105028
items:
5011-
type: object
5012-
additionalProperties: {}
5013-
readOnly: true
5029+
$ref: '#/components/schemas/CourseRunEnrollmentRequestV2'
50145030
certificate:
5015-
type: object
5016-
additionalProperties: {}
5031+
allOf:
5032+
- $ref: '#/components/schemas/ProgramCertificate'
50175033
nullable: true
50185034
readOnly: true
50195035
required:

openapi/specs/v2.yaml

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3839,7 +3839,7 @@ components:
38393839
$ref: '#/components/schemas/CourseRunEnrollment'
38403840
certificate:
38413841
allOf:
3842-
- $ref: '#/components/schemas/ProgramCertificate'
3842+
- $ref: '#/components/schemas/V1ProgramCertificate'
38433843
nullable: true
38443844
readOnly: true
38453845
required:
@@ -4248,6 +4248,24 @@ components:
42484248
- req_tree
42494249
- requirements
42504250
- title
4251+
V1ProgramCertificate:
4252+
type: object
4253+
description: ProgramCertificate model serializer
4254+
properties:
4255+
uuid:
4256+
type: string
4257+
format: uuid
4258+
readOnly: true
4259+
link:
4260+
type: string
4261+
description: |-
4262+
Get the link at which this certificate will be served
4263+
Format: /certificate/program/<uuid>/
4264+
Example: /certificate/program/93ebd74e-5f88-4b47-bb09-30a6d575328f/
4265+
readOnly: true
4266+
required:
4267+
- link
4268+
- uuid
42514269
V1ProgramRequirement:
42524270
type: object
42534271
description: Serializer for a ProgramRequirement
@@ -5008,12 +5026,10 @@ components:
50085026
enrollments:
50095027
type: array
50105028
items:
5011-
type: object
5012-
additionalProperties: {}
5013-
readOnly: true
5029+
$ref: '#/components/schemas/CourseRunEnrollmentRequestV2'
50145030
certificate:
5015-
type: object
5016-
additionalProperties: {}
5031+
allOf:
5032+
- $ref: '#/components/schemas/ProgramCertificate'
50175033
nullable: true
50185034
readOnly: true
50195035
required:

0 commit comments

Comments
 (0)