1
0
Fork 0
mirror of https://github.com/seanmorley15/AdventureLog.git synced 2025-07-22 14:29:36 +02:00

feat: enhance city and region visit tracking, update AdventureModal and serializers for improved data handling

This commit is contained in:
Sean Morley 2025-01-09 19:40:23 -05:00
parent 013a2cc751
commit de8764499b
4 changed files with 82 additions and 33 deletions

View file

@ -8,7 +8,7 @@ from django.db.models.functions import Lower
from rest_framework.response import Response
from .models import Adventure, Checklist, Collection, Transportation, Note, AdventureImage, Category
from django.core.exceptions import PermissionDenied
from worldtravel.models import VisitedRegion, Region, Country
from worldtravel.models import VisitedCity, VisitedRegion, Region, Country, City
from .serializers import AdventureImageSerializer, AdventureSerializer, CategorySerializer, CollectionSerializer, NoteSerializer, TransportationSerializer, ChecklistSerializer
from rest_framework.permissions import IsAuthenticated
from django.db.models import Q
@ -1159,41 +1159,48 @@ class ReverseGeocodeViewSet(viewsets.ViewSet):
Returns a dictionary containing the region name, country name, and ISO code if found.
"""
iso_code = None
town = None
city = None
county = None
town_city_or_county = None
display_name = None
country_code = None
city = None
# town = None
# city = None
# county = None
if 'address' in data.keys():
keys = data['address'].keys()
for key in keys:
if key.find("ISO") != -1:
iso_code = data['address'][key]
if 'town' in keys:
town = data['address']['town']
town_city_or_county = data['address']['town']
if 'county' in keys:
county = data['address']['county']
town_city_or_county = data['address']['county']
if 'city' in keys:
city = data['address']['city']
town_city_or_county = data['address']['city']
if not iso_code:
return {"error": "No region found"}
region = Region.objects.filter(id=iso_code).first()
visited_region = VisitedRegion.objects.filter(region=region, user_id=self.request.user).first()
is_visited = False
region_visited = False
city_visited = False
country_code = iso_code[:2]
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 town_city_or_county:
display_name = f"{town_city_or_county}, {region.name}, {country_code}"
city = City.objects.filter(name__contains=town_city_or_county, region=region).first()
visited_city = VisitedCity.objects.filter(city=city, user_id=self.request.user).first()
if visited_region:
is_visited = True
region_visited = True
if visited_city:
city_visited = True
if region:
return {"id": iso_code, "region": region.name, "country": region.country.name, "is_visited": is_visited, "display_name": display_name}
return {"region_id": iso_code, "region": region.name, "country": region.country.name, "region_visited": region_visited, "display_name": display_name, "city": city.name if city else None, "city_id": city.id if city else None, "city_visited": city_visited}
return {"error": "No region found"}
@action(detail=False, methods=['get'])