diff --git a/apps/api/serializers.py b/apps/api/serializers.py index fa36688..88011c3 100644 --- a/apps/api/serializers.py +++ b/apps/api/serializers.py @@ -10,7 +10,6 @@ from apps.home.models import ( ContentFilter, MessageMutator, MessageStyle, - UniqueContentRule, DiscordChannel, Subscription, Content, @@ -200,14 +199,6 @@ class MessageStyleSerializer(DynamicModelSerializer): return {} -# region Rules - -class UniqueContentRuleSerializer(DynamicModelSerializer): - class Meta: - model = UniqueContentRule - fields = ("id", "name", "value") - - # region Subscriptions class DiscordChannelField(serializers.PrimaryKeyRelatedField): @@ -249,7 +240,6 @@ class SubscriptionSerializer(DynamicModelSerializer): allow_null=False ) message_style_detail = serializers.SerializerMethodField() - unique_rules_detail = serializers.SerializerMethodField() class Meta: model = Subscription @@ -268,9 +258,7 @@ class SubscriptionSerializer(DynamicModelSerializer): "filters", "filters_detail", "message_style", - "message_style_detail", - "unique_rules", - "unique_rules_detail" + "message_style_detail" ) def get_channels_detail(self, obj: Subscription): @@ -291,12 +279,6 @@ class SubscriptionSerializer(DynamicModelSerializer): return MessageStyleSerializer(obj.message_style).data return {} - def get_unique_rules_detail(self, obj: Subscription): - request = self.context.get("request") - if request.method == "GET": - return UniqueContentRuleSerializer(obj.unique_rules.all(), many=True).data - return [] - def validate(self, data): server = data.get("server") or self.context.get("server") if not server: diff --git a/apps/api/urls.py b/apps/api/urls.py index e9a0818..c760415 100644 --- a/apps/api/urls.py +++ b/apps/api/urls.py @@ -15,9 +15,7 @@ from .views import ( Subscription_ListView, Subscription_DetailView, Content_ListView, - Content_DetailView, - UniqueContentRule_ListView, - UniqueContentRule_DetailView + Content_DetailView ) urlpatterns = [ @@ -58,11 +56,5 @@ urlpatterns = [ path("content/", include([ path("", Content_ListView.as_view()), path("/", Content_DetailView.as_view()) - ])), - - # region Unique Rules - path("unique-content-rules/", include([ - path("", UniqueContentRule_ListView.as_view()), - path("/", UniqueContentRule_DetailView.as_view()) ])) ] diff --git a/apps/api/views.py b/apps/api/views.py index 9b6f21a..d83e925 100644 --- a/apps/api/views.py +++ b/apps/api/views.py @@ -17,8 +17,7 @@ from apps.home.models import ( MessageMutator, MessageStyle, Subscription, - Content, - UniqueContentRule + Content ) from apps.authentication.models import DiscordUser, ServerMember from .metadata import ExpandedMetadata @@ -28,8 +27,7 @@ from .serializers import ( MessageMutatorSerializer, MessageStyleSerializer, SubscriptionSerializer, - ContentSerializer, - UniqueContentRuleSerializer + ContentSerializer ) from .permissions import HasServerAccess from .errors import NotAMemberError @@ -200,7 +198,7 @@ class MessageStyle_DetailView(ChangableDetailView): # region Subscriptions class Subscription_ListView(ListCreateView): - filterset_fields = ("id", "server", "name", "url", "created_at", "updated_at", "extra_notes", "active", "publish_threshold", "filters", "message_style", "unique_rules") + filterset_fields = ("id", "server", "name", "url", "created_at", "updated_at", "extra_notes", "active", "publish_threshold", "filters", "message_style") search_fields = ("name", "url", "extra_notes") ordering_fields = ("id", "server", "name", "url", "created_at", "updated_at", "extra_notes", "active", "message_style") serializer_class = SubscriptionSerializer @@ -234,23 +232,23 @@ class ContentFilterBackend(BaseFilterBackend): """ _MATCH_ANY_PARAM = "match_any" - _PAGINATION_PARAMS = [ + _IGNORE_PARAMS = [ DefaultPagination.page_query_param, - DefaultPagination.page_size_query_param + DefaultPagination.page_size_query_param, + "search", + "subscription" ] - _SUB_PARAM = "subscription" def filter_queryset(self, request, queryset, view): - match_any = request.query_params.get(self._MATCH_ANY_PARAM) == "true" filters = Q() for param, value in request.query_params.items(): - if param == self._MATCH_ANY_PARAM or param in self._PAGINATION_PARAMS: + if param in self._IGNORE_PARAMS or param == self._MATCH_ANY_PARAM: continue query = Q(**{param: value}) - if match_any and param != self._SUB_PARAM: + if param not in self._IGNORE_PARAMS: filters |= query else: filters &= query @@ -260,8 +258,6 @@ class ContentFilterBackend(BaseFilterBackend): class Content_ListView(ListCreateView): search_fields = ( - "subscription", - "subscription__server", "item_id", "item_guid", "item_url", @@ -276,7 +272,7 @@ class Content_ListView(ListCreateView): "item_feed_title", "item_feed_url" ) - filterset_fields = search_fields + ("id",) + filterset_fields = search_fields + ("id", "subscription", "subscription__server") ordering_fields = filterset_fields serializer_class = ContentSerializer filter_backends = [ @@ -306,22 +302,3 @@ class Content_DetailView(ChangableDetailView): servers = ServerMember.objects.filter(user=self.request.user).values_list("server", flat=True) subscriptions = Subscription.objects.filter(server__in=servers).values_list("id", flat=True) return Content.objects.filter(subscription__in=subscriptions) - - -# region Unique Rules - -class UniqueContentRule_ListView(ListCreateView): - filterset_fields = ("id", "name", "value") - search_fields = ("name", "value") - ordering_fields = ("id", "name", "value") - serializer_class = UniqueContentRuleSerializer - - def get_queryset(self): - return UniqueContentRule.objects.all() - - -class UniqueContentRule_DetailView(ChangableDetailView): - serializer_class = UniqueContentRuleSerializer - - def get_queryset(self): - return UniqueContentRule.objects.all() diff --git a/apps/home/admin.py b/apps/home/admin.py index 61fe63b..32c753e 100644 --- a/apps/home/admin.py +++ b/apps/home/admin.py @@ -9,8 +9,7 @@ from .models import ( MessageStyle, DiscordChannel, Subscription, - Content, - UniqueContentRule + Content ) @@ -108,13 +107,3 @@ class ContentAdmin(admin.ModelAdmin): "item_title", "item_content_hash" ] - - -@admin.register(UniqueContentRule) -class UniqueContentRule(admin.ModelAdmin): - list_display = [ - "id", - "name", - "value" - ] - list_display_links = ["name"] diff --git a/apps/home/models.py b/apps/home/models.py index becaf1d..4d37b9c 100644 --- a/apps/home/models.py +++ b/apps/home/models.py @@ -185,28 +185,6 @@ def create_default_items(sender, instance, created, **kwargs): ) -# region Unique Content Rule - -class UniqueContentRule(models.Model): - """ - Definitions for what content should be unique - Instances of this model are predefined via migrations. - Manual editing should be avoided at all costs! - """ - - id = models.AutoField(primary_key=True) - name = models.CharField(max_length=64) - value = models.CharField(max_length=32) - - class Meta: - verbose_name = "unique content rule" - verbose_name_plural = "unique content rules" - get_latest_by = "id" - - def __str__(self): - return self.name - - # region Discord Channel class DiscordChannel(models.Model): @@ -247,7 +225,6 @@ class Subscription(models.Model): channels = models.ManyToManyField(to=DiscordChannel, related_name="subscriptions", blank=False) filters = models.ManyToManyField(to=ContentFilter, blank=True) message_style = models.ForeignKey(to=MessageStyle, on_delete=models.SET_NULL, null=True, blank=False) - unique_rules = models.ManyToManyField(to=UniqueContentRule, blank=False) class Meta: verbose_name = "subscription"