diff options
| author | 2024-05-11 11:29:54 +0200 | |
|---|---|---|
| committer | 2024-05-11 11:29:54 +0200 | |
| commit | f0b3a9bf790835c5e9190732f1df799dd46fb9b1 (patch) | |
| tree | 2d04146c9df6ed652eb6f356cb816523a27b3bcf /pydis_site/apps/api/viewsets | |
| parent | Merge pull request #1314 from python-discord/dependabot/github_actions/covera... (diff) | |
| parent | Update reminder tests for new soft-deleted behaviour (diff) | |
Merge pull request #1315 from python-discord/soft-delete-reminders
Soft-delete reminders on DELETE instead of removing entirely
Diffstat (limited to 'pydis_site/apps/api/viewsets')
| -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 |