diff options
| author | 2022-02-19 17:59:26 +0000 | |
|---|---|---|
| committer | 2022-03-16 21:52:06 +0000 | |
| commit | 0aed5f7913e7ce268ddb56127f84a5386ede5739 (patch) | |
| tree | 080039ca0d001c67e01a5cb5b33f3700a7479b5f | |
| parent | Move FilterList imports down so they're sorted (diff) | |
Add support for BumpedThreads to be stored in site
Following our move to use Redis as just a cache, this PR allows the site to store a list of threads that need to be bumped.
The bot will interact with this within the ThreadBumper cog.
| -rw-r--r-- | pydis_site/apps/api/migrations/0081_bumpedthread.py | 22 | ||||
| -rw-r--r-- | pydis_site/apps/api/models/__init__.py | 1 | ||||
| -rw-r--r-- | pydis_site/apps/api/models/bot/__init__.py | 1 | ||||
| -rw-r--r-- | pydis_site/apps/api/models/bot/bumped_thread.py | 22 | ||||
| -rw-r--r-- | pydis_site/apps/api/serializers.py | 11 | ||||
| -rw-r--r-- | pydis_site/apps/api/urls.py | 5 | ||||
| -rw-r--r-- | pydis_site/apps/api/viewsets/__init__.py | 1 | ||||
| -rw-r--r-- | pydis_site/apps/api/viewsets/bot/__init__.py | 1 | ||||
| -rw-r--r-- | pydis_site/apps/api/viewsets/bot/bumped_thread.py | 65 | 
9 files changed, 129 insertions, 0 deletions
| diff --git a/pydis_site/apps/api/migrations/0081_bumpedthread.py b/pydis_site/apps/api/migrations/0081_bumpedthread.py new file mode 100644 index 00000000..03e66cc1 --- /dev/null +++ b/pydis_site/apps/api/migrations/0081_bumpedthread.py @@ -0,0 +1,22 @@ +# Generated by Django 3.1.14 on 2022-02-19 16:26 + +import django.core.validators +from django.db import migrations, models +import pydis_site.apps.api.models.mixins + + +class Migration(migrations.Migration): + +    dependencies = [ +        ('api', '0080_add_aoc_tables'), +    ] + +    operations = [ +        migrations.CreateModel( +            name='BumpedThread', +            fields=[ +                ('thread_id', models.BigIntegerField(help_text='The thread ID that should be bumped.', primary_key=True, serialize=False, validators=[django.core.validators.MinValueValidator(limit_value=0, message='Thread IDs cannot be negative.')], verbose_name='Thread ID')), +            ], +            bases=(pydis_site.apps.api.models.mixins.ModelReprMixin, models.Model), +        ), +    ] diff --git a/pydis_site/apps/api/models/__init__.py b/pydis_site/apps/api/models/__init__.py index e83473c9..a197e988 100644 --- a/pydis_site/apps/api/models/__init__.py +++ b/pydis_site/apps/api/models/__init__.py @@ -1,6 +1,7 @@  # flake8: noqa  from .bot import (      BotSetting, +    BumpedThread,      DocumentationLink,      DeletedMessage,      FilterList, diff --git a/pydis_site/apps/api/models/bot/__init__.py b/pydis_site/apps/api/models/bot/__init__.py index 64676fdb..013bb85e 100644 --- a/pydis_site/apps/api/models/bot/__init__.py +++ b/pydis_site/apps/api/models/bot/__init__.py @@ -1,5 +1,6 @@  # flake8: noqa  from .bot_setting import BotSetting +from .bumped_thread import BumpedThread  from .deleted_message import DeletedMessage  from .documentation_link import DocumentationLink  from .filter_list import FilterList diff --git a/pydis_site/apps/api/models/bot/bumped_thread.py b/pydis_site/apps/api/models/bot/bumped_thread.py new file mode 100644 index 00000000..cdf9a950 --- /dev/null +++ b/pydis_site/apps/api/models/bot/bumped_thread.py @@ -0,0 +1,22 @@ +from django.core.validators import MinValueValidator +from django.db import models + +from pydis_site.apps.api.models.mixins import ModelReprMixin + + +class BumpedThread(ModelReprMixin, models.Model): +    """A list of thread IDs to be bumped.""" + +    thread_id = models.BigIntegerField( +        primary_key=True, +        help_text=( +            "The thread ID that should be bumped." +        ), +        validators=( +            MinValueValidator( +                limit_value=0, +                message="Thread IDs cannot be negative." +            ), +        ), +        verbose_name="Thread ID", +    ) diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py index c97f7dba..b9e06081 100644 --- a/pydis_site/apps/api/serializers.py +++ b/pydis_site/apps/api/serializers.py @@ -16,6 +16,7 @@ from .models import (      AocAccountLink,      AocCompletionistBlock,      BotSetting, +    BumpedThread,      DeletedMessage,      DocumentationLink,      FilterList, @@ -41,6 +42,16 @@ class BotSettingSerializer(ModelSerializer):          fields = ('name', 'data') +class BumpedThreadSerializer(ModelSerializer): +    """A class providing (de-)serialization of `BumpedThread` instances.""" + +    class Meta: +        """Metadata defined for the Django REST Framework.""" + +        model = BumpedThread +        fields = ('thread_id',) + +  class DeletedMessageSerializer(ModelSerializer):      """      A class providing (de-)serialization of `DeletedMessage` instances. diff --git a/pydis_site/apps/api/urls.py b/pydis_site/apps/api/urls.py index 6b881fac..1e564b29 100644 --- a/pydis_site/apps/api/urls.py +++ b/pydis_site/apps/api/urls.py @@ -6,6 +6,7 @@ from .viewsets import (      AocAccountLinkViewSet,      AocCompletionistBlockViewSet,      BotSettingViewSet, +    BumpedThreadViewSet,      DeletedMessageViewSet,      DocumentationLinkViewSet,      FilterListViewSet, @@ -33,6 +34,10 @@ bot_router.register(      BotSettingViewSet  )  bot_router.register( +    'bumped-threads', +    BumpedThreadViewSet +) +bot_router.register(      'deleted-messages',      DeletedMessageViewSet  ) diff --git a/pydis_site/apps/api/viewsets/__init__.py b/pydis_site/apps/api/viewsets/__init__.py index a62a9c01..ec52416a 100644 --- a/pydis_site/apps/api/viewsets/__init__.py +++ b/pydis_site/apps/api/viewsets/__init__.py @@ -1,6 +1,7 @@  # flake8: noqa  from .bot import (      BotSettingViewSet, +    BumpedThreadViewSet,      DeletedMessageViewSet,      DocumentationLinkViewSet,      FilterListViewSet, diff --git a/pydis_site/apps/api/viewsets/bot/__init__.py b/pydis_site/apps/api/viewsets/bot/__init__.py index f1d84729..262aa59f 100644 --- a/pydis_site/apps/api/viewsets/bot/__init__.py +++ b/pydis_site/apps/api/viewsets/bot/__init__.py @@ -1,6 +1,7 @@  # flake8: noqa  from .filter_list import FilterListViewSet  from .bot_setting import BotSettingViewSet +from .bumped_thread import BumpedThreadViewSet  from .deleted_message import DeletedMessageViewSet  from .documentation_link import DocumentationLinkViewSet  from .infraction import InfractionViewSet diff --git a/pydis_site/apps/api/viewsets/bot/bumped_thread.py b/pydis_site/apps/api/viewsets/bot/bumped_thread.py new file mode 100644 index 00000000..6594ac6e --- /dev/null +++ b/pydis_site/apps/api/viewsets/bot/bumped_thread.py @@ -0,0 +1,65 @@ +from rest_framework.mixins import ( +    CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin +) +from rest_framework.viewsets import GenericViewSet + +from pydis_site.apps.api.models.bot import BumpedThread +from pydis_site.apps.api.serializers import BumpedThreadSerializer + + +class BumpedThreadViewSet( +    GenericViewSet, CreateModelMixin, DestroyModelMixin, RetrieveModelMixin, ListModelMixin +): +    """ +    View providing CRUD (Minus the U) operations on threads to be bumped. + +    ## Routes +    ### GET /bot/bumped-threads +    Returns all BumpedThread items in the database. + +    #### Response format +    >>> [ +    ...     { +    ...         'thread_id': "941705627405811793", +    ...     }, +    ...     ... +    ... ] + +    #### Status codes +    - 200: returned on success +    - 401: returned if unauthenticated + +    ### GET /bot/bumped-threads/<thread_id:int> +    Returns a specific BumpedThread item from the database. + +    #### Response format +    >>> { +    ...     'thread_id': "941705627405811793", +    ... } + +    #### Status codes +    - 200: returned on success +    - 404: returned if a BumpedThread with the given thread_id was not found. + +    ### POST /bot/bumped-threads +    Adds a single BumpedThread item to the database. + +    #### Request body +    >>> { +    ...    'thread_id': int, +    ... } + +    #### Status codes +    - 201: returned on success +    - 400: if one of the given fields is invalid + +    ### DELETE /bot/bumped-threads/<thread_id:int> +    Deletes the BumpedThread item with the given `thread_id`. + +    #### Status codes +    - 204: returned on success +    - 404: if a BumpedThread with the given `thread_id` does not exist +    """ + +    serializer_class = BumpedThreadSerializer +    queryset = BumpedThread.objects.all() | 
