aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api/serializers.py
diff options
context:
space:
mode:
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',)