From 83ad9d5f44fefa239800aa39166a133b4652a7e7 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Sun, 21 Mar 2021 18:07:42 +0100
Subject: [PATCH] Add unique index for LessonDocumentation and PersonalNote to
 prevent race conditions

---
 .../migrations/0012_unique_relation.py        | 22 +++++++++++++++++++
 aleksis/apps/alsijil/models.py                |  2 ++
 2 files changed, 24 insertions(+)
 create mode 100644 aleksis/apps/alsijil/migrations/0012_unique_relation.py

diff --git a/aleksis/apps/alsijil/migrations/0012_unique_relation.py b/aleksis/apps/alsijil/migrations/0012_unique_relation.py
new file mode 100644
index 000000000..6604e7412
--- /dev/null
+++ b/aleksis/apps/alsijil/migrations/0012_unique_relation.py
@@ -0,0 +1,22 @@
+# Generated by Django 3.1.7 on 2021-03-21 17:04
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('chronos', '0004_substitution_extra_lesson_year'),
+        ('alsijil', '0011_tardiness_positive'),
+    ]
+
+    operations = [
+        migrations.AlterUniqueTogether(
+            name='lessondocumentation',
+            unique_together={('lesson_period', 'week', 'year', 'event', 'extra_lesson')},
+        ),
+        migrations.AlterUniqueTogether(
+            name='personalnote',
+            unique_together={('lesson_period', 'week', 'year', 'event', 'extra_lesson')},
+        ),
+    ]
diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py
index f8146cd79..9b9eb9d40 100644
--- a/aleksis/apps/alsijil/models.py
+++ b/aleksis/apps/alsijil/models.py
@@ -250,6 +250,7 @@ class PersonalNote(RegisterObjectRelatedMixin, ExtensibleModel):
                 check=lesson_related_constraint_q, name="one_relation_only_personal_note"
             )
         ]
+        unique_together = ["lesson_period", "week", "year", "event", "extra_lesson"]
 
 
 class LessonDocumentation(RegisterObjectRelatedMixin, ExtensibleModel):
@@ -337,6 +338,7 @@ class LessonDocumentation(RegisterObjectRelatedMixin, ExtensibleModel):
                 check=lesson_related_constraint_q, name="one_relation_only_lesson_documentation",
             )
         ]
+        unique_together = ["lesson_period", "week", "year", "event", "extra_lesson"]
 
 
 class ExtraMark(ExtensibleModel):
-- 
GitLab