diff --git a/backend/fixtures.json b/backend/fixtures.json new file mode 100644 index 00000000..6e67e372 --- /dev/null +++ b/backend/fixtures.json @@ -0,0 +1,186 @@ +[ + { + "model": "users.user", + "pk": 1, + "fields": { + "email": "Kermit@gmail.com", + "first_name": "Kermit", + "last_name": "The Frog", + "username": "Kermit The Frog" + } + }, + { + "model": "users.user", + "pk": 2, + "fields": { + "email": "miss@gmail.com", + "first_name": "Miss", + "last_name": "Piggie", + "username": "Miss Piggie" + } + }, + { + "model": "users.user", + "pk": 3, + "fields": { + "email": "fozzy@gmail.com", + "first_name": "Fozzy", + "last_name": "Bear", + "username": "Fozzy Bear" + } + }, + { + "model": "users.user", + "pk": 4, + "fields": { + "email": "gonzo@gmail.com", + "first_name": "Gonzo", + "last_name": "TheGreat", + "username": "Gonzo The Great" + } + }, + { + "model": "users.user", + "pk": 5, + "fields": { + "email": "rowl@gmail.com", + "first_name": "Rowl", + "last_name": "TheDog", + "username": "RowlTheDog" + } + }, + { + "model": "courses.course", + "pk": 1, + "fields": { + "name": "Math", + "description": "Mathematics" + } + }, + { + "model": "courses.course", + "pk": 2, + "fields": { + "name": "English", + "description": "The English Language" + } + }, + { + "model": "users.student", + "pk": 1, + "fields": { + "number": 1, + "course": [ + 1, + 2 + ], + "id": 1 + } + }, + { + "model": "users.student", + "pk": 2, + "fields": { + "number": 2, + "course": [ + 1, + 2 + ], + "id": 2 + } + }, + { + "model": "users.student", + "pk": 3, + "fields": { + "number": 3, + "course": [ + 1 + ], + "id": 3 + } + }, + { + "model": "users.teacher", + "pk": 1, + "fields": { + "course": [ + 1 + ], + "id": 4, + "is_admin": true, + "is_assistant": false + } + }, + { + "model": "users.teacher", + "pk": 2, + "fields": { + "course": [ + 2 + ], + "id": 5, + "is_admin": true, + "is_assistant": false + } + }, + { + "model": "projects.project", + "pk": 1, + "fields": { + "course_id": 1, + "name": "Math project 1", + "description": "2 + 2 = 4" + } + }, + { + "model": "projects.project", + "pk": 2, + "fields": { + "course_id": 1, + "name": "Math project 2", + "description": "4 - 1 = 3" + } + }, + { + "model": "groups.group", + "pk": 1, + "fields": { + "project_id": 1, + "student": [ + 1, + 2 + ], + "feedback": "feedback" + } + }, + { + "model": "groups.group", + "pk": 1, + "fields": { + "project_id": 1, + "student": [ + 3 + ], + "feedback": "feedback" + } + }, + { + "model": "submissions.submissions", + "pk": 1, + "fields": { + "group_id": 1, + "submission_nr": 1, + "timestamp": "2023-04-01T00:00:00Z" + } + }, + { + "model": "submissions.submissions", + "pk": 2, + "fields": { + "group_id": 1, + "submission_nr": 1, + "timestamp": "2023-03-01T00:00:00Z" + } + } +] diff --git a/backend/pigeonhole/apps/groups/migrations/0003_alter_group_group_nr.py b/backend/pigeonhole/apps/groups/migrations/0003_alter_group_group_nr.py new file mode 100644 index 00000000..51d6180a --- /dev/null +++ b/backend/pigeonhole/apps/groups/migrations/0003_alter_group_group_nr.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.2 on 2024-03-07 20:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('groups', '0002_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='group', + name='group_nr', + field=models.IntegerField(blank=True, null=True), + ), + ] diff --git a/backend/pigeonhole/apps/groups/migrations/0004_alter_group_final_score.py b/backend/pigeonhole/apps/groups/migrations/0004_alter_group_final_score.py new file mode 100644 index 00000000..1a72c57e --- /dev/null +++ b/backend/pigeonhole/apps/groups/migrations/0004_alter_group_final_score.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.2 on 2024-03-07 20:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('groups', '0003_alter_group_group_nr'), + ] + + operations = [ + migrations.AlterField( + model_name='group', + name='final_score', + field=models.IntegerField(blank=True, null=True), + ), + ] diff --git a/backend/pigeonhole/apps/groups/models.py b/backend/pigeonhole/apps/groups/models.py index 2c8d67b1..9f57317e 100644 --- a/backend/pigeonhole/apps/groups/models.py +++ b/backend/pigeonhole/apps/groups/models.py @@ -7,14 +7,23 @@ class Group(models.Model): group_id = models.BigAutoField(primary_key=True) - group_nr = models.IntegerField() + group_nr = models.IntegerField(blank=True, null=True) project_id = models.ForeignKey(Project, on_delete=models.CASCADE) student = models.ManyToManyField(Student) feedback = models.TextField(null=True) - final_score = models.IntegerField() + final_score = models.IntegerField(null=True, blank=True) objects = models.Manager() + def save(self, *args, **kwargs): + if not self.group_id: + if self.group_nr is None: + max_group_nr = Group.objects.filter( + project_id=self.project_id).aggregate( + models.Max('group_nr'))['group_nr__max'] or 0 + self.group_nr = max_group_nr + 1 + super().save(*args, **kwargs) + class GroupSerializer(serializers.ModelSerializer): class Meta: diff --git a/backend/pigeonhole/apps/submissions/migrations/0004_alter_submissions_file_alter_submissions_output_test.py b/backend/pigeonhole/apps/submissions/migrations/0004_alter_submissions_file_alter_submissions_output_test.py new file mode 100644 index 00000000..9509c2c4 --- /dev/null +++ b/backend/pigeonhole/apps/submissions/migrations/0004_alter_submissions_file_alter_submissions_output_test.py @@ -0,0 +1,33 @@ +# Generated by Django 5.0.2 on 2024-03-07 20:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('submissions', + '0003_alter_submissions_file_alter_submissions_output_test'), + ] + + operations = [ + migrations.AlterField( + model_name='submissions', + name='file', + field=models.FileField( + max_length=255, + null=True, + upload_to='uploads/submissions/files///'), + ), + migrations.AlterField( + model_name='submissions', + name='output_test', + field=models.FileField( + max_length=255, + null=True, + upload_to='uploads/submissions/outputs//' + '/output_test/'), + ), + ] diff --git a/backend/pigeonhole/apps/submissions/models.py b/backend/pigeonhole/apps/submissions/models.py index be706544..4b5f83df 100644 --- a/backend/pigeonhole/apps/submissions/models.py +++ b/backend/pigeonhole/apps/submissions/models.py @@ -9,10 +9,10 @@ class Submissions(models.Model): submission_id = models.BigAutoField(primary_key=True) group_id = models.ForeignKey(Group, on_delete=models.CASCADE, blank=False) submission_nr = models.IntegerField() - file = models.FileField(upload_to='uploads/' + str(group_id) + '/' + str(submission_nr) + '/', + file = models.FileField(upload_to='uploads/submissions/files/' + str(group_id) + '/' + str(submission_nr) + '/', null=True, blank=False, max_length=255) timestamp = models.DateTimeField(auto_now_add=True) - output_test = models.FileField(upload_to='uploads/' + str(group_id) + '/' + str(submission_nr) + '/output_test/', + output_test = models.FileField(upload_to='uploads/submissions/outputs/' + str(group_id) + '/' + str(submission_nr) + '/output_test/', null=True, blank=False, max_length=255) objects = models.Manager() diff --git a/backend/pigeonhole/apps/users/migrations/0002_rename_is_assistent_teacher_is_assistant.py b/backend/pigeonhole/apps/users/migrations/0002_rename_is_assistent_teacher_is_assistant.py new file mode 100644 index 00000000..a9cf87be --- /dev/null +++ b/backend/pigeonhole/apps/users/migrations/0002_rename_is_assistent_teacher_is_assistant.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.2 on 2024-03-07 18:53 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0001_initial'), + ] + + operations = [ + migrations.RenameField( + model_name='teacher', + old_name='is_assistent', + new_name='is_assistant', + ), + ] diff --git a/backend/pigeonhole/apps/users/models.py b/backend/pigeonhole/apps/users/models.py index ce1c243d..9a0f36f4 100644 --- a/backend/pigeonhole/apps/users/models.py +++ b/backend/pigeonhole/apps/users/models.py @@ -38,7 +38,7 @@ class Teacher(models.Model): id = models.ForeignKey(User, on_delete=models.CASCADE, primary_key=True) course = models.ManyToManyField(Course) is_admin = models.BooleanField(default=False) - is_assistent = models.BooleanField(default=False) + is_assistant = models.BooleanField(default=False) objects = models.Manager() diff --git a/backend/pigeonhole/tests/test_models/test_submissions.py b/backend/pigeonhole/tests/test_models/test_submissions.py index c83e780b..c6efed08 100644 --- a/backend/pigeonhole/tests/test_models/test_submissions.py +++ b/backend/pigeonhole/tests/test_models/test_submissions.py @@ -42,9 +42,7 @@ def setUp(self): # Create group group = Group.objects.create( - group_nr=1, project_id=project, - final_score=0, ) # Add student to the group diff --git a/backend/pigeonhole/tests/test_models/test_user.py b/backend/pigeonhole/tests/test_models/test_user.py index 2a9e0e9c..043197e5 100644 --- a/backend/pigeonhole/tests/test_models/test_user.py +++ b/backend/pigeonhole/tests/test_models/test_user.py @@ -52,12 +52,12 @@ def test_teacher(self): teacher = Teacher.objects.get(id__email="teacher@gmail.com") self.assertEqual(teacher.is_admin, True) - self.assertEqual(teacher.is_assistent, False) + self.assertEqual(teacher.is_assistant, False) # update teacher is_assistent - teacher.is_assistent = True + teacher.is_assistant = True teacher.save() teacher = Teacher.objects.get(id__email="teacher@gmail.com") - self.assertEqual(teacher.is_assistent, True) + self.assertEqual(teacher.is_assistant, True) # delete teacher teacher.delete() with self.assertRaises(Teacher.DoesNotExist):