aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api/serializers.py
diff options
context:
space:
mode:
authorGravatar Johannes Christ <[email protected]>2023-12-13 09:07:08 +0100
committerGravatar Johannes Christ <[email protected]>2023-12-17 14:34:07 +0100
commita908b9aa3a18222f296c0e4bd67d815f48ada5af (patch)
treef89afe69e35694ca740f5921627ff91a76f272d3 /pydis_site/apps/api/serializers.py
parentMerge pull request #1175 from python-discord/dependabot/pip/ruff-0.1.8 (diff)
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.
Diffstat (limited to 'pydis_site/apps/api/serializers.py')
-rw-r--r--pydis_site/apps/api/serializers.py36
1 files changed, 36 insertions, 0 deletions
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',)