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