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)