166 lines
4.1 KiB
Python
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()
|