From 659b0f6c9b94be754466817259a233793e46077f Mon Sep 17 00:00:00 2001
From: Tore Brede <Tore.Brede@uib.no>
Date: Fri, 27 Aug 2021 16:43:54 +0200
Subject: [PATCH] GREG-27: Adding more information in person listing

---
 greg/api/serializers/person.py             | 63 +++++++++++++++-------
 greg/migrations/0002_auto_20210827_1437.py | 24 +++++++++
 greg/models.py                             |  4 +-
 3 files changed, 70 insertions(+), 21 deletions(-)
 create mode 100644 greg/migrations/0002_auto_20210827_1437.py

diff --git a/greg/api/serializers/person.py b/greg/api/serializers/person.py
index 5a408eaf..720972d7 100644
--- a/greg/api/serializers/person.py
+++ b/greg/api/serializers/person.py
@@ -1,24 +1,6 @@
 from rest_framework import serializers
 
-from greg.models import Person, PersonRole, Role, PersonIdentity
-
-
-class PersonSerializer(serializers.ModelSerializer):
-    class Meta:
-        model = Person
-        fields = [
-            "id",
-            "first_name",
-            "last_name",
-            "date_of_birth",
-            "email",
-            "mobile_phone",
-            "email_verified_date",
-            "mobile_phone",
-            "mobile_phone_verified_date",
-            "registration_completed_date",
-            "token",
-        ]
+from greg.models import Person, PersonRole, Role, PersonIdentity, PersonConsent, Consent
 
 
 class PersonRoleSerializer(serializers.ModelSerializer):
@@ -57,3 +39,46 @@ class PersonIdentitySerializer(serializers.ModelSerializer):
             .filter(value__like=value)
             .exists()
         )
+
+
+class ConsentSerializerBrief(serializers.ModelSerializer):
+    class Meta:
+        model = Consent
+        fields = [
+            "type",
+            "valid_from",
+            "user_allowed_to_change",
+        ]
+
+
+class PersonConsentSerializerBrief(serializers.ModelSerializer):
+    consent = ConsentSerializerBrief(read_only=True)
+
+    class Meta:
+        model = PersonConsent
+        fields = ["consent", "consent_given_at"]
+
+
+class PersonSerializer(serializers.ModelSerializer):
+    identities = PersonIdentitySerializer(many=True, read_only=True)
+    person_roles = PersonRoleSerializer(many=True, read_only=True)
+    person_consent = PersonConsentSerializerBrief(many=True, read_only=True)
+
+    class Meta:
+        model = Person
+        fields = [
+            "id",
+            "first_name",
+            "last_name",
+            "date_of_birth",
+            "email",
+            "mobile_phone",
+            "email_verified_date",
+            "mobile_phone",
+            "mobile_phone_verified_date",
+            "registration_completed_date",
+            "token",
+            "identities",
+            "person_roles",
+            "person_consent",
+        ]
diff --git a/greg/migrations/0002_auto_20210827_1437.py b/greg/migrations/0002_auto_20210827_1437.py
new file mode 100644
index 00000000..db4be564
--- /dev/null
+++ b/greg/migrations/0002_auto_20210827_1437.py
@@ -0,0 +1,24 @@
+# Generated by Django 3.2.5 on 2021-08-27 14:37
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('greg', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='personconsent',
+            name='consent',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='person_consent', to='greg.consent'),
+        ),
+        migrations.AlterField(
+            model_name='personconsent',
+            name='person',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='person_consent', to='greg.person'),
+        ),
+    ]
diff --git a/greg/models.py b/greg/models.py
index c614dc3e..2571bba1 100644
--- a/greg/models.py
+++ b/greg/models.py
@@ -273,10 +273,10 @@ class PersonConsent(BaseModel):
     """
 
     person = models.ForeignKey(
-        "Person", on_delete=models.CASCADE, related_name="link_person_consent"
+        "Person", on_delete=models.CASCADE, related_name="person_consent"
     )
     consent = models.ForeignKey(
-        "Consent", on_delete=models.PROTECT, related_name="link_person_consent"
+        "Consent", on_delete=models.PROTECT, related_name="person_consent"
     )
     # If the date is blank it means the person has not given consent yet
     consent_given_at = models.DateField(null=True)
-- 
GitLab