From f7cfc9afc1db7ad4cf1a00ef08ab1a2c8defa3c1 Mon Sep 17 00:00:00 2001 From: Corban-Lee Jones Date: Wed, 13 Nov 2024 01:30:52 +0000 Subject: [PATCH] sub recommendation model and data --- apps/api/serializers.py | 11 +++++ apps/api/urls.py | 8 +++- apps/api/views.py | 13 ++++- ...019_subscriptionrecommendation_and_more.py | 29 ++++++++++++ .../home/migrations/0020_autofill_sub_recs.py | 47 +++++++++++++++++++ apps/home/models.py | 12 +++++ 6 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 apps/home/migrations/0019_subscriptionrecommendation_and_more.py create mode 100644 apps/home/migrations/0020_autofill_sub_recs.py diff --git a/apps/api/serializers.py b/apps/api/serializers.py index 88011c3..6085011 100644 --- a/apps/api/serializers.py +++ b/apps/api/serializers.py @@ -13,6 +13,7 @@ from apps.home.models import ( DiscordChannel, Subscription, Content, + SubscriptionRecommendation ) log = logging.getLogger(__name__) @@ -339,3 +340,13 @@ class ContentSerializer(DynamicModelSerializer): "item_feed_url", "blocked" ) + +class SubscriptionRecommendationSerializer(DynamicModelSerializer): + class Meta: + model = SubscriptionRecommendation + fields = ( + "id", + "name", + "description", + "url" + ) diff --git a/apps/api/urls.py b/apps/api/urls.py index c760415..3cf6534 100644 --- a/apps/api/urls.py +++ b/apps/api/urls.py @@ -15,7 +15,8 @@ from .views import ( Subscription_ListView, Subscription_DetailView, Content_ListView, - Content_DetailView + Content_DetailView, + SubscriptionRecommendations_ListView ) urlpatterns = [ @@ -56,5 +57,10 @@ urlpatterns = [ path("content/", include([ path("", Content_ListView.as_view()), path("/", Content_DetailView.as_view()) + ])), + + # region Recommendations + path("subscription-recommendations/", include([ + path("", SubscriptionRecommendations_ListView.as_view()) ])) ] diff --git a/apps/api/views.py b/apps/api/views.py index d83e925..1d7eaba 100644 --- a/apps/api/views.py +++ b/apps/api/views.py @@ -17,7 +17,8 @@ from apps.home.models import ( MessageMutator, MessageStyle, Subscription, - Content + Content, + SubscriptionRecommendation ) from apps.authentication.models import DiscordUser, ServerMember from .metadata import ExpandedMetadata @@ -27,7 +28,8 @@ from .serializers import ( MessageMutatorSerializer, MessageStyleSerializer, SubscriptionSerializer, - ContentSerializer + ContentSerializer, + SubscriptionRecommendationSerializer ) from .permissions import HasServerAccess from .errors import NotAMemberError @@ -302,3 +304,10 @@ 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 Sub Recommendations + +class SubscriptionRecommendations_ListView(ListView): + queryset = SubscriptionRecommendation.objects.all().order_by("id") + serializer_class = SubscriptionRecommendationSerializer diff --git a/apps/home/migrations/0019_subscriptionrecommendation_and_more.py b/apps/home/migrations/0019_subscriptionrecommendation_and_more.py new file mode 100644 index 0000000..015a9ba --- /dev/null +++ b/apps/home/migrations/0019_subscriptionrecommendation_and_more.py @@ -0,0 +1,29 @@ +# Generated by Django 5.0.4 on 2024-11-13 00:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0018_alter_content_item_author'), + ] + + operations = [ + migrations.CreateModel( + name='SubscriptionRecommendation', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=32)), + ('description', models.CharField(max_length=250)), + ('url', models.URLField()), + ], + ), + migrations.RemoveField( + model_name='subscription', + name='unique_rules', + ), + migrations.DeleteModel( + name='UniqueContentRule', + ), + ] diff --git a/apps/home/migrations/0020_autofill_sub_recs.py b/apps/home/migrations/0020_autofill_sub_recs.py new file mode 100644 index 0000000..eb5fa4d --- /dev/null +++ b/apps/home/migrations/0020_autofill_sub_recs.py @@ -0,0 +1,47 @@ +# Generated by Django 5.0.4 on 2024-11-13 00:59 + +from django.db import migrations + +def add_subscription_recommendations(apps, schema_editor): + model = apps.get_model("home", "SubscriptionRecommendation") + model.objects.create( + name="BBC News", + description="BBC News - News Front Page.", + url="http://feeds.bbci.co.uk/news/rss.xml" + ) + model.objects.create( + name="BBC News · Entertainment", + description="BBC News - Culture.", + url="https://feeds.bbci.co.uk/news/entertainment_and_arts/rss.xml" + ) + model.objects.create( + name="BBC News · Technology", + description="BBC News - Technology.", + url="https://feeds.bbci.co.uk/news/technology/rss.xml" + ) + model.objects.create( + name="Sky News", + description="The Latest News from the UK and Around the World.", + url="https://feeds.skynews.com/feeds/rss/home.xml" + ) + model.objects.create( + name="Sky News · Strange News", + description="Weird News - Strange and Odd News Stories.", + url="https://feeds.skynews.com/feeds/rss/strange.xml" + ) + model.objects.create( + name="Free Games Finder", + description="Free Games Finder's mission is to find and raise awareness of free games.", + url="https://steamcommunity.com/groups/freegamesfinders/rss/" + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0019_subscriptionrecommendation_and_more'), + ] + + operations = [ + migrations.RunPython(add_subscription_recommendations) + ] diff --git a/apps/home/models.py b/apps/home/models.py index 4d37b9c..007e77d 100644 --- a/apps/home/models.py +++ b/apps/home/models.py @@ -289,3 +289,15 @@ class BotLogicLogs(models.Model): def __str__(self): return f"{self.server.name} - {self.id}" + + +# Subscription Recommendations + +class SubscriptionRecommendation(models.Model): + id = models.AutoField(primary_key=True) + name = models.CharField(max_length=32) + description = models.CharField(max_length=250) + url = models.URLField() + + def __str__(self): + return self.url