1
0
Fork 0
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:
Sean Morley 2024-11-23 13:42:41 -05:00
parent 736ede2417
commit 8e5a20ec62
12 changed files with 324 additions and 93 deletions

View file

@ -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