From ab9067b65018e560cba3849e1bbe0218c75f39af Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bodor=20M=C3=A1t=C3=A9?= <bodor.mate@kszk.bme.hu>
Date: Wed, 23 Jan 2019 17:17:27 +0100
Subject: [PATCH] Validate document

---
 src/document/models.py      |  2 +-
 src/document/serializers.py |  6 +++++-
 src/homework/serializers.py |  1 +
 src/stats/serializers.py    | 10 ++++++++--
 4 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/document/models.py b/src/document/models.py
index d86febb..0c25cf0 100644
--- a/src/document/models.py
+++ b/src/document/models.py
@@ -23,7 +23,7 @@ class Document(models.Model):
         ],
         blank=True,
     )
-    solution = models.ForeignKey(Solution, related_name='files', on_delete=models.DO_NOTHING, blank=True, null=True)
+    solution = models.ForeignKey(Solution, related_name='files', on_delete=models.CASCADE)
 
     def __str__(self):
         return self.name
diff --git a/src/document/serializers.py b/src/document/serializers.py
index 00f7f78..4f6bbad 100644
--- a/src/document/serializers.py
+++ b/src/document/serializers.py
@@ -1,9 +1,10 @@
 from rest_framework import serializers
-
 from common.serializers import CurrentUserProfileDefault
 from . import models
 from common.middleware import CurrentUserMiddleware
 
+_max_count = 5
+
 
 class DocumentSerializer(serializers.ModelSerializer):
     uploaded_by = serializers.HiddenField(default=CurrentUserProfileDefault())
@@ -20,4 +21,7 @@ class DocumentSerializer(serializers.ModelSerializer):
         profile = CurrentUserMiddleware.get_current_user_profile()
         if data['solution'] not in profile.solution.all():
             raise serializers.ValidationError('You dont have permission!')
+        count = models.Document.objects.filter(uploaded_by=profile, solution=data['solution']).count()
+        if count >= _max_count:
+            raise serializers.ValidationError('You cant upload more than ' + str(_max_count) + ' document to one solution!')
         return data
diff --git a/src/homework/serializers.py b/src/homework/serializers.py
index 9d89c5e..a8de6ad 100755
--- a/src/homework/serializers.py
+++ b/src/homework/serializers.py
@@ -28,6 +28,7 @@ class SolutionSerializer(serializers.ModelSerializer):
         model = models.Solution
         read_only_fields = ('created_by', 'created_at', 'updated_at', 'ready', 'files')
         fields = (
+            'id',
             'task',
             'created_at',
             'updated_at',
diff --git a/src/stats/serializers.py b/src/stats/serializers.py
index 42db8a8..f840e87 100644
--- a/src/stats/serializers.py
+++ b/src/stats/serializers.py
@@ -18,12 +18,18 @@ class StaffEventSerializer(serializers.ModelSerializer):
     def get_visitor_number(self, obj):
         return obj.visitors.all().count()
 
+    def validate(self, data):
+        for i in data['absent']:
+            if i in data['visitors']:
+                raise serializers.ValidationError('You cant add a student to absent and visitor in the same time.')
+        return data
+
 
 class StudentEventSerializer(serializers.ModelSerializer):
     class Meta:
         model = models.Event
-        fields = ('name', 'date', 'description', )
-        read_only_fields = ('name', 'date', 'description', )
+        fields = ('id', 'name', 'date', 'description', )
+        read_only_fields = ('id', 'name', 'date', 'description', )
 
 
 class NoteSerializer(serializers.ModelSerializer):
-- 
GitLab