vbv/server/vbv_lernwelt/course/serializers.py

166 lines
4.1 KiB
Python

from rest_framework import serializers
from vbv_lernwelt.core.utils import StringIDField
from vbv_lernwelt.course.models import (
CircleDocument,
Course,
CourseCategory,
CourseCompletion,
CourseConfiguration,
CourseSession,
CourseSessionUser,
)
from vbv_lernwelt.iam.permissions import course_session_permissions
from vbv_lernwelt.learnpath.models import CourseProfile
class CourseConfigurationSerializer(serializers.ModelSerializer):
class Meta:
model = CourseConfiguration
fields = [
"id",
"course",
"enable_circle_documents",
"enable_learning_mentor",
"enable_competence_certificates",
"is_uk",
"is_vv",
]
class CourseSerializer(serializers.ModelSerializer):
id = StringIDField()
configuration = CourseConfigurationSerializer(
read_only=True,
)
course_profiles = serializers.SerializerMethodField()
def get_course_profiles(self, obj):
if obj.configuration.is_vv:
return CourseProfile.objects.all().values_list("code", flat=True)
return []
class Meta:
model = Course
fields = [
"id",
"title",
"category_name",
"slug",
"configuration",
"course_profiles",
]
class CourseCategorySerializer(serializers.ModelSerializer):
class Meta:
model = CourseCategory
fields = [
"id",
"title",
"general",
]
class CourseCompletionSerializer(serializers.ModelSerializer):
page_id = StringIDField()
course_session_id = StringIDField()
class Meta:
model = CourseCompletion
fields = [
"id",
"created_at",
"updated_at",
"user",
"page_id",
"page_type",
"course_session_id",
"completion_status",
"additional_json_data",
]
class CourseSessionSerializer(serializers.ModelSerializer):
id = StringIDField()
course = serializers.SerializerMethodField()
actions = serializers.SerializerMethodField()
user_roles = serializers.SerializerMethodField()
def get_course(self, obj):
return CourseSerializer(obj.course).data
def get_user_roles(self, obj):
if hasattr(obj, "roles"):
return list(obj.roles)
return []
class Meta:
model = CourseSession
fields = [
"id",
"created_at",
"updated_at",
"course",
"title",
"start_date",
"end_date",
"actions",
"user_roles",
]
read_only_fields = ["actions"]
def get_actions(self, obj):
user = self.context.get("user")
if user:
return course_session_permissions(user, obj.id)
return []
class CypressCourseSessionUserSerializer(serializers.ModelSerializer):
class Meta:
model = CourseSessionUser
fields = "__all__"
class CircleDocumentSerializer(serializers.ModelSerializer):
learning_sequence = serializers.SerializerMethodField()
class Meta:
model = CircleDocument
fields = [
"id",
"name",
"file_name",
"url",
"course_session",
"learning_sequence",
]
def get_learning_sequence(self, obj):
ls = obj.learning_sequence
circle = ls.get_circle()
return {
"title": ls.title,
"id": str(ls.id),
"slug": ls.slug,
"circle": {
"title": circle.title,
"id": str(circle.id),
"slug": circle.slug,
},
}
class DocumentUploadStartInputSerializer(serializers.Serializer):
file_name = serializers.CharField()
file_type = serializers.CharField()
name = serializers.CharField()
course_session = serializers.IntegerField()
learning_sequence = serializers.IntegerField()
class DocumentUploadFinishInputSerializer(serializers.Serializer):
file_id = serializers.UUIDField()