From dcc6b32a9c243d4264b0ec7884ac58fbbbd6352d Mon Sep 17 00:00:00 2001
From: Valentin Rigal <rigal@teklia.com>
Date: Thu, 21 Jan 2021 10:50:44 +0100
Subject: [PATCH] Avoid a request resulting in a stale read when creating a
 corpus

---
 arkindex/documents/serializers/elements.py | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arkindex/documents/serializers/elements.py b/arkindex/documents/serializers/elements.py
index f9ed4b96ca..9f5a1ed044 100644
--- a/arkindex/documents/serializers/elements.py
+++ b/arkindex/documents/serializers/elements.py
@@ -2,6 +2,7 @@ from collections import defaultdict
 from uuid import UUID
 
 from django.contrib.gis.geos import LinearRing
+from django.db import transaction
 from django.utils.functional import cached_property
 from rest_framework import serializers
 from rest_framework.exceptions import ValidationError
@@ -123,6 +124,7 @@ class CorpusSerializer(serializers.ModelSerializer):
             raise ValidationError(['Only admin users are allowed to edit the public attribute on a corpus.'])
         return public
 
+    @transaction.atomic
     def create(self, validated_data):
         corpus = Corpus.objects.create(**validated_data)
         corpus.memberships.create(
@@ -130,6 +132,9 @@ class CorpusSerializer(serializers.ModelSerializer):
             level=Role.Admin.value
         )
         corpus.create_default_types()
+        # Cheat annotating corpus to avoid a stale read when serializing it
+        corpus.access_level = Role.Admin.value
+        corpus.authorized_users = 1
         return corpus
 
 
-- 
GitLab