From e31036079e169ad6fa8ef33ac0de2eb79e27a421 Mon Sep 17 00:00:00 2001 From: dekzter Date: Tue, 8 Apr 2025 17:23:14 -0400 Subject: [PATCH] allow null for channel_number so we auto assign --- apps/channels/api_views.py | 9 +-------- apps/channels/models.py | 8 ++++++++ apps/channels/serializers.py | 3 +++ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/apps/channels/api_views.py b/apps/channels/api_views.py index 2df48b42..94686634 100644 --- a/apps/channels/api_views.py +++ b/apps/channels/api_views.py @@ -127,13 +127,6 @@ class ChannelViewSet(viewsets.ModelViewSet): serializer_class = ChannelSerializer permission_classes = [IsAuthenticated] - def get_next_available_channel_number(self, starting_from=1): - used_numbers = set(Channel.objects.all().values_list('channel_number', flat=True)) - n = starting_from - while n in used_numbers: - n += 1 - return n - @swagger_auto_schema( method='post', operation_description="Auto-assign channel_number in bulk by an ordered list of channel IDs.", @@ -208,7 +201,7 @@ class ChannelViewSet(viewsets.ModelViewSet): if channel_number is None: provided_number = request.data.get('channel_number') if provided_number is None: - channel_number = self.get_next_available_channel_number() + channel_number = Channel.get_next_available_channel_number() else: try: channel_number = int(provided_number) diff --git a/apps/channels/models.py b/apps/channels/models.py index 9f1b641e..e012e3fd 100644 --- a/apps/channels/models.py +++ b/apps/channels/models.py @@ -269,6 +269,14 @@ class Channel(models.Model): def __str__(self): return f"{self.channel_number} - {self.name}" + @classmethod + def get_next_available_channel_number(cls, starting_from=1): + used_numbers = set(cls.objects.all().values_list('channel_number', flat=True)) + n = starting_from + while n in used_numbers: + n += 1 + return n + # @TODO: honor stream's stream profile def get_stream_profile(self): stream_profile = self.stream_profile diff --git a/apps/channels/serializers.py b/apps/channels/serializers.py index 55a14c01..fcab5905 100644 --- a/apps/channels/serializers.py +++ b/apps/channels/serializers.py @@ -117,6 +117,7 @@ class BulkChannelProfileMembershipSerializer(serializers.Serializer): # class ChannelSerializer(serializers.ModelSerializer): # Show nested group data, or ID + channel_number = serializers.IntegerField(allow_null=True, required=False) channel_group = ChannelGroupSerializer(read_only=True) channel_group_id = serializers.PrimaryKeyRelatedField( queryset=ChannelGroup.objects.all(), @@ -187,6 +188,8 @@ class ChannelSerializer(serializers.ModelSerializer): def create(self, validated_data): stream_ids = validated_data.pop('streams', []) + channel_number = validated_data.pop('channel_number', Channel.get_next_available_channel_number()) + validated_data["channel_number"] = channel_number channel = Channel.objects.create(**validated_data) # Add streams in the specified order