include channels details in subscription serializer

This commit is contained in:
Corban-Lee Jones 2024-10-03 12:48:54 +01:00
parent 709b650f2e
commit 2da4018483

View File

@ -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: