diff --git a/backend/server/adventures/views/adventure_view.py b/backend/server/adventures/views/adventure_view.py index 28ddab4..0dd52c7 100644 --- a/backend/server/adventures/views/adventure_view.py +++ b/backend/server/adventures/views/adventure_view.py @@ -6,9 +6,9 @@ from django.db.models.functions import Lower from rest_framework import viewsets from rest_framework.decorators import action from rest_framework.response import Response -from adventures.models import Adventure, Category +from adventures.models import Adventure, Category, Transportation, Lodging from adventures.permissions import IsOwnerOrSharedWithFullAccess -from adventures.serializers import AdventureSerializer +from adventures.serializers import AdventureSerializer, TransportationSerializer, LodgingSerializer from adventures.utils import pagination class AdventureViewSet(viewsets.ModelViewSet): @@ -198,3 +198,49 @@ class AdventureViewSet(viewsets.ModelViewSet): serializer = self.get_serializer(queryset, many=True) return Response(serializer.data) + + # @action(detail=True, methods=['post']) + # def convert(self, request, pk=None): + # """ + # Convert an Adventure instance into a Transportation or Lodging instance. + # Expects a JSON body with "target_type": "transportation" or "lodging". + # """ + # adventure = self.get_object() + # target_type = request.data.get("target_type", "").lower() + + # if target_type not in ["transportation", "lodging"]: + # return Response( + # {"error": "Invalid target type. Must be 'transportation' or 'lodging'."}, + # status=400 + # ) + # if not adventure.collection: + # return Response( + # {"error": "Adventure must be part of a collection to be converted."}, + # status=400 + # ) + + # # Define the overlapping fields that both the Adventure and target models share. + # overlapping_fields = ["name", "description", "is_public", 'collection'] + + # # Gather the overlapping data from the adventure instance. + # conversion_data = {} + # for field in overlapping_fields: + # if hasattr(adventure, field): + # conversion_data[field] = getattr(adventure, field) + + # # Make sure to include the user reference + # conversion_data["user_id"] = adventure.user_id + + # # Convert the adventure instance within an atomic transaction. + # with transaction.atomic(): + # if target_type == "transportation": + # new_instance = Transportation.objects.create(**conversion_data) + # serializer = TransportationSerializer(new_instance) + # else: # target_type == "lodging" + # new_instance = Lodging.objects.create(**conversion_data) + # serializer = LodgingSerializer(new_instance) + + # # Optionally, delete the original adventure to avoid duplicates. + # adventure.delete() + + # return Response(serializer.data) diff --git a/frontend/src/lib/components/Avatar.svelte b/frontend/src/lib/components/Avatar.svelte index 2220e0f..dbf6b22 100644 --- a/frontend/src/lib/components/Avatar.svelte +++ b/frontend/src/lib/components/Avatar.svelte @@ -39,10 +39,10 @@
  • -
  • {#if user.is_staff}
  • {/if} +
  • diff --git a/frontend/src/lib/components/TransportationModal.svelte b/frontend/src/lib/components/TransportationModal.svelte index 8522dd5..9012dd9 100644 --- a/frontend/src/lib/components/TransportationModal.svelte +++ b/frontend/src/lib/components/TransportationModal.svelte @@ -94,6 +94,7 @@ 'User-Agent': `AdventureLog / ${appVersion} ` } }); + console.log(query); let data = await res.json(); return data; }; @@ -464,7 +465,7 @@ bind:value={starting_airport} name="starting_airport" class="input input-bordered w-full" - placeholder="Enter starting airport code (e.g., JFK)" + placeholder={$t('transportation.starting_airport_desc')} />