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

View File

@ -7,6 +7,7 @@ from pathlib import Path
from django.db import models
from django.utils import timezone
from django.dispatch import receiver
from django.db.utils import IntegrityError
from django.db.models.signals import pre_save
from django.utils.translation import gettext_lazy as _
from django.core.files.storage import FileSystemStorage
@ -111,6 +112,12 @@ class Subscription(models.Model):
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):
"""
@ -154,6 +161,13 @@ class SubscriptionChannel(models.Model):
def __str__(self):
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):