From c38d97aea8465b7c79271efae6c40849a611954a Mon Sep 17 00:00:00 2001 From: Kara Engelhardt Date: Wed, 8 Nov 2023 21:12:27 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20last=5Fmodified=5Fat=20field?= =?UTF-8?q?=20to=20more=20models=20&=20expose=20updated=20field?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- froide/document/api_views.py | 2 ++ froide/foirequest/api_views.py | 2 ++ ...65_foimessage_last_modified_at_and_more.py | 22 +++++++++++++++++++ .../migrations/0066_merge_20240102_1603.py | 12 ++++++++++ froide/foirequest/models/message.py | 10 +++++++++ froide/foirequest/models/request.py | 9 ++++++++ froide/publicbody/api_views.py | 6 ++++- .../0045_jurisdiction_last_modified_at.py | 17 ++++++++++++++ froide/publicbody/models.py | 10 +++++++++ 9 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 froide/foirequest/migrations/0065_foimessage_last_modified_at_and_more.py create mode 100644 froide/foirequest/migrations/0066_merge_20240102_1603.py create mode 100644 froide/publicbody/migrations/0045_jurisdiction_last_modified_at.py diff --git a/froide/document/api_views.py b/froide/document/api_views.py index 57062419f..d2dbcc29b 100644 --- a/froide/document/api_views.py +++ b/froide/document/api_views.py @@ -41,6 +41,7 @@ class DocumentSerializer(FCDocumentSerializer): lookup_field="pk", read_only=True, ) + last_modified_at = serializers.CharField(source="updated_at", read_only=True) class Meta: model = Document @@ -48,6 +49,7 @@ class Meta: "original", "foirequest", "publicbody", + "last_modified_at", ) diff --git a/froide/foirequest/api_views.py b/froide/foirequest/api_views.py index 7f1d2b567..edf009494 100644 --- a/froide/foirequest/api_views.py +++ b/froide/foirequest/api_views.py @@ -204,6 +204,7 @@ class Meta: "redacted_content", "sender", "status_name", + "last_modified_at", ) def get_redacted_subject(self, obj): @@ -318,6 +319,7 @@ class Meta: "resolved_on", "last_message", "created_at", + "last_modified_at", "status", "public_body", "resolution", diff --git a/froide/foirequest/migrations/0065_foimessage_last_modified_at_and_more.py b/froide/foirequest/migrations/0065_foimessage_last_modified_at_and_more.py new file mode 100644 index 000000000..cfe5a7bfc --- /dev/null +++ b/froide/foirequest/migrations/0065_foimessage_last_modified_at_and_more.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.4 on 2023-11-20 14:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("foirequest", "0064_foimessage_confirmation_sent"), + ] + + operations = [ + migrations.AddField( + model_name="foimessage", + name="last_modified_at", + field=models.DateTimeField(auto_now=True), + ), + migrations.AddField( + model_name="foirequest", + name="last_modified_at", + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/froide/foirequest/migrations/0066_merge_20240102_1603.py b/froide/foirequest/migrations/0066_merge_20240102_1603.py new file mode 100644 index 000000000..8e1341bf4 --- /dev/null +++ b/froide/foirequest/migrations/0066_merge_20240102_1603.py @@ -0,0 +1,12 @@ +# Generated by Django 4.2.4 on 2024-01-02 15:03 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("foirequest", "0065_foimessage_last_modified_at_and_more"), + ("foirequest", "0065_foirequest_description_redacted"), + ] + + operations = [] diff --git a/froide/foirequest/models/message.py b/froide/foirequest/models/message.py index eb179d3f8..8e80f9938 100644 --- a/froide/foirequest/models/message.py +++ b/froide/foirequest/models/message.py @@ -135,6 +135,8 @@ class FoiMessage(models.Model): ) timestamp = models.DateTimeField(_("Timestamp"), blank=True) + last_modified_at = models.DateTimeField(auto_now=True) + email_message_id = models.CharField(max_length=512, blank=True, default="") subject = models.CharField(_("Subject"), blank=True, max_length=255) subject_redacted = models.CharField( @@ -180,6 +182,14 @@ def __str__(self): "time": self.timestamp, } + def save(self, *args, **kwargs): + if "update_fields" in kwargs: + kwargs["update_fields"] = {"last_modified_at"}.union( + kwargs["update_fields"] + ) + + super().save(*args, **kwargs) + @property def is_postal(self): return self.kind == MessageKind.POST diff --git a/froide/foirequest/models/request.py b/froide/foirequest/models/request.py index eb87f5b57..9d19f790c 100644 --- a/froide/foirequest/models/request.py +++ b/froide/foirequest/models/request.py @@ -333,6 +333,7 @@ class FoiRequest(models.Model): ) resolved_on = models.DateTimeField(_("Resolution date"), blank=True, null=True) due_date = models.DateTimeField(_("Due Date"), blank=True, null=True) + last_modified_at = models.DateTimeField(auto_now=True) secret_address = models.CharField( _("Secret address"), max_length=255, db_index=True, unique=True @@ -447,6 +448,14 @@ class Meta: def __str__(self): return _("Request '%s'") % self.title + def save(self, *args, **kwargs): + if "update_fields" in kwargs: + kwargs["update_fields"] = {"last_modified_at"}.union( + kwargs["update_fields"] + ) + + super().save(*args, **kwargs) + @property def same_as_set(self): return FoiRequest.objects.filter(same_as=self) diff --git a/froide/publicbody/api_views.py b/froide/publicbody/api_views.py index 9126c5631..78c555dbf 100644 --- a/froide/publicbody/api_views.py +++ b/froide/publicbody/api_views.py @@ -53,6 +53,7 @@ class Meta: "slug", "site_url", "region", + "last_modified_at", ) @@ -72,6 +73,7 @@ class SimpleFoiLawSerializer(serializers.HyperlinkedModelSerializer): view_name="api:publicbody-detail", lookup_field="pk", read_only=True ) site_url = serializers.SerializerMethodField() + last_modified_at = serializers.CharField(source="updated") class Meta: model = FoiLaw @@ -85,7 +87,6 @@ class Meta: "long_description", "law_type", "created", - "updated", "request_note", "request_note_html", "meta", @@ -101,6 +102,7 @@ class Meta: "max_response_time_unit", "letter_start", "letter_end", + "last_modified_at", ) def get_site_url(self, obj): @@ -330,6 +332,7 @@ class SimplePublicBodySerializer(serializers.HyperlinkedModelSerializer): site_url = serializers.CharField(source="get_absolute_domain_url") geo = serializers.SerializerMethodField() + last_modified_at = serializers.CharField(source="updated_at") class Meta: model = PublicBody @@ -354,6 +357,7 @@ class Meta: "jurisdiction", "request_note_html", "geo", + "last_modified_at", ) def get_geo(self, obj): diff --git a/froide/publicbody/migrations/0045_jurisdiction_last_modified_at.py b/froide/publicbody/migrations/0045_jurisdiction_last_modified_at.py new file mode 100644 index 000000000..8e2824a1c --- /dev/null +++ b/froide/publicbody/migrations/0045_jurisdiction_last_modified_at.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.4 on 2023-11-20 14:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("publicbody", "0044_alter_publicbody_laws"), + ] + + operations = [ + migrations.AddField( + model_name="jurisdiction", + name="last_modified_at", + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/froide/publicbody/models.py b/froide/publicbody/models.py index 03afc65a0..1f96d50b9 100644 --- a/froide/publicbody/models.py +++ b/froide/publicbody/models.py @@ -72,6 +72,8 @@ class Jurisdiction(models.Model): objects = JurisdictionManager() + last_modified_at = models.DateTimeField(auto_now=True) + class Meta: verbose_name = _("Jurisdiction") verbose_name_plural = _("Jurisdictions") @@ -95,6 +97,14 @@ def get_all_laws(self): meta_laws = FoiLaw.objects.filter(pk__in=meta_ids) return laws.union(meta_laws) + def save(self, *args, **kwargs): + if "update_fields" in kwargs: + kwargs["update_fields"] = {"last_modified_at"}.union( + kwargs["update_fields"] + ) + + super().save(*args, **kwargs) + class FoiLaw(TranslatableModel): translations = TranslatedFields(