vbv/server/vbv_lernwelt/learnpath/serializers.py

109 lines
3.1 KiB
Python

from rest_framework import serializers
from rest_framework.fields import SerializerMethodField
from vbv_lernwelt.competence.serializers import (
PerformanceCriteriaLearningPathSerializer,
)
from vbv_lernwelt.core.utils import get_django_content_type
from vbv_lernwelt.course.serializer_helpers import get_course_serializer_class
from vbv_lernwelt.learnpath.models import (
CourseProfile,
LearningContentAssignment,
LearningContentEdoniqTest,
LearningUnit,
)
class LearningUnitSerializer(
get_course_serializer_class(
LearningUnit,
field_names=[
"evaluate_url",
"course_category",
"children",
"title_hidden",
],
)
):
evaluate_url = SerializerMethodField()
def get_children(self, obj):
return [
PerformanceCriteriaLearningPathSerializer(child).data
for child in obj.performancecriteria_set.all()
]
def get_evaluate_url(self, obj):
return obj.get_evaluate_url()
class LearningUnitPerformanceCriteriaSerializer(
get_course_serializer_class(
LearningUnit,
field_names=[
"evaluate_url",
"course_category",
],
)
):
evaluate_url = SerializerMethodField()
def get_evaluate_url(self, obj):
return obj.get_evaluate_url()
class LearningContentEdoniqTestSerializer(
get_course_serializer_class(
LearningContentEdoniqTest,
field_names=LearningContentEdoniqTest.serialize_field_names
+ ["competence_certificate"],
)
):
# TODO: quickfix before GraphQL learning path
competence_certificate = SerializerMethodField()
def get_competence_certificate(self, obj):
try:
cert = obj.content_assignment.competence_certificate
return {
"id": str(cert.id),
"title": cert.title,
"slug": cert.slug,
"content_type": get_django_content_type(cert),
"translation_key": cert.translation_key,
"frontend_url": cert.get_frontend_url(),
}
except Exception:
return None
class LearningContentAssignmentSerializer(
get_course_serializer_class(
LearningContentAssignment,
field_names=LearningContentAssignment.serialize_field_names
+ ["competence_certificate"],
)
):
# TODO: quickfix before GraphQL learning path
competence_certificate = SerializerMethodField()
def get_competence_certificate(self, obj):
try:
cert = obj.content_assignment.competence_certificate
return {
"id": str(cert.id),
"title": cert.title,
"slug": cert.slug,
"content_type": get_django_content_type(cert),
"translation_key": cert.translation_key,
"frontend_url": cert.get_frontend_url(),
}
except Exception:
return None
class CourseProfileSerializer(serializers.ModelSerializer):
class Meta:
model = CourseProfile
fields = ["id", "code"]