From 2da401848356a020e22d7f0dc264bc5050d26132 Mon Sep 17 00:00:00 2001 From: Corban-Lee Jones Date: Thu, 3 Oct 2024 12:48:54 +0100 Subject: [PATCH] include channels details in subscription serializer --- apps/api/serializers.py | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/apps/api/serializers.py b/apps/api/serializers.py index 77ff6ba..e2b25c3 100644 --- a/apps/api/serializers.py +++ b/apps/api/serializers.py @@ -171,16 +171,37 @@ class UniqueContentRuleSerializer(DynamicModelSerializer): fields = ("id", "name", "value") +class DiscordChannelField(serializers.PrimaryKeyRelatedField): + def to_internal_value(self, data): + try: + data = int(data) + except (TypeError, ValueError): + self.fail("invalid", pk_value=data) + + return super().to_internal_value(data) + + def to_representation(self, value): + return str(value.pk) + + +class NestedDiscordChannelSerializer(DynamicModelSerializer): + + class Meta: + model = DiscordChannel + fields = ("id", "name", "is_nsfw") + + class SubscriptionSerializer(DynamicModelSerializer): filters = serializers.PrimaryKeyRelatedField( queryset=ContentFilter.objects.all(), many=True ) - channels = serializers.PrimaryKeyRelatedField( + channels = DiscordChannelField( queryset=DiscordChannel.objects.all(), many=True ) - # unique_rules = UniqueContentRuleSerializer(many=True) # TODO: solve? causes issues with submission. + channels_detail = serializers.SerializerMethodField() + # unique_rules = UniqueContentRuleSerializ er(many=True) # TODO: solve? causes issues with submission. class Meta: model = Subscription @@ -195,11 +216,18 @@ class SubscriptionSerializer(DynamicModelSerializer): "active", "publish_threshold", "channels", + "channels_detail", "filters", "message_style", "unique_rules" ) + def get_channels_detail(self, obj: Subscription): + request = self.context.get("request") + if request.method == "GET": + return NestedDiscordChannelSerializer(obj.channels.all(), many=True).data + return [] + def validate(self, data): server = data.get("server") or self.context.get("server") if not server: