Skip to content
Snippets Groups Projects
Commit 82ad93fb authored by rlacko's avatar rlacko
Browse files

User and Staff serializer class separated

parent a4c2d173
No related branches found
No related tags found
1 merge request!2Dev
......@@ -10,7 +10,7 @@ class ChoiceSerializer(serializers.ModelSerializer):
fields = ('choice', 'profile')
class ProfileSerializer(serializers.ModelSerializer):
class ProfileSerializer_User(serializers.ModelSerializer):
groups = serializers.SlugRelatedField(many=True, slug_field='choice', queryset=models.GroupChoice.objects.all())
updated_at = serializers.DateTimeField(read_only=True)
full_name = serializers.SerializerMethodField()
......@@ -40,13 +40,13 @@ class ProfileSerializer(serializers.ModelSerializer):
def validate_role(self, value):
modifier_role = CurrentUserMiddleware.get_current_user_profile().role
if value != modifier_role and modifier_role != "Staff":
if value != modifier_role:
raise serializers.ValidationError("You don't have permission change role")
return value
def validate_signed(self, value):
modifier = CurrentUserMiddleware.get_current_user_profile()
if value is False and modifier.role != "Staff":
if value is False:
raise serializers.ValidationError("You cannot join without signed")
return value
......@@ -61,3 +61,49 @@ class ProfileSerializer(serializers.ModelSerializer):
def get_full_name(self, obj):
return obj.full_name
class ProfileSerializer_Staff(serializers.ModelSerializer):
groups = serializers.SlugRelatedField(many=True, slug_field='choice', queryset=models.GroupChoice.objects.all())
updated_at = serializers.DateTimeField(read_only=True)
full_name = serializers.SerializerMethodField()
class Meta:
model = models.Profile
read_only_fields = ('id', 'join_date', 'updated_at', 'full_name', )
fields = (
'id',
'join_date',
'updated_at',
'nick',
'signed',
'groups',
'motivation_about',
'motivation_profession',
'motivation_exercise',
'full_name',
'role',
)
def validate_updated_at(self, value):
deadline = models.Deadline.get_solo().deadline
if deadline is not None and value > deadline:
raise serializers.ValidationError("You cannot join after the deadline")
return value
def validate_role(self, value):
return value
def validate_signed(self, value):
return value
def update(self, instance, validated_data):
new_role = validated_data.get('role', instance.role)
if instance.role != new_role:
if new_role == 'Student':
email.admitted(instance.user)
if new_role == 'Denied':
email.denied(instance.user)
return super().update(instance, validated_data)
def get_full_name(self, obj):
return obj.full_name
\ No newline at end of file
......@@ -9,9 +9,15 @@ from . import serializers
class ProfileViewSet(viewsets.ModelViewSet):
serializer_class = serializers.ProfileSerializer
serializer_class = serializers.ProfileSerializer_User
permission_classes = (permissions.IsAuthenticated, IsSafeOrPatch)
def get_serializer_class(self):
user = self.request.user
if user.profile.role == 'Staff':
return serializers.ProfileSerializer_Staff
return serializers.ProfileSerializer_User
def get_queryset(self):
user = self.request.user
if user.profile.role == 'Staff':
......
......@@ -23,8 +23,7 @@ class TaskSerializer(serializers.ModelSerializer):
email.new_homework(profile.user, validated_data.get('deadline'))
return self.Meta.model.objects.create(**validated_data)
class SolutionSerializer(serializers.ModelSerializer):
class SolutionSerializer_Student(serializers.ModelSerializer):
class Meta:
model = models.Solution
read_only_fields = ('created_by', 'created_at', 'updated_at', 'ready', 'files')
......@@ -46,21 +45,58 @@ class SolutionSerializer(serializers.ModelSerializer):
return value
def validate_accepted(self, value):
raise serializers.ValidationError("You don't have permission to modify accepted!")
def validate_corrected(self, value):
raise serializers.ValidationError("You don't have permission to modify corrected!")
def validate_note(self, value):
if value != '':
raise serializers.ValidationError("You don't have permission to create note!")
return value
def update(self, instance, validated_data):
if instance.corrected is not True and validated_data.get('corrected', instance.corrected) is True:
email.homework_corrected(
instance.created_by.user,
instance.task.title,
validated_data.get('accepted', instance.accepted)
)
return super().update(instance, validated_data)
def create(self, validated_data):
profile = CurrentUserMiddleware.get_current_user_profile()
if profile.role != 'Staff' and value:
raise serializers.ValidationError("You don't have permission to modify accepted!")
models.Solution.objects.filter(created_by=profile, task=validated_data['task']).delete()
return super().create(validated_data)
class SolutionSerializer_Staff(serializers.ModelSerializer):
class Meta:
model = models.Solution
read_only_fields = ('created_by', 'created_at', 'updated_at', 'ready', 'files')
fields = (
'id',
'task',
'created_at',
'updated_at',
'accepted',
'files',
'created_by',
'corrected',
'note',
)
def validate_task(self, value):
if timezone.now() > value.deadline:
raise serializers.ValidationError('You late.')
return value
def validate_accepted(self, value):
return value
def validate_corrected(self, value):
profile = CurrentUserMiddleware.get_current_user_profile()
if profile.role != 'Staff' and value:
raise serializers.ValidationError("You don't have permission to modify corrected!")
return value
def validate_note(self, value):
profile = CurrentUserMiddleware.get_current_user_profile()
if profile.role != 'Staff' and value != '':
raise serializers.ValidationError("You don't have permission to create note!")
return value
def update(self, instance, validated_data):
......@@ -75,4 +111,4 @@ class SolutionSerializer(serializers.ModelSerializer):
def create(self, validated_data):
profile = CurrentUserMiddleware.get_current_user_profile()
models.Solution.objects.filter(created_by=profile, task=validated_data['task']).delete()
return super().create(validated_data)
return super().create(validated_data)
\ No newline at end of file
......@@ -10,11 +10,16 @@ class TasksViewSet(viewsets.ModelViewSet):
queryset = models.Task.objects.all()
permission_classes = (permissions.IsStaffOrReadOnlyForAuthenticated, permissions.IsStaffOrStudent, )
class SolutionsViewSet(viewsets.ModelViewSet):
serializer_class = serializers.SolutionSerializer
serializer_class = serializers.SolutionSerializer_Student
permission_classes = (permissions.IsStaffOrStudent, )
def get_serializer_class(self):
user = self.request.user
if user.profile.role == 'Staff':
return serializers.SolutionSerializer_Staff
return serializers.SolutionSerializer_Student
def get_queryset(self):
user = self.request.user
queryset = models.Solution.objects.filter(created_by=user.profile)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment