handle discord channels in serializers
This commit is contained in:
parent
14c2c1acca
commit
199daf913e
@ -10,6 +10,7 @@ from apps.home.models import (
|
|||||||
ContentFilter,
|
ContentFilter,
|
||||||
MessageMutator,
|
MessageMutator,
|
||||||
MessageStyle,
|
MessageStyle,
|
||||||
|
DiscordChannel,
|
||||||
Subscription,
|
Subscription,
|
||||||
Content,
|
Content,
|
||||||
UniqueContentRule
|
UniqueContentRule
|
||||||
@ -170,11 +171,18 @@ class UniqueContentRuleSerializer(DynamicModelSerializer):
|
|||||||
fields = ("id", "name", "value")
|
fields = ("id", "name", "value")
|
||||||
|
|
||||||
|
|
||||||
|
class DiscordChannelSerializer(DynamicModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = DiscordChannel
|
||||||
|
fields = ("id", "channel_id")
|
||||||
|
|
||||||
|
|
||||||
class SubscriptionSerializer(DynamicModelSerializer):
|
class SubscriptionSerializer(DynamicModelSerializer):
|
||||||
filters = serializers.PrimaryKeyRelatedField(
|
filters = serializers.PrimaryKeyRelatedField(
|
||||||
queryset=ContentFilter.objects.all(),
|
queryset=ContentFilter.objects.all(),
|
||||||
many=True
|
many=True
|
||||||
)
|
)
|
||||||
|
channels = DiscordChannelSerializer(many=True)
|
||||||
# unique_rules = UniqueContentRuleSerializer(many=True) # TODO: solve? causes issues with submission.
|
# unique_rules = UniqueContentRuleSerializer(many=True) # TODO: solve? causes issues with submission.
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -189,11 +197,28 @@ class SubscriptionSerializer(DynamicModelSerializer):
|
|||||||
"extra_notes",
|
"extra_notes",
|
||||||
"active",
|
"active",
|
||||||
"publish_threshold",
|
"publish_threshold",
|
||||||
|
"channels",
|
||||||
"filters",
|
"filters",
|
||||||
"message_style",
|
"message_style",
|
||||||
"unique_rules"
|
"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):
|
def validate(self, data):
|
||||||
server = data.get("server") or self.context.get("server")
|
server = data.get("server") or self.context.get("server")
|
||||||
if not server:
|
if not server:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user