Tracked Content model
This commit is contained in:
parent
3c32706a39
commit
14df15cfaf
@ -4,7 +4,7 @@ import logging
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from apps.home.models import SubChannel, Filter, Subscription, SavedGuilds
|
||||
from apps.home.models import SubChannel, Filter, Subscription, SavedGuilds, TrackedContent
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
@ -146,3 +146,13 @@ class SavedGuildSerializer(DynamicModelSerializer):
|
||||
class Meta:
|
||||
model = SavedGuilds
|
||||
fields = ("id", "guild_id", "name", "icon", "added_by", "permissions", "owner")
|
||||
|
||||
|
||||
class TrackedContentSerializer(DynamicModelSerializer):
|
||||
"""
|
||||
Serializer for the TrackedContent model.
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
model = TrackedContent
|
||||
fields = ("guid", "title", "subscription", "creation_datetime")
|
||||
|
@ -11,13 +11,14 @@ from rest_framework.pagination import PageNumberPagination
|
||||
from rest_framework.authentication import SessionAuthentication, TokenAuthentication
|
||||
from rest_framework.parsers import MultiPartParser, FormParser
|
||||
|
||||
from apps.home.models import SubChannel, Filter, Subscription, SavedGuilds
|
||||
from apps.home.models import SubChannel, Filter, Subscription, SavedGuilds, TrackedContent
|
||||
from apps.authentication.models import DiscordUser
|
||||
from .serializers import (
|
||||
SubChannelSerializer,
|
||||
FilterSerializer,
|
||||
SubscriptionSerializer,
|
||||
SavedGuildSerializer
|
||||
SavedGuildSerializer,
|
||||
TrackedContentSerializer
|
||||
)
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@ -368,3 +369,57 @@ class SavedGuild_DetailView(generics.RetrieveDestroyAPIView):
|
||||
return SavedGuilds.objects.all()
|
||||
|
||||
return SavedGuilds.objects.filter(added_by=self.request.user)
|
||||
|
||||
|
||||
# =================================================================================================
|
||||
# TrackedContent Views
|
||||
|
||||
class TrackedContent_ListView(generics.ListCreateAPIView):
|
||||
"""
|
||||
View to provide a list of TrackedContent model instances.
|
||||
Can also be used to create a new instance.
|
||||
|
||||
Supports: GET, POST
|
||||
"""
|
||||
|
||||
authentication_classes = [SessionAuthentication, TokenAuthentication]
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
pagination_class = DefaultPagination
|
||||
serializer_class = TrackedContentSerializer
|
||||
queryset = TrackedContent.objects.all().order_by("guid")
|
||||
|
||||
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
|
||||
filterset_fields = ["guid", "title", "subscription", "creation_datetime"]
|
||||
|
||||
def post(self, request):
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
try:
|
||||
self.perform_create(serializer)
|
||||
except IntegrityError as err:
|
||||
return Response(
|
||||
{"detail": str(err)},
|
||||
status=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
exception=True
|
||||
)
|
||||
|
||||
headers = self.get_success_headers(serializer.data)
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
||||
|
||||
|
||||
class TrackedContent_DetailView(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
View to provide details on a particular TrackedContent model instances.
|
||||
|
||||
Supports: GET, PUT, PATCH, DELETE
|
||||
"""
|
||||
|
||||
authentication_classes = [SessionAuthentication, TokenAuthentication]
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
parser_classes = [MultiPartParser, FormParser]
|
||||
|
||||
serializer_class = TrackedContentSerializer
|
||||
queryset = TrackedContent.objects.all().order_by("id")
|
||||
|
24
apps/home/migrations/0023_trackedcontent.py
Normal file
24
apps/home/migrations/0023_trackedcontent.py
Normal file
@ -0,0 +1,24 @@
|
||||
# Generated by Django 5.0.4 on 2024-06-10 23:20
|
||||
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('home', '0022_alter_subscription_filters'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='TrackedContent',
|
||||
fields=[
|
||||
('guid', models.CharField(max_length=128, primary_key=True, serialize=False)),
|
||||
('title', models.CharField(max_length=128)),
|
||||
('creation_datetime', models.DateTimeField(default=django.utils.timezone.now, editable=False)),
|
||||
('subscription', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='home.subscription')),
|
||||
],
|
||||
),
|
||||
]
|
@ -246,3 +246,10 @@ class Subscription(models.Model):
|
||||
new_text = "New " if self._state.adding else ""
|
||||
log.debug("%sSubscription Saved %s", new_text, self.id)
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class TrackedContent(models.Model):
|
||||
guid = models.CharField(primary_key=True, max_length=128)
|
||||
title = models.CharField(max_length=128)
|
||||
subscription = models.ForeignKey(to=Subscription, on_delete=models.CASCADE)
|
||||
creation_datetime = models.DateTimeField(default=timezone.now, editable=False)
|
||||
|
Loading…
x
Reference in New Issue
Block a user