diff options
author | 2024-05-10 09:52:05 +0100 | |
---|---|---|
committer | 2024-05-10 17:21:19 +0100 | |
commit | b92aa76306e0405fb820c407d18d9907877e1ec9 (patch) | |
tree | abff438dcfa58e098e87cd9e2402b293c1a5f833 | |
parent | Merge pull request #1316 from python-discord/dependabot/pip/ruff-0.4.4 (diff) |
Soft-delete reminders on DELETE instead of removing entirely
-rw-r--r-- | pydis_site/apps/api/viewsets/bot/reminder.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/pydis_site/apps/api/viewsets/bot/reminder.py b/pydis_site/apps/api/viewsets/bot/reminder.py index 5f997052..bf398e45 100644 --- a/pydis_site/apps/api/viewsets/bot/reminder.py +++ b/pydis_site/apps/api/viewsets/bot/reminder.py @@ -1,4 +1,5 @@ from django_filters.rest_framework import DjangoFilterBackend +from rest_framework.request import Request from rest_framework.filters import SearchFilter from rest_framework.mixins import ( CreateModelMixin, @@ -113,6 +114,7 @@ class ReminderViewSet( ### DELETE /bot/reminders/<id:int> Delete the reminder with the given `id`. + This is a soft-delete by setting `active` to False. #### Status codes - 204: returned on success @@ -126,3 +128,19 @@ class ReminderViewSet( queryset = Reminder.objects.prefetch_related('author') filter_backends = (DjangoFilterBackend, SearchFilter) filterset_fields = ('active', 'author__id') + + def perform_destroy(self, instance: Reminder) -> None: + """Soft-delete reminders when DELETE is called.""" + instance.active = False + instance.save() + + def get_queryset(self) -> list[Reminder]: + """Filter out soft-deleted reminders by default.""" + queryset = Reminder.objects.prefetch_related('author') + request: Request = self.request + + include_inactive = request.query_params.get("include_inactive", "false") + include_inactive = include_inactive.lower() == "true" + if not include_inactive: + queryset = queryset.filter(active=True) + return queryset |