From c1664e82bf5a55c828f14150e97441a3e4a952b4 Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Fri, 27 Sep 2024 22:14:34 -0400 Subject: [PATCH 1/3] Fix multiple adventures when shared with multiple users! --- backend/server/adventures/views.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/server/adventures/views.py b/backend/server/adventures/views.py index 7d2a136..b1597dc 100644 --- a/backend/server/adventures/views.py +++ b/backend/server/adventures/views.py @@ -72,23 +72,22 @@ class AdventureViewSet(viewsets.ModelViewSet): return queryset.order_by(ordering) def get_queryset(self): - # if the user is not authenticated return only public adventures for retrieve action + # if the user is not authenticated return only public adventures for retrieve action if not self.request.user.is_authenticated: if self.action == 'retrieve': - return Adventure.objects.filter(is_public=True) + return Adventure.objects.filter(is_public=True).distinct() return Adventure.objects.none() - if self.action == 'retrieve': # For individual adventure retrieval, include public adventures return Adventure.objects.filter( Q(is_public=True) | Q(user_id=self.request.user.id) | Q(collection__shared_with=self.request.user) - ) + ).distinct() else: # For other actions, include user's own adventures and shared adventures return Adventure.objects.filter( Q(user_id=self.request.user.id) | Q(collection__shared_with=self.request.user) - ) + ).distinct() def retrieve(self, request, *args, **kwargs): queryset = self.get_queryset() @@ -270,6 +269,7 @@ class AdventureViewSet(viewsets.ModelViewSet): serializer.save() # when creating an adventure, make sure the user is the owner of the collection or shared with the collection + @transaction.atomic def perform_create(self, serializer): # Retrieve the collection from the validated data collection = serializer.validated_data.get('collection') From 7e110d8670db61a414f0070aafdd6cdfe89e0d40 Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Fri, 27 Sep 2024 22:16:56 -0400 Subject: [PATCH 2/3] Fix multiple adventures when shared with multiple users! --- backend/server/adventures/views.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/server/adventures/views.py b/backend/server/adventures/views.py index b1597dc..dce3da0 100644 --- a/backend/server/adventures/views.py +++ b/backend/server/adventures/views.py @@ -75,19 +75,19 @@ class AdventureViewSet(viewsets.ModelViewSet): # if the user is not authenticated return only public adventures for retrieve action if not self.request.user.is_authenticated: if self.action == 'retrieve': - return Adventure.objects.filter(is_public=True).distinct() + return Adventure.objects.filter(is_public=True).distinct().order_by('-updated_at') return Adventure.objects.none() if self.action == 'retrieve': # For individual adventure retrieval, include public adventures return Adventure.objects.filter( Q(is_public=True) | Q(user_id=self.request.user.id) | Q(collection__shared_with=self.request.user) - ).distinct() + ).distinct().order_by('-updated_at') else: # For other actions, include user's own adventures and shared adventures return Adventure.objects.filter( Q(user_id=self.request.user.id) | Q(collection__shared_with=self.request.user) - ).distinct() + ).distinct().order_by('-updated_at') def retrieve(self, request, *args, **kwargs): queryset = self.get_queryset() From e41d9382ab1910b2ca83c17becb52e2d274023c2 Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Fri, 27 Sep 2024 22:21:36 -0400 Subject: [PATCH 3/3] Fix for all other collection types --- backend/server/adventures/views.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/backend/server/adventures/views.py b/backend/server/adventures/views.py index dce3da0..5a9dab6 100644 --- a/backend/server/adventures/views.py +++ b/backend/server/adventures/views.py @@ -619,7 +619,7 @@ class TransportationViewSet(viewsets.ModelViewSet): # if the user is not authenticated return only public transportations for retrieve action if not self.request.user.is_authenticated: if self.action == 'retrieve': - return Transportation.objects.filter(is_public=True) + return Transportation.objects.filter(is_public=True).distinct().order_by('-updated_at') return Transportation.objects.none() @@ -627,12 +627,12 @@ class TransportationViewSet(viewsets.ModelViewSet): # For individual adventure retrieval, include public adventures return Transportation.objects.filter( Q(is_public=True) | Q(user_id=self.request.user.id) | Q(collection__shared_with=self.request.user) - ) + ).distinct().order_by('-updated_at') else: # For other actions, include user's own adventures and shared adventures return Transportation.objects.filter( Q(user_id=self.request.user.id) | Q(collection__shared_with=self.request.user) - ) + ).distinct().order_by('-updated_at') def partial_update(self, request, *args, **kwargs): # Retrieve the current object @@ -741,7 +741,7 @@ class NoteViewSet(viewsets.ModelViewSet): # if the user is not authenticated return only public transportations for retrieve action if not self.request.user.is_authenticated: if self.action == 'retrieve': - return Note.objects.filter(is_public=True) + return Note.objects.filter(is_public=True).distinct().order_by('-updated_at') return Note.objects.none() @@ -749,12 +749,12 @@ class NoteViewSet(viewsets.ModelViewSet): # For individual adventure retrieval, include public adventures return Note.objects.filter( Q(is_public=True) | Q(user_id=self.request.user.id) | Q(collection__shared_with=self.request.user) - ) + ).distinct().order_by('-updated_at') else: # For other actions, include user's own adventures and shared adventures return Note.objects.filter( Q(user_id=self.request.user.id) | Q(collection__shared_with=self.request.user) - ) + ).distinct().order_by('-updated_at') def partial_update(self, request, *args, **kwargs): # Retrieve the current object @@ -863,7 +863,7 @@ class ChecklistViewSet(viewsets.ModelViewSet): # if the user is not authenticated return only public transportations for retrieve action if not self.request.user.is_authenticated: if self.action == 'retrieve': - return Checklist.objects.filter(is_public=True) + return Checklist.objects.filter(is_public=True).distinct().order_by('-updated_at') return Checklist.objects.none() @@ -871,12 +871,12 @@ class ChecklistViewSet(viewsets.ModelViewSet): # For individual adventure retrieval, include public adventures return Checklist.objects.filter( Q(is_public=True) | Q(user_id=self.request.user.id) | Q(collection__shared_with=self.request.user) - ) + ).distinct().order_by('-updated_at') else: # For other actions, include user's own adventures and shared adventures return Checklist.objects.filter( Q(user_id=self.request.user.id) | Q(collection__shared_with=self.request.user) - ) + ).distinct().order_by('-updated_at') def partial_update(self, request, *args, **kwargs): # Retrieve the current object