vbv/server/vbv_lernwelt/course/serializers.py

101 lines
2.8 KiB
Python

from rest_framework import serializers
from vbv_lernwelt.course.models import (
Course,
CourseCategory,
CourseCompletion,
CourseSession,
CourseSessionUser,
)
from vbv_lernwelt.learnpath.models import Circle
class CourseSerializer(serializers.ModelSerializer):
class Meta:
model = Course
fields = ["id", "title", "category_name", "slug"]
class CourseCategorySerializer(serializers.ModelSerializer):
class Meta:
model = CourseCategory
fields = [
"id",
"title",
"general",
]
class CourseCompletionSerializer(serializers.ModelSerializer):
class Meta:
model = CourseCompletion
fields = [
"id",
"created_at",
"updated_at",
"user",
"page_key",
"page_type",
"page_slug",
"course",
"completion_status",
"additional_json_data",
]
class CourseSessionSerializer(serializers.ModelSerializer):
learning_path_url = serializers.SerializerMethodField()
competence_url = serializers.SerializerMethodField()
media_library_url = serializers.SerializerMethodField()
course = serializers.SerializerMethodField()
experts = serializers.SerializerMethodField()
def get_course(self, obj):
return CourseSerializer(obj.course).data
def get_learning_path_url(self, obj):
return obj.course.get_learning_path_url()
def get_media_library_url(self, obj):
return obj.course.get_media_library_url()
def get_competence_url(self, obj):
return obj.course.get_competence_url()
def get_experts(self, obj):
expert_relations = CourseSessionUser.objects.filter(
expert__in=Circle.objects.descendant_of(obj.course.coursepage)
).distinct()
expert_result = []
for er in expert_relations:
for circle in er.expert.all():
expert_result.append(
{
"user_id": er.user.id,
"user_email": er.user.email,
"user_first_name": er.user.first_name,
"user_last_name": er.user.last_name,
"circle_id": circle.id,
"circle_slug": circle.slug,
"circle_translation_key": circle.translation_key,
}
)
return expert_result
class Meta:
model = CourseSession
fields = [
"id",
"created_at",
"updated_at",
"course",
"title",
"start_date",
"end_date",
"additional_json_data",
"learning_path_url",
"competence_url",
"media_library_url",
"experts",
]