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: