diff --git a/apps/api/metadata.py b/apps/api/metadata.py index dbf33e5..9f69b80 100644 --- a/apps/api/metadata.py +++ b/apps/api/metadata.py @@ -5,6 +5,14 @@ from rest_framework.request import clone_request class ExpandedMetadata(SimpleMetadata): + def determine_metadata(self, request, view): + metadata = super().determine_metadata(request, view) + + if hasattr(view, "ordering_fields"): + metadata["sort"] = view.ordering_fields + + return metadata + def determine_actions(self, request, view): """ For generic class based views we return information about diff --git a/apps/api/views.py b/apps/api/views.py index 108e93b..9f6a493 100644 --- a/apps/api/views.py +++ b/apps/api/views.py @@ -13,6 +13,7 @@ from rest_framework.parsers import MultiPartParser, FormParser from apps.home.models import SubChannel, Filter, Subscription, SavedGuilds, TrackedContent, ArticleMutator from apps.authentication.models import DiscordUser +from .metadata import ExpandedMetadata from .serializers import ( SubChannelSerializer, FilterSerializer, @@ -108,10 +109,11 @@ class Filter_ListView(generics.ListCreateAPIView): pagination_class = DefaultPagination serializer_class = FilterSerializer + metadata_class = ExpandedMetadata filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter] filterset_fields = ["id", "name", "matching_algorithm", "match", "is_insensitive", "is_whitelist", "guild_id"] - search_fields = ["name", "keywords", "regex"] + search_fields = ["name", "match"] def get_queryset(self): if self.request.user.is_superuser: @@ -183,16 +185,15 @@ class Subscription_ListView(generics.ListCreateAPIView): permission_classes = [permissions.IsAuthenticated] pagination_class = DefaultPagination - # serializer_class = SubscriptionSerializer - # queryset = Subscription.objects.all().order_by("-creation_datetime") + metadata_class = ExpandedMetadata filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter] filterset_fields = [ "id", "name", "url", "guild_id", "creation_datetime", "extra_notes", "filters", "article_title_mutators", "article_desc_mutators", "embed_colour", "published_threshold", "active" ] - search_fields = ["name", "extra_notes"] - ordering_fields = ["creation_datetime", "guild_id"] + search_fields = ["name", "url", "extra_notes"] + ordering_fields = ["creation_datetime", "channels_count"] read_serializer_class = SubscriptionSerializer_GET write_serializer_class = SubscriptionSerializer_POST @@ -243,9 +244,6 @@ class Subscription_DetailView(generics.RetrieveUpdateDestroyAPIView): permission_classes = [permissions.IsAuthenticated] parser_classes = [MultiPartParser, FormParser] - # serializer_class = SubscriptionSerializer - # queryset = Subscription.objects.all().order_by("-creation_datetime") - serializer_class = SubscriptionSerializer_POST def get_queryset(self): @@ -317,6 +315,7 @@ class SavedGuild_ListView(generics.ListCreateAPIView): pagination_class = None serializer_class = SavedGuildSerializer + metadata_class = ExpandedMetadata filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter] filterset_fields = ["id", "guild_id", "name", "icon", "added_by", "permissions", "owner"] @@ -400,10 +399,13 @@ class TrackedContent_ListView(generics.ListCreateAPIView): permission_classes = [permissions.IsAuthenticated] pagination_class = DefaultPagination + metadata_class = ExpandedMetadata queryset = TrackedContent.objects.all().order_by("-creation_datetime") filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter] filterset_fields = ["guid", "title", "url", "subscription", "subscription__guild_id", "channel_id", "blocked", "creation_datetime"] + search_fields = ["guid", "title", "url", "subscription__name", "subscription__url"] + ordering_fields = ["creation_datetime"] read_serializer_class = TrackedContentSerializer_GET write_serializer_class = TrackedContentSerializer_POST @@ -457,6 +459,7 @@ class ArticleMutator_ListView(generics.ListCreateAPIView): authentication_classes = [SessionAuthentication, TokenAuthentication] permission_classes = [permissions.IsAuthenticated] + metadata_class = ExpandedMetadata queryset = ArticleMutator.objects.all().order_by("id") filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]