diff --git a/peachjam/migrations/0167_ratification_ratificationcountry_and_more.py b/peachjam/migrations/0167_ratification_ratificationcountry_and_more.py index bc9e54591..2232d2539 100644 --- a/peachjam/migrations/0167_ratification_ratificationcountry_and_more.py +++ b/peachjam/migrations/0167_ratification_ratificationcountry_and_more.py @@ -52,6 +52,7 @@ class Migration(migrations.Migration): options={ "verbose_name": "ratification", "verbose_name_plural": "ratifications", + "db_table": "africanlii_ratification", }, ), migrations.CreateModel( @@ -106,6 +107,7 @@ class Migration(migrations.Migration): "verbose_name": "ratification country", "verbose_name_plural": "ratification countries", "ordering": ["country__name"], + "db_table": "africanlii_ratificationcountry", }, ), migrations.AddConstraint( diff --git a/peachjam/migrations/0168_ratification_updated_at_alter_ratification_table_and_more.py b/peachjam/migrations/0168_ratification_updated_at_alter_ratification_table_and_more.py new file mode 100644 index 000000000..8cdd86d81 --- /dev/null +++ b/peachjam/migrations/0168_ratification_updated_at_alter_ratification_table_and_more.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.14 on 2024-10-15 14:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("peachjam", "0167_ratification_ratificationcountry_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="ratification", + name="updated_at", + field=models.DateTimeField(auto_now=True, verbose_name="updated at"), + ), + ] diff --git a/peachjam/models/ratification.py b/peachjam/models/ratification.py index 18b4e27f6..c4298002c 100644 --- a/peachjam/models/ratification.py +++ b/peachjam/models/ratification.py @@ -17,6 +17,7 @@ class Ratification(models.Model): ) source_url = models.URLField(_("source URL"), null=True, blank=True) last_updated = models.DateField(_("last updated"), null=True, blank=True) + updated_at = models.DateTimeField(_("updated at"), auto_now=True) class Meta: verbose_name = _("ratification") diff --git a/peachjam_api/public_views.py b/peachjam_api/public_views.py index a9531787b..ba5b428cd 100644 --- a/peachjam_api/public_views.py +++ b/peachjam_api/public_views.py @@ -4,8 +4,12 @@ from rest_framework.decorators import action from rest_framework.permissions import BasePermission, DjangoModelPermissions -from peachjam.models import Gazette, Judgment -from peachjam_api.serializers import GazetteSerializer, JudgmentSerializer +from peachjam.models import Gazette, Judgment, Ratification +from peachjam_api.serializers import ( + GazetteSerializer, + JudgmentSerializer, + RatificationSerializer, +) class JudgmentAPIPermission(BasePermission): @@ -97,3 +101,15 @@ class JudgmentsViewSet(BaseDocumentViewSet): .all() ) serializer_class = JudgmentSerializer + + +class RatificationsViewSet(viewsets.ReadOnlyModelViewSet): + permission_classes = [DjangoModelPermissions] + queryset = ( + Ratification.objects.select_related("work").prefetch_related("countries").all() + ) + serializer_class = RatificationSerializer + filterset_fields = { + "updated_at": ["exact", "gte", "lte"], + } + ordering = ["updated_at"] diff --git a/peachjam_api/serializers.py b/peachjam_api/serializers.py index a30f955d1..f4b109f86 100644 --- a/peachjam_api/serializers.py +++ b/peachjam_api/serializers.py @@ -9,6 +9,8 @@ Label, Legislation, Predicate, + Ratification, + RatificationCountry, Relationship, Work, ) @@ -206,3 +208,22 @@ class Meta: "url", "work_frbr_uri", ) + + +class RatificationCountrySerializer(serializers.ModelSerializer): + class Meta: + model = RatificationCountry + exclude = ["id", "ratification"] + + +class RatificationSerializer(serializers.ModelSerializer): + countries = RatificationCountrySerializer(many=True) + work = serializers.CharField(source="work.frbr_uri") + + class Meta: + model = Ratification + fields = ( + "work", + "last_updated", + "countries", + ) diff --git a/peachjam_api/urls_public.py b/peachjam_api/urls_public.py index 411279c54..ed8730e71 100644 --- a/peachjam_api/urls_public.py +++ b/peachjam_api/urls_public.py @@ -14,6 +14,11 @@ public_views.GazettesViewSet, basename="gazettes", ) +router.register( + r"ratifications", + public_views.RatificationsViewSet, + basename="ratifications", +) urlpatterns = [ # public-facing API