mirror of
https://github.com/seanmorley15/AdventureLog.git
synced 2025-07-23 06:49:37 +02:00
Refactor adventure category handling: update type definitions, enhance category management in UI components, and implement user-specific category deletion logic in the backend
This commit is contained in:
parent
736ede2417
commit
8e5a20ec62
12 changed files with 324 additions and 93 deletions
|
@ -614,23 +614,42 @@ class ActivityTypesView(viewsets.ViewSet):
|
|||
|
||||
return Response(allTypes)
|
||||
|
||||
class CategoryViewSet(viewsets.ViewSet):
|
||||
class CategoryViewSet(viewsets.ModelViewSet):
|
||||
queryset = Category.objects.all()
|
||||
serializer_class = CategorySerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get_queryset(self):
|
||||
return Category.objects.filter(user_id=self.request.user)
|
||||
|
||||
@action(detail=False, methods=['get'])
|
||||
def categories(self, request):
|
||||
"""
|
||||
Retrieve a list of distinct categories for adventures associated with the current user.
|
||||
|
||||
Args:
|
||||
request (HttpRequest): The HTTP request object.
|
||||
|
||||
Returns:
|
||||
Response: A response containing a list of distinct categories.
|
||||
"""
|
||||
categories = Category.objects.filter(user_id=request.user.id).distinct()
|
||||
serializer = CategorySerializer(categories, many=True)
|
||||
categories = self.get_queryset().distinct()
|
||||
serializer = self.get_serializer(categories, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
def destroy(self, request, *args, **kwargs):
|
||||
instance = self.get_object()
|
||||
if instance.user_id != request.user:
|
||||
return Response({"error": "User does not own this category"}, status
|
||||
=400)
|
||||
|
||||
if instance.name == 'general':
|
||||
return Response({"error": "Cannot delete the general category"}, status=400)
|
||||
|
||||
# set any adventures with this category to a default category called general before deleting the category, if general does not exist create it for the user
|
||||
general_category = Category.objects.filter(user_id=request.user, name='general').first()
|
||||
|
||||
if not general_category:
|
||||
general_category = Category.objects.create(user_id=request.user, name='general', icon='🌎', display_name='General')
|
||||
|
||||
Adventure.objects.filter(category=instance).update(category=general_category)
|
||||
|
||||
return super().destroy(request, *args, **kwargs)
|
||||
|
||||
|
||||
class TransportationViewSet(viewsets.ModelViewSet):
|
||||
queryset = Transportation.objects.all()
|
||||
|
@ -1129,12 +1148,13 @@ class ReverseGeocodeViewSet(viewsets.ViewSet):
|
|||
print(iso_code)
|
||||
country_code = iso_code[:2]
|
||||
|
||||
if city:
|
||||
display_name = f"{city}, {region.name}, {country_code}"
|
||||
elif town and region.name:
|
||||
display_name = f"{town}, {region.name}, {country_code}"
|
||||
elif county and region.name:
|
||||
display_name = f"{county}, {region.name}, {country_code}"
|
||||
if region:
|
||||
if city:
|
||||
display_name = f"{city}, {region.name}, {country_code}"
|
||||
elif town:
|
||||
display_name = f"{town}, {region.name}, {country_code}"
|
||||
elif county:
|
||||
display_name = f"{county}, {region.name}, {country_code}"
|
||||
|
||||
if visited_region:
|
||||
is_visited = True
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue