implement item limits

This commit is contained in:
Corban-Lee Jones 2024-02-20 08:16:52 +00:00
parent 3efaae8b5c
commit 23bcfe0158
2 changed files with 18 additions and 3 deletions

View File

@ -3,6 +3,7 @@
import logging import logging
from django.db.utils import IntegrityError from django.db.utils import IntegrityError
from django.core.exceptions import ValidationError
from django_filters import rest_framework as rest_filters from django_filters import rest_framework as rest_filters
from rest_framework import status, permissions, filters, generics from rest_framework import status, permissions, filters, generics
from rest_framework.response import Response from rest_framework.response import Response
@ -61,7 +62,7 @@ class Subscription_ListView(generics.ListCreateAPIView):
self.perform_create(serializer) self.perform_create(serializer)
except IntegrityError: except IntegrityError:
return Response( return Response(
{"detail": "Subscription name must be unique"}, {"detail": "Duplicate or limit reached"},
status=status.HTTP_409_CONFLICT, status=status.HTTP_409_CONFLICT,
exception=True exception=True
) )
@ -122,7 +123,7 @@ class SubscriptionChannel_ListView(generics.ListCreateAPIView):
except IntegrityError as exc: except IntegrityError as exc:
log.error(exc) log.error(exc)
return Response( return Response(
{"detail": "Duplicates not allowed"}, {"detail": "Duplicate or limit reached"},
status=status.HTTP_409_CONFLICT, status=status.HTTP_409_CONFLICT,
exception=True exception=True
) )
@ -158,7 +159,7 @@ class SubscriptionChannel_DetailView(generics.RetrieveDestroyAPIView):
self.perform_create(serializer) self.perform_create(serializer)
except IntegrityError: except IntegrityError:
return Response( return Response(
{"detail": "Channel must be unique"}, {"detail": "Duplicate or limit reached"},
status=status.HTTP_409_CONFLICT, status=status.HTTP_409_CONFLICT,
exception=True exception=True
) )

View File

@ -7,6 +7,7 @@ from pathlib import Path
from django.db import models from django.db import models
from django.utils import timezone from django.utils import timezone
from django.dispatch import receiver from django.dispatch import receiver
from django.db.utils import IntegrityError
from django.db.models.signals import pre_save from django.db.models.signals import pre_save
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.core.files.storage import FileSystemStorage from django.core.files.storage import FileSystemStorage
@ -111,6 +112,12 @@ class Subscription(models.Model):
return SubscriptionChannel.objects.filter(subscription=self) return SubscriptionChannel.objects.filter(subscription=self)
def save(self, *args, **kwargs):
if Subscription.objects.filter(server=self.server).count() >= 1:
raise IntegrityError(f"Subscription limit reached for server '{self.server}'")
super().save(*args, **kwargs)
class SubscriptionChannel(models.Model): class SubscriptionChannel(models.Model):
""" """
@ -154,6 +161,13 @@ class SubscriptionChannel(models.Model):
def __str__(self): def __str__(self):
return str(self.id) return str(self.id)
def save(self, *args, **kwargs):
if SubscriptionChannel.objects.filter(subscription=self.subscription).count() >= 4:
raise IntegrityError(
f"SubscriptionChannel limit reached for subscription '{self.subscription}'"
)
super().save(*args, **kwargs)
class TrackedContent(models.Model): class TrackedContent(models.Model):