Updated subscription model

This commit is contained in:
Corban-Lee Jones 2024-04-24 15:58:46 +01:00
parent 639dbee04f
commit 8cf077d280
4 changed files with 17 additions and 69 deletions

View File

@ -114,13 +114,13 @@ class SubscriptionSerializer(DynamicModelSerializer):
Serializer for the Subscription Model.
"""
image = serializers.ImageField(required=False)
server = serializers.CharField()
# image = serializers.ImageField(required=False)
# server = serializers.CharField()
# targets = SubscriptionTargetSerializer(many=True, required=False)
class Meta:
model = Subscription
fields = ("uuid", "name", "rss_url", "image", "server", "targets", "creation_datetime", "extra_notes", "active")
fields = ("id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes", "active")
class UserServerLinkSerializer(DynamicModelSerializer):

View File

@ -52,9 +52,9 @@ class Subscription_ListView(generics.ListCreateAPIView):
queryset = Subscription.objects.all().order_by("-creation_datetime")
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
filterset_fields = ["uuid", "name", "rss_url", "server", "targets", "creation_datetime", "extra_notes", "active"]
filterset_fields = ["id", "name", "url", "guild_id", "creation_datetime", "extra_notes", "active"]
search_fields = ["name", "extra_notes"]
ordering_fields = ["creation_datetime", "server"]
ordering_fields = ["creation_datetime", "guild_id"]
def post(self, request):
serializer = self.get_serializer(data=request.data)
@ -62,10 +62,10 @@ class Subscription_ListView(generics.ListCreateAPIView):
try:
self.perform_create(serializer)
except IntegrityError:
except IntegrityError as err:
return Response(
{"detail": "Duplicate or limit reached"},
status=status.HTTP_409_CONFLICT,
{"detail": str(err)},
status=status.HTTP_500_INTERNAL_SERVER_ERROR,
exception=True
)

View File

@ -8,8 +8,8 @@ from .models import Subscription, SavedGuilds
@admin.register(Subscription)
class SubscriptionAdmin(admin.ModelAdmin):
list_display = [
"uuid", "name", "rss_url", "server",
"creation_datetime"
"id", "name", "url", "guild_id",
"creation_datetime", "active"
]

View File

@ -73,8 +73,8 @@ class SavedGuilds(models.Model):
default=False
)
class NewSubscription(models.Model):
class Subscription(models.Model):
id = models.AutoField(
primary_key=True
)
@ -94,75 +94,19 @@ class NewSubscription(models.Model):
max_length=128
)
class Subscription(models.Model):
"""
Represents a stored RSS Feed.
"""
uuid = models.UUIDField(
primary_key=True,
default=uuid4,
editable=False
)
# Name attribute acts as a human readable identification and search option.
name = models.CharField(
verbose_name=_("name"),
help_text=_("Reference name for this subscription (max 32 chars)."),
max_length=32,
null=False,
blank=False
)
rss_url = models.URLField(
verbose_name=_("rss url"),
help_text=_("URL of the subscribed to RSS feed.")
)
image = models.ImageField(
verbose_name=_("image"),
help_text=_("image of the RSS feed."),
upload_to=IconPathGenerator(),
storage=OverwriteStorage(),
default="../static/images/placeholder-100x100.png",
null=True,
blank=True
)
# Discord Server ID
server = models.PositiveBigIntegerField(
verbose_name=_("server id"),
help_text=_("Identifier for the discord server that owns this subscription.")
)
targets = models.CharField(
verbose_name=_("targets"),
max_length=500,
help_text=_("Discord channels where subscription content is delivered to.")
)
creation_datetime = models.DateTimeField(
verbose_name=_("creation datetime"),
help_text=_("when this instance was created."),
default=timezone.now,
editable=False
)
extra_notes = models.CharField(
verbose_name=_("extra notes"),
max_length=250,
null=True,
blank=True,
help_text=_("Additional user written notes about this item.")
)
active = models.BooleanField(
verbose_name=_("active"),
default=True,
help_text=_("Acts as a soft delete.")
)
class Meta:
@ -175,14 +119,18 @@ class Subscription(models.Model):
get_latest_by = "-creation_datetime"
constraints = [
# Prevent servers from having subscriptions with duplicate names
models.UniqueConstraint(fields=["name", "server"], name="unique name & server pair")
models.UniqueConstraint(fields=["name", "guild_id"], name="unique name & server pair")
]
@property
def channels_count(self):
return 0
def __str__(self):
return self.name
def save(self, *args, **kwargs):
new_text = "New " if self._state.adding else ""
log.debug("%sSubscription Saved %s", new_text, self.uuid)
log.debug("%sSubscription Saved %s", new_text, self.id)
super().save(*args, **kwargs)