aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Chris Lovering <[email protected]>2024-05-10 09:52:05 +0100
committerGravatar Chris Lovering <[email protected]>2024-05-10 17:21:19 +0100
commitb92aa76306e0405fb820c407d18d9907877e1ec9 (patch)
treeabff438dcfa58e098e87cd9e2402b293c1a5f833
parentMerge 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.py18
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