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): ...@@ -10,7 +10,7 @@ class ChoiceSerializer(serializers.ModelSerializer):
fields = ('choice', 'profile') 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()) groups = serializers.SlugRelatedField(many=True, slug_field='choice', queryset=models.GroupChoice.objects.all())
updated_at = serializers.DateTimeField(read_only=True) updated_at = serializers.DateTimeField(read_only=True)
full_name = serializers.SerializerMethodField() full_name = serializers.SerializerMethodField()
...@@ -40,13 +40,13 @@ class ProfileSerializer(serializers.ModelSerializer): ...@@ -40,13 +40,13 @@ class ProfileSerializer(serializers.ModelSerializer):
def validate_role(self, value): def validate_role(self, value):
modifier_role = CurrentUserMiddleware.get_current_user_profile().role 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") raise serializers.ValidationError("You don't have permission change role")
return value return value
def validate_signed(self, value): def validate_signed(self, value):
modifier = CurrentUserMiddleware.get_current_user_profile() 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") raise serializers.ValidationError("You cannot join without signed")
return value return value
...@@ -61,3 +61,49 @@ class ProfileSerializer(serializers.ModelSerializer): ...@@ -61,3 +61,49 @@ class ProfileSerializer(serializers.ModelSerializer):
def get_full_name(self, obj): def get_full_name(self, obj):
return obj.full_name 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 ...@@ -9,9 +9,15 @@ from . import serializers
class ProfileViewSet(viewsets.ModelViewSet): class ProfileViewSet(viewsets.ModelViewSet):
serializer_class = serializers.ProfileSerializer serializer_class = serializers.ProfileSerializer_User
permission_classes = (permissions.IsAuthenticated, IsSafeOrPatch) 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): def get_queryset(self):
user = self.request.user user = self.request.user
if user.profile.role == 'Staff': if user.profile.role == 'Staff':
......
...@@ -23,8 +23,7 @@ class TaskSerializer(serializers.ModelSerializer): ...@@ -23,8 +23,7 @@ class TaskSerializer(serializers.ModelSerializer):
email.new_homework(profile.user, validated_data.get('deadline')) email.new_homework(profile.user, validated_data.get('deadline'))
return self.Meta.model.objects.create(**validated_data) return self.Meta.model.objects.create(**validated_data)
class SolutionSerializer_Student(serializers.ModelSerializer):
class SolutionSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = models.Solution model = models.Solution
read_only_fields = ('created_by', 'created_at', 'updated_at', 'ready', 'files') read_only_fields = ('created_by', 'created_at', 'updated_at', 'ready', 'files')
...@@ -46,21 +45,58 @@ class SolutionSerializer(serializers.ModelSerializer): ...@@ -46,21 +45,58 @@ class SolutionSerializer(serializers.ModelSerializer):
return value return value
def validate_accepted(self, 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() profile = CurrentUserMiddleware.get_current_user_profile()
if profile.role != 'Staff' and value: models.Solution.objects.filter(created_by=profile, task=validated_data['task']).delete()
raise serializers.ValidationError("You don't have permission to modify accepted!") 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 return value
def validate_corrected(self, 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 return value
def validate_note(self, 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 return value
def update(self, instance, validated_data): def update(self, instance, validated_data):
...@@ -75,4 +111,4 @@ class SolutionSerializer(serializers.ModelSerializer): ...@@ -75,4 +111,4 @@ class SolutionSerializer(serializers.ModelSerializer):
def create(self, validated_data): def create(self, validated_data):
profile = CurrentUserMiddleware.get_current_user_profile() profile = CurrentUserMiddleware.get_current_user_profile()
models.Solution.objects.filter(created_by=profile, task=validated_data['task']).delete() 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): ...@@ -10,11 +10,16 @@ class TasksViewSet(viewsets.ModelViewSet):
queryset = models.Task.objects.all() queryset = models.Task.objects.all()
permission_classes = (permissions.IsStaffOrReadOnlyForAuthenticated, permissions.IsStaffOrStudent, ) permission_classes = (permissions.IsStaffOrReadOnlyForAuthenticated, permissions.IsStaffOrStudent, )
class SolutionsViewSet(viewsets.ModelViewSet): class SolutionsViewSet(viewsets.ModelViewSet):
serializer_class = serializers.SolutionSerializer serializer_class = serializers.SolutionSerializer_Student
permission_classes = (permissions.IsStaffOrStudent, ) 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): def get_queryset(self):
user = self.request.user user = self.request.user
queryset = models.Solution.objects.filter(created_by=user.profile) 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