You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.0 KiB
73 lines
2.0 KiB
from rest_framework import serializers
|
|
|
|
from progress.models import Progress, ProgressLesson
|
|
import jwt
|
|
from django.conf import settings
|
|
|
|
|
|
class ProgressSerializer(serializers.ModelSerializer):
|
|
lessons = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Progress
|
|
fields = ('lessons', 'course_token', 'only_watch')
|
|
|
|
@staticmethod
|
|
def get_lessons(self):
|
|
return [ProgressLessonSerializer(i).data for i in self.progresslesson_set.all()]
|
|
|
|
|
|
class SecureProgressSerializer(serializers.ModelSerializer):
|
|
jwt_token = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Progress
|
|
fields = ('jwt_token', )
|
|
|
|
@staticmethod
|
|
def get_jwt_token(self):
|
|
payload = {
|
|
'lessons': [ProgressLessonSerializer(i).data for i in self.progresslesson_set.all()],
|
|
'course_token': str(self.course_token),
|
|
'only_watch': self.only_watch,
|
|
}
|
|
return jwt.encode(payload, settings.COURSE_PROGRESS_SECRET_KEY, algorithm='HS256')
|
|
|
|
|
|
class ProgressAnalyticSerializer(serializers.ModelSerializer):
|
|
name = serializers.SerializerMethodField()
|
|
email = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Progress
|
|
fields = ('name', 'email',)
|
|
|
|
@staticmethod
|
|
def get_name(self):
|
|
return self.user.get_full_name()
|
|
|
|
@staticmethod
|
|
def get_email(self):
|
|
return self.user.email
|
|
|
|
|
|
class ProgressLessonSerializer(serializers.ModelSerializer):
|
|
teacher = serializers.SerializerMethodField()
|
|
student = serializers.SerializerMethodField()
|
|
course_token = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = ProgressLesson
|
|
exclude = ('progress', 'checker')
|
|
|
|
@staticmethod
|
|
def get_teacher(self):
|
|
return self.checker.get_full_name()
|
|
|
|
@staticmethod
|
|
def get_student(self):
|
|
return {'name': self.progress.user.get_full_name(), "out_key": str(self.progress.user.out_key)}
|
|
|
|
@staticmethod
|
|
def get_course_token(self):
|
|
return str(self.progress.course_token)
|
|
|