handle discord channels in serializers

This commit is contained in:
Corban-Lee Jones 2024-10-02 19:40:53 +01:00
parent 14c2c1acca
commit 199daf913e

View File

@ -10,6 +10,7 @@ from apps.home.models import (
ContentFilter,
MessageMutator,
MessageStyle,
DiscordChannel,
Subscription,
Content,
UniqueContentRule
@ -170,11 +171,18 @@ class UniqueContentRuleSerializer(DynamicModelSerializer):
fields = ("id", "name", "value")
class DiscordChannelSerializer(DynamicModelSerializer):
class Meta:
model = DiscordChannel
fields = ("id", "channel_id")
class SubscriptionSerializer(DynamicModelSerializer):
filters = serializers.PrimaryKeyRelatedField(
queryset=ContentFilter.objects.all(),
many=True
)
channels = DiscordChannelSerializer(many=True)
# unique_rules = UniqueContentRuleSerializer(many=True) # TODO: solve? causes issues with submission.
class Meta:
@ -189,11 +197,28 @@ class SubscriptionSerializer(DynamicModelSerializer):
"extra_notes",
"active",
"publish_threshold",
"channels",
"filters",
"message_style",
"unique_rules"
)
def _delete_unused_channels(self):
referenced_channel_ids = set(Subscription.objects.values_list("channels__channel_id", flat=True))
del_count, _ = DiscordChannel.objects.exclude(channel_id__in=referenced_channel_ids).delete()
log.info("Deleted %s unreferenced DiscordChannel object(s).", del_count)
def update(self, instance, validated_data):
channels = validated_data.pop("channels")
instance.channels.clear()
for channel_id in channels:
channel, created = DiscordChannel.objects.get_or_create(channel_id=channel_id)
instance.channels.add(channel)
self._delete_unused_channels()
return super().update(instance, validated_data)
def validate(self, data):
server = data.get("server") or self.context.get("server")
if not server: