8000 🐛(backend) improve openAPI schema · openfun/joanie@bb827db · GitHub
[go: up one dir, main page]

Skip to content

Commit bb827db

Browse files
committed
🐛(backend) improve openAPI schema
As DRF encode/django-rest-framework#9030 has been reverted in 3.15.1, the generated openAPI schema is missing default values, which might be revelant in the documentation.
1 parent f28f95b commit bb827db

File tree

5 files changed

+147
-61
lines changed

5 files changed

+147
-61
lines changed

src/backend/joanie/core/serializers/admin.py

Lines changed: 95 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# ruff: noqa: SLF001
12
# pylint: disable=too-many-lines
23
"""Admin serializers for Joanie Core app."""
34

@@ -8,7 +9,6 @@
89
from rest_framework.generics import get_object_or_404
910

1011
from joanie.core import models
11-
from joanie.core.enums import ALL_LANGUAGES
1212
from joanie.core.serializers.fields import (
1313
ImageDetailField,
1414
ISO8601DurationField,
@@ -21,6 +21,12 @@ class AdminContractDefinitionSerializer(serializers.ModelSerializer):
2121
"""Serializer for ContractDefinition model."""
2222

2323
title = serializers.CharField()
24+
name = serializers.ChoiceField(
25+
required=False,
26+
choices=models.ContractDefinition._meta.get_field("name").choices,
27+
default=models.ContractDefinition._meta.get_field("name").default,
28+
label=models.ContractDefinition._meta.get_field("name").verbose_name,
29+
)
2430

2531
class Meta:
2632
model = models.ContractDefinition
@@ -53,7 +59,22 @@ class AdminCourseRunLightSerializer(serializers.ModelSerializer):
5359
"""Serializer for CourseRun model."""
5460

5561
title = serializers.CharField()
56-
languages = serializers.MultipleChoiceField(choices=ALL_LANGUAGES)
62+
languages = serializers.MultipleChoiceField(
63+
choices=models.CourseRun._meta.get_field("languages").choices
64+
)
65+
is_gradable = serializers.BooleanField(
66+
required=False,
67+
# default=False,
68+
# label=_("Is gradable")
69+
default=models.CourseRun._meta.get_field("is_gradable").default,
70+
label=models.CourseRun._meta.get_field("is_gradable").verbose_name,
71+
)
72+
is_listed = serializers.BooleanField(
73+
required=False,
74+
default=models.CourseRun._meta.get_field("is_listed").default,
75+
label=models.CourseRun._meta.get_field("is_listed").verbose_name,
76+
help_text=models.CourseRun._meta.get_field("is_listed").help_text,
77+
)
5778

5879
class Meta:
5980
model = models.CourseRun
@@ -125,6 +146,11 @@ class AdminOrganizationAccessSerializer(serializers.ModelSerializer):
125146
"""Serializer for OrganizationAccess model."""
126147

127148
user = AdminUserSerializer(read_only=True)
149+
role = serializers.ChoiceField(
150+
required=False,
151+
choices=models.OrganizationAccess._meta.get_field("role").choices,
152+
default=models.OrganizationAccess._meta.get_field("role").default,
153+
)
128154

129155
class Meta:
130156
model = models.OrganizationAccess
@@ -169,6 +195,17 @@ def validate(self, attrs):
169195
class AdminOrganizationAddressSerializer(serializers.ModelSerializer):
170196
"""Serializer for the Address model for an organization"""
171197

198+
is_main = serializers.BooleanField(
199+
required=False,
200+
default=models.Address._meta.get_field("is_main").default,
201+
label=models.Address._meta.get_field("is_main").verbose_name,
202+
)
203+
is_reusable = serializers.BooleanField(
204+
required=False,
205+
default=models.Address._meta.get_field("is_reusable").default,
206+
label=models.Address._meta.get_field("is_reusable").verbose_name,
207+
)
208+
172209
class Meta:
173210
model = models.Address
174211
fields = [
@@ -246,6 +283,12 @@ class AdminOrganizationSerializer(serializers.ModelSerializer):
246283
signature = ImageDetailField(required=False)
247284
accesses = AdminOrganizationAccessSerializer(many=True, read_only=True)
248285
addresses = AdminOrganizationAddressSerializer(many=True, read_only=True)
286+
country = serializers.ChoiceField(
287+
required=False,
288+
choices=models.Organization._meta.get_field("country").choices,
289+
default=models.Organization._meta.get_field("country").default,
290+
help_text=models.Organization._meta.get_field("country").help_text,
291+
)
249292

250293
class Meta:
251294
model = models.Organization
@@ -355,6 +398,22 @@ class AdminOrderGroupSerializer(serializers.ModelSerializer):
355398
Admin Serializer for OrderGroup model
356399
"""
357400

401+
nb_seats = serializers.IntegerField(
402+
required=False,
403+
label=models.OrderGroup._meta.get_field("nb_seats").verbose_name,
404+
help_text=models.OrderGroup._meta.get_field("nb_seats").help_text,
405+
default=models.OrderGroup._meta.get_field("nb_seats").default,
406+
min_value=models.OrderGroup._meta.get_field("nb_seats")
407+
.validators[0]
408+
.limit_value,
409+
max_value=models.OrderGroup._meta.get_field("nb_seats")
410+
.validators[1]
411+
.limit_value,
412+
)
413+
is_active = serializers.BooleanField(
414+
required=False,
415+
default=models.OrderGroup._meta.get_field("is_active").default,
416+
)
358417
nb_available_seats = serializers.SerializerMethodField(read_only=True)
359418

360419
class Meta:
@@ -522,6 +581,13 @@ class AdminCourseAccessSerializer(serializers.ModelSerializer):
522581
"""Serializer for CourseAccess model."""
523582

524583
user = AdminUserSerializer(read_only=True)
584+
role = serializers.ChoiceField(
585+
required=False,
586+
# choices=models.CourseAccess.ROLE_CHOICES,
587+
# default=enums.INSTRUCTOR,
588+
choices=models.CourseAccess._meta.get_field("role").choices,
589+
default=models.CourseAccess._meta.get_field("role").default,
590+
)
525591

526592
class Meta:
527593
model = models.CourseAccess
@@ -665,31 +731,14 @@ def update(self, instance, validated_data):
665731
return super().update(instance, validated_data)
666732

667733

668-
class AdminCourseRunSerializer(serializers.ModelSerializer):
734+
class AdminCourseRunSerializer(AdminCourseRunLightSerializer):
669735
"""Serializer for CourseRun model."""
670736

671-
title = serializers.CharField()
672737
course = AdminCourseLightSerializer(read_only=True)
673-
languages = serializers.MultipleChoiceField(choices=ALL_LANGUAGES)
674738

675739
class Meta:
676-
model = models.CourseRun
677-
fields = [
678-
"id",
679-
"course",
680-
"resource_link",
681-
"title",
682-
"is_gradable",
683-
"is_listed",
684-
"languages",
685-
"start",
686-
"end",
687-
"enrollment_start",
688-
"enrollment_end",
689-
"uri",
690-
"state",
691-
]
692-
read_only_fields = ["id", "uri", "state"]
740+
model = AdminCourseRunLightSerializer.Meta.model
741+
fields = AdminCourseRunLightSerializer.Meta.fields + ["course"]
693742

694743
def validate(self, attrs):
695744
"""
@@ -827,6 +876,30 @@ class AdminProductTargetCourseRelationSerializer(serializers.ModelSerializer):
827876
Serializer for ProductTargetCourseRelation model
828877
"""
829878

879+
is_graded = serializers.BooleanField(
880+
required=False,
881+
default=models.ProductTargetCourseRelation._meta.get_field("is_graded").default,
882+
label=models.ProductTargetCourseRelation._meta.get_field(
883+
"is_graded"
884+
).verbose_name,
885+
help_text=models.ProductTargetCourseRelation._meta.get_field(
886+
"is_graded"
887+
).help_text,
888+
)
889+
position = serializers.IntegerField(
890+
required=False,
891+
default=models.ProductTargetCourseRelation._meta.get_field("position").default,
892+
label=models.ProductTargetCourseRelation._meta.get_field(
893+
"position"
894+
).verbose_name,
895+
min_value=models.ProductTargetCourseRelation._meta.get_field("position")
896+
.validators[0]
897+
.limit_value,
898+
max_value=models.ProductTargetCourseRelation._meta.get_field("position")
899+
.validators[1]
900+
.limit_value,
901+
)
902+
830903
class Meta:
831904
model = models.ProductTargetCourseRelation
832905
fields = ["id", "course", "product", "is_graded", "position", "course_runs"]

src/backend/joanie/core/serializers/client.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
# ruff: noqa: SLF001
2+
# pylint: disable=too-many-lines
13
"""Client serializers for Joanie Core app."""
24

3-
# pylint: disable=too-many-lines
45
from django.conf import settings
56
from django.utils.translation import get_language
67
from django.utils.translation import gettext_lazy as _
@@ -67,6 +68,10 @@ class AddressSerializer(serializers.ModelSerializer):
6768
"""
6869

6970
id = serializers.CharField(read_only=True, required=False)
71+
is_main = serializers.BooleanField(
72+
required=False,
73+
label=models.Address._meta.get_field("is_main").verbose_name,
74+
)
7075

7176
class Meta:
7277
model = models.Address
@@ -113,6 +118,12 @@ class CourseAccessSerializer(AbilitiesModelSerializer):
113118
source="user",
114119
)
115120

121+
role = serializers.ChoiceField(
122+
required=False,
123+
choices=models.CourseAccess._meta.get_field("role").choices,
124+
default=models.CourseAccess._meta.get_field("role").default,
125+
)
126+
116127
class Meta:
117128
model = models.CourseAccess
118129
fields = ["id", "role", "user_id"]
@@ -222,6 +233,12 @@ class OrganizationAccessSerializer(AbilitiesModelSerializer):
222233
source="user",
223234
)
224235

236+
role = serializers.ChoiceField(
237+
required=False,
238+
choices=models.OrganizationAccess._meta.get_field("role").choices,
239+
default=models.OrganizationAccess._meta.get_field("role").default,
240+
)
241+
225242
class Meta:
226243
model = models.OrganizationAccess
227244
fields = ["id", "role", "user_id"]

src/backend/joanie/payment/serializers.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# ruff: noqa: SLF001
12
"""Serializers for api."""
23

34
from rest_framework import serializers
@@ -11,6 +12,10 @@ class CreditCardSerializer(serializers.ModelSerializer):
1112
"""
1213

1314
id = serializers.CharField(read_only=True, required=False)
15+
is_main = serializers.BooleanField(
16+
required=False,
17+
label=models.CreditCard._meta.get_field("is_main").verbose_name,
18+
)
1419

1520
class Meta:
1621
model = models.CreditCard

0 commit comments

Comments
 (0)
0