diff --git a/backend/server/adventures/serializers.py b/backend/server/adventures/serializers.py index 99cc6c7..4bf7e8c 100644 --- a/backend/server/adventures/serializers.py +++ b/backend/server/adventures/serializers.py @@ -45,18 +45,34 @@ class AdventureSerializer(serializers.ModelSerializer): def update(self, instance, validated_data): visits_data = validated_data.pop('visits', []) - instance = super().update(instance, validated_data) + + # Update Adventure fields + for attr, value in validated_data.items(): + setattr(instance, attr, value) + instance.save() + + # Get current visits + current_visits = instance.visits.all() + current_visit_ids = set(current_visits.values_list('id', flat=True)) # Update or create visits + updated_visit_ids = set() for visit_data in visits_data: - visit_id = visit_data.get('id', None) - if visit_id: - visit = Visit.objects.get(id=visit_id, adventure=instance) + visit_id = visit_data.get('id') + if visit_id and visit_id in current_visit_ids: + visit = current_visits.get(id=visit_id) for attr, value in visit_data.items(): setattr(visit, attr, value) visit.save() + updated_visit_ids.add(visit_id) else: - Visit.objects.create(adventure=instance, **visit_data) + # If no ID is provided or ID doesn't exist, create new visit + new_visit = Visit.objects.create(adventure=instance, **visit_data) + updated_visit_ids.add(new_visit.id) + + # Delete visits that are not in the updated data + visits_to_delete = current_visit_ids - updated_visit_ids + instance.visits.filter(id__in=visits_to_delete).delete() return instance diff --git a/backend/server/adventures/views.py b/backend/server/adventures/views.py index 0960b1c..7280c68 100644 --- a/backend/server/adventures/views.py +++ b/backend/server/adventures/views.py @@ -105,6 +105,9 @@ class AdventureViewSet(viewsets.ModelViewSet): @action(detail=False, methods=['get']) def filtered(self, request): types = request.query_params.get('types', '').split(',') + # handle case where types is all + if 'all' in types: + types = [t[0] for t in ADVENTURE_TYPES] valid_types = [t[0] for t in ADVENTURE_TYPES] types = [t for t in types if t in valid_types] diff --git a/frontend/src/lib/components/AdventureCard.svelte b/frontend/src/lib/components/AdventureCard.svelte index 293984c..2494ae3 100644 --- a/frontend/src/lib/components/AdventureCard.svelte +++ b/frontend/src/lib/components/AdventureCard.svelte @@ -32,16 +32,6 @@ let image_url: string | null = null; export let adventure: Adventure; - if (adventure.type == 'visited') { - keyword = 'Adventure'; - } else if (adventure.type == 'planned') { - keyword = 'Adventure'; - } else if (adventure.type == 'lodging') { - keyword = 'Lodging'; - } else if (adventure.type == 'dining') { - keyword = 'Dining'; - } - let activityTypes: string[] = []; // makes it reactivty to changes so it updates automatically $: { @@ -258,7 +248,7 @@ >Open Details {#if adventure.type == 'visited' && user?.pk == adventure.user_id} {/if} - - {#if adventure.collection && (adventure.type == 'visited' || adventure.type == 'planned') && user?.pk == adventure.user_id} + + {#if adventure.collection && user?.pk == adventure.user_id} {/if} - - {#if (adventure.collection && adventure.type == 'lodging') || adventure.type == 'dining'} - - {/if} {#if !adventure.collection} -