From a908b9aa3a18222f296c0e4bd67d815f48ada5af Mon Sep 17 00:00:00 2001 From: Johannes Christ Date: Wed, 13 Dec 2023 09:07:08 +0100 Subject: Migrate mailing lists to their own API endpoints Add a new model for the bot to store its mailing list state in, as opposed to the current JSON blob in the BotSetting table. Migrate the existing settings from the BotSetting table into the new model. --- pydis_site/apps/api/serializers.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'pydis_site/apps/api/serializers.py') diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py index 87fd6190..a2dc68f0 100644 --- a/pydis_site/apps/api/serializers.py +++ b/pydis_site/apps/api/serializers.py @@ -26,6 +26,8 @@ from .models import ( Filter, FilterList, Infraction, + MailingList, + MailingListSeenItem, MessageDeletionContext, Nomination, NominationEntry, @@ -741,3 +743,37 @@ class OffensiveMessageSerializer(FrozenFieldsMixin, ModelSerializer): model = OffensiveMessage fields = ('id', 'channel_id', 'delete_date') frozen_fields = ('id', 'channel_id') + + +class MailingListSeenItemListSerializer(ListSerializer): + """A class providing (de-)serialization of `MailingListSeenItem` instances as a list.""" + + def to_representation(self, objects: list[MailingListSeenItem]) -> list[str]: + """Return the hashes of each seen mailing list item.""" + return [obj['hash'] for obj in objects.values('hash')] + + +class MailingListSeenItemSerializer(ModelSerializer): + """A class providing (de-)serialization of `MailingListSeenItem` instances.""" + + class Meta: + """Metadata defined for the Django REST Framework.""" + + model = MailingListSeenItem + # Since this is only exposed on the parent mailing list model, + # we don't need information about the list or even the ID. + fields = ('hash',) + list_serializer_class = MailingListSeenItemListSerializer + + +class MailingListSerializer(FrozenFieldsMixin, ModelSerializer): + """A class providing (de-)serialization of `MailingList` instances.""" + + seen_items = MailingListSeenItemSerializer(many=True, required=False) + + class Meta: + """Metadata defined for the Django REST Framework.""" + + model = MailingList + fields = ('id', 'name', 'seen_items') + frozen_fields = ('name',) -- cgit v1.2.3