diff --git a/backend/server/worldtravel/urls.py b/backend/server/worldtravel/urls.py index 002a03f8..716c9627 100644 --- a/backend/server/worldtravel/urls.py +++ b/backend/server/worldtravel/urls.py @@ -2,18 +2,31 @@ from django.urls import include, path from rest_framework.routers import DefaultRouter -from .views import CountryViewSet, RegionViewSet, VisitedRegionViewSet, regions_by_country, visits_by_country, cities_by_region, VisitedCityViewSet, visits_by_region, globespin +from .views import ( + CountryViewSet, + RegionViewSet, + VisitedRegionViewSet, + regions_by_country, + visits_by_country, + cities_by_region, + VisitedCityViewSet, + visits_by_region, +) + router = DefaultRouter() -router.register(r'countries', CountryViewSet, basename='countries') -router.register(r'regions', RegionViewSet, basename='regions') -router.register(r'visitedregion', VisitedRegionViewSet, basename='visitedregion') -router.register(r'visitedcity', VisitedCityViewSet, basename='visitedcity') +router.register(r"countries", CountryViewSet, basename="countries") +router.register(r"regions", RegionViewSet, basename="regions") +router.register(r"visitedregion", VisitedRegionViewSet, basename="visitedregion") +router.register(r"visitedcity", VisitedCityViewSet, basename="visitedcity") urlpatterns = [ - path('', include(router.urls)), - path('/regions/', regions_by_country, name='regions-by-country'), - path('/visits/', visits_by_country, name='visits-by-country'), - path('regions//cities/', cities_by_region, name='cities-by-region'), - path('regions//cities/visits/', visits_by_region, name='visits-by-region'), - path('globespin/', globespin, name='globespin'), + path("", include(router.urls)), + path("/regions/", regions_by_country, name="regions-by-country"), + path("/visits/", visits_by_country, name="visits-by-country"), + path("regions//cities/", cities_by_region, name="cities-by-region"), + path( + "regions//cities/visits/", + visits_by_region, + name="visits-by-region", + ), ] diff --git a/backend/server/worldtravel/views.py b/backend/server/worldtravel/views.py index baa604c7..89bec7de 100644 --- a/backend/server/worldtravel/views.py +++ b/backend/server/worldtravel/views.py @@ -1,6 +1,12 @@ from django.shortcuts import get_object_or_404 from .models import Country, Region, VisitedRegion, City, VisitedCity -from .serializers import CitySerializer, CountrySerializer, RegionSerializer, VisitedRegionSerializer, VisitedCitySerializer +from .serializers import ( + CitySerializer, + CountrySerializer, + RegionSerializer, + VisitedRegionSerializer, + VisitedCitySerializer, +) from rest_framework import viewsets, status from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response @@ -8,15 +14,17 @@ from rest_framework.decorators import api_view, permission_classes, action from django.contrib.gis.geos import Point from adventures.models import Location -@api_view(['GET']) + +@api_view(["GET"]) @permission_classes([IsAuthenticated]) def regions_by_country(request, country_code): country = get_object_or_404(Country, country_code=country_code) - regions = Region.objects.filter(country=country).order_by('name') + regions = Region.objects.filter(country=country).order_by("name") serializer = RegionSerializer(regions, many=True) return Response(serializer.data) -@api_view(['GET']) + +@api_view(["GET"]) @permission_classes([IsAuthenticated]) def visits_by_country(request, country_code): country = get_object_or_404(Country, country_code=country_code) @@ -24,15 +32,17 @@ def visits_by_country(request, country_code): serializer = VisitedRegionSerializer(visits, many=True) return Response(serializer.data) -@api_view(['GET']) + +@api_view(["GET"]) @permission_classes([IsAuthenticated]) def cities_by_region(request, region_id): region = get_object_or_404(Region, id=region_id) - cities = City.objects.filter(region=region).order_by('name') + cities = City.objects.filter(region=region).order_by("name") serializer = CitySerializer(cities, many=True) return Response(serializer.data) -@api_view(['GET']) + +@api_view(["GET"]) @permission_classes([IsAuthenticated]) def visits_by_region(request, region_id): region = get_object_or_404(Region, id=region_id) @@ -40,122 +50,127 @@ def visits_by_region(request, region_id): serializer = VisitedCitySerializer(visits, many=True) return Response(serializer.data) -# view called spin the globe that return a random country, a random region in that country and a random city in that region -@api_view(['GET']) -@permission_classes([IsAuthenticated]) -def globespin(request): - country = Country.objects.order_by('?').first() - data = { - "country": CountrySerializer(country).data, - } - - regions = Region.objects.filter(country=country) - if regions.exists(): - region = regions.order_by('?').first() - data["region"] = RegionSerializer(region).data - - cities = City.objects.filter(region=region) - if cities.exists(): - city = cities.order_by('?').first() - data["city"] = CitySerializer(city).data - - return Response(data) class CountryViewSet(viewsets.ReadOnlyModelViewSet): - queryset = Country.objects.all().order_by('name') + queryset = Country.objects.all().order_by("name") serializer_class = CountrySerializer permission_classes = [IsAuthenticated] - @action(detail=False, methods=['get']) + @action(detail=False, methods=["get"]) def check_point_in_region(self, request): - lat = float(request.query_params.get('lat')) - lon = float(request.query_params.get('lon')) + lat = float(request.query_params.get("lat")) + lon = float(request.query_params.get("lon")) point = Point(lon, lat, srid=4326) region = Region.objects.filter(geometry__contains=point).first() if region: - return Response({'in_region': True, 'region_name': region.name, 'region_id': region.id}) + return Response( + {"in_region": True, "region_name": region.name, "region_id": region.id} + ) else: - return Response({'in_region': False}) + return Response({"in_region": False}) - @action(detail=False, methods=['post']) + @action(detail=False, methods=["post"]) def region_check_all_adventures(self, request): - adventures = Location.objects.filter(user=request.user.id, type='visited') + adventures = Location.objects.filter(user=request.user.id, type="visited") count = 0 for adventure in adventures: if adventure.latitude is not None and adventure.longitude is not None: try: - point = Point(float(adventure.longitude), float(adventure.latitude), srid=4326) + point = Point( + float(adventure.longitude), float(adventure.latitude), srid=4326 + ) region = Region.objects.filter(geometry__contains=point).first() if region: - if not VisitedRegion.objects.filter(user=request.user.id, region=region).exists(): - VisitedRegion.objects.create(user=request.user, region=region) + if not VisitedRegion.objects.filter( + user=request.user.id, region=region + ).exists(): + VisitedRegion.objects.create( + user=request.user, region=region + ) count += 1 except Exception as e: print(f"Error processing adventure {adventure.id}: {e}") continue - return Response({'regions_visited': count}) + return Response({"regions_visited": count}) + class RegionViewSet(viewsets.ReadOnlyModelViewSet): queryset = Region.objects.all() serializer_class = RegionSerializer permission_classes = [IsAuthenticated] + class VisitedRegionViewSet(viewsets.ModelViewSet): serializer_class = VisitedRegionSerializer permission_classes = [IsAuthenticated] def get_queryset(self): return VisitedRegion.objects.filter(user=self.request.user.id) - + def perform_create(self, serializer): serializer.save(user=self.request.user) def create(self, request, *args, **kwargs): - request.data['user'] = request.user - if VisitedRegion.objects.filter(user=request.user.id, region=request.data['region']).exists(): + request.data["user"] = request.user + if VisitedRegion.objects.filter( + user=request.user.id, region=request.data["region"] + ).exists(): return Response({"error": "Region already visited by user."}, status=400) serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) self.perform_create(serializer) headers = self.get_success_headers(serializer.data) - return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) - + return Response( + serializer.data, status=status.HTTP_201_CREATED, headers=headers + ) + def destroy(self, request, **kwargs): - region = get_object_or_404(Region, id=kwargs['pk']) - visited_region = VisitedRegion.objects.filter(user=request.user.id, region=region) + region = get_object_or_404(Region, id=kwargs["pk"]) + visited_region = VisitedRegion.objects.filter( + user=request.user.id, region=region + ) if visited_region.exists(): visited_region.delete() return Response(status=status.HTTP_204_NO_CONTENT) else: - return Response({"error": "Visited region not found."}, status=status.HTTP_404_NOT_FOUND) - + return Response( + {"error": "Visited region not found."}, status=status.HTTP_404_NOT_FOUND + ) + + class VisitedCityViewSet(viewsets.ModelViewSet): serializer_class = VisitedCitySerializer permission_classes = [IsAuthenticated] def get_queryset(self): return VisitedCity.objects.filter(user=self.request.user.id) - + def perform_create(self, serializer): serializer.save(user=self.request.user) def create(self, request, *args, **kwargs): - request.data['user'] = request.user + request.data["user"] = request.user serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) self.perform_create(serializer) # Ensure a VisitedRegion exists for the city - region = serializer.validated_data['city'].region - if not VisitedRegion.objects.filter(user=request.user.id, region=region).exists(): + region = serializer.validated_data["city"].region + if not VisitedRegion.objects.filter( + user=request.user.id, region=region + ).exists(): VisitedRegion.objects.create(user=request.user, region=region) headers = self.get_success_headers(serializer.data) - return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) - + return Response( + serializer.data, status=status.HTTP_201_CREATED, headers=headers + ) + def destroy(self, request, **kwargs): - city = get_object_or_404(City, id=kwargs['pk']) + city = get_object_or_404(City, id=kwargs["pk"]) visited_city = VisitedCity.objects.filter(user=request.user.id, city=city) if visited_city.exists(): visited_city.delete() return Response(status=status.HTTP_204_NO_CONTENT) else: - return Response({"error": "Visited city not found."}, status=status.HTTP_404_NOT_FOUND) + return Response( + {"error": "Visited city not found."}, status=status.HTTP_404_NOT_FOUND + ) diff --git a/frontend/src/locales/ar.json b/frontend/src/locales/ar.json index 1b15972a..2de40753 100644 --- a/frontend/src/locales/ar.json +++ b/frontend/src/locales/ar.json @@ -1049,21 +1049,9 @@ "visit_remove_failed": "فشل في إزالة الزيارة", "visit_to": "زيارة", "getting_location_details": "الحصول على تفاصيل الموقع", - "cities_available": "المدن المتاحة", - "destination_revealed": "كشفت الوجهة!", - "dive_deeper": "الغوص أعمق", - "exploration_progress": "تقدم الاستكشاف", "explore_country": "استكشف البلد", - "globe_spin_error_desc": "خطأ جلب بيانات الدوران العالمي", - "hide_globe_spin": "إخفاء الدوران العالمي", "in": "في", - "loading_globe_spin": "تحميل الكرة الأرضية", - "no_globe_spin_data": "لا توجد بيانات تدور حول العالم", - "show_globe_spin": "عرض Globe Spin", - "spin_again": "تدور مرة أخرى", - "spinning_globe": "كرة الغزل", "try_again": "حاول ثانية", - "your_random_adventure_awaits": "مغامرتك العشوائية تنتظر!", "about_country": "حول البلد", "about_region": "حول المنطقة", "show_less": "عرض أقل", diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index 0f9b2df1..bd746992 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -573,21 +573,9 @@ "total_countries": "Länder gesamt", "total_regions": "Regionen gesamt", "getting_location_details": "Erhalten von Standortdetails", - "cities_available": "verfügbare Städte", - "destination_revealed": "Ziel enthüllt!", - "dive_deeper": "tiefer Tauchen", - "exploration_progress": "Explorationsfortschritt", "explore_country": "Land erkunden", - "globe_spin_error_desc": "Fehler beim Abrufen von Globus-Drehung-Daten", - "hide_globe_spin": "Globusdrehung verstecken", "in": "in", - "loading_globe_spin": "Globusdrehung wird geladen", - "no_globe_spin_data": "Keine Globus-Drehung-Daten", - "show_globe_spin": "Globus Drehung anzeigen", - "spin_again": "Nochmal drehen", - "spinning_globe": "Drehender Globus", "try_again": "Versuchen Sie es erneut", - "your_random_adventure_awaits": "Ihr zufälliges Abenteuer wartet!", "about_country": "Über Land", "about_region": "Über die Region", "show_less": "Weniger anzeigen", diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 2487d97b..d4774158 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -594,21 +594,9 @@ "total_cities": "Total Cities", "region_completed": "Region completed", "getting_location_details": "Getting location details", - "hide_globe_spin": "Hide Globe Spin", - "show_globe_spin": "Show Globe Spin", - "loading_globe_spin": "Loading Globe Spin", - "spinning_globe": "Spinning Globe", - "destination_revealed": "Destination Revealed!", - "your_random_adventure_awaits": "Your Random Adventure Awaits!", - "exploration_progress": "Exploration Progress", - "dive_deeper": "Dive Deeper", - "cities_available": "Cities Available", "in": "in", "explore_country": "Explore Country", - "spin_again": "Spin Again", - "globe_spin_error_desc": "Error fetching globe spin data", "try_again": "Try Again", - "no_globe_spin_data": "No Globe Spin Data", "show_less": "Show Less", "show_more": "Show More", "about_country": "About Country", diff --git a/frontend/src/locales/es.json b/frontend/src/locales/es.json index 7d3eb704..1cb8fe5a 100644 --- a/frontend/src/locales/es.json +++ b/frontend/src/locales/es.json @@ -544,21 +544,9 @@ "region_completed": "Región completada", "total_cities": "Ciudades totales", "getting_location_details": "Obtener detalles de ubicación", - "cities_available": "Ciudades disponibles", - "destination_revealed": "¡Destino revelado!", - "dive_deeper": "Sumergirse", - "exploration_progress": "Progreso de exploración", "explore_country": "Explorar el país", - "globe_spin_error_desc": "Error al obtener datos de giro global", - "hide_globe_spin": "Ocultar giro global", "in": "en", - "loading_globe_spin": "Cargando giro global", - "no_globe_spin_data": "Sin datos de giro de globo", - "show_globe_spin": "Show Globe Spin", - "spin_again": "Girar de nuevo", - "spinning_globe": "Globo hilado", "try_again": "Intentar otra vez", - "your_random_adventure_awaits": "¡Tu aventura aleatoria te espera!", "about_country": "Acerca del país", "about_region": "Acerca de la región", "show_less": "Mostrar menos", diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json index ebe35a81..f343649e 100644 --- a/frontend/src/locales/fr.json +++ b/frontend/src/locales/fr.json @@ -573,21 +573,9 @@ "total_countries": "Total des pays", "total_regions": "Régions totales", "getting_location_details": "Obtenir les détails de l'emplacement", - "cities_available": "Villes disponibles", - "destination_revealed": "Destination révélée!", - "dive_deeper": "Plonger plus profondément", - "exploration_progress": "Progrès de l'exploration", "explore_country": "Explorer le pays", - "globe_spin_error_desc": "Erreur pour récupérer les données de spin globe", - "hide_globe_spin": "Hide Globe Spin", "in": "dans", - "loading_globe_spin": "Chargement du globe Spin", - "no_globe_spin_data": "Pas de données de spin globe", - "show_globe_spin": "Montrer le spin au globe", - "spin_again": "Remonter", - "spinning_globe": "Globe de rotation", "try_again": "Essayer à nouveau", - "your_random_adventure_awaits": "Votre aventure aléatoire vous attend!", "about_country": "À propos du pays", "about_region": "À propos de la région", "show_less": "Afficher moins", diff --git a/frontend/src/locales/hu.json b/frontend/src/locales/hu.json index 3d94c2a4..5eaa5e22 100644 --- a/frontend/src/locales/hu.json +++ b/frontend/src/locales/hu.json @@ -544,21 +544,9 @@ "total_cities": "Összes város", "region_completed": "Régió teljesítve", "getting_location_details": "Helyadatok lekérése", - "hide_globe_spin": "Földgömb forgás elrejtése", - "show_globe_spin": "Földgömb forgás megjelenítése", - "loading_globe_spin": "Földgömb forgás betöltése", - "spinning_globe": "Forgó földgömb", - "destination_revealed": "Úticél felfedve!", - "your_random_adventure_awaits": "A véletlenszerű kalandod vár rád!", - "exploration_progress": "Felfedezés előrehaladása", - "dive_deeper": "Merülj mélyebbre", - "cities_available": "Elérhető városok", "in": "itt:", "explore_country": "Ország felfedezése", - "spin_again": "Forgatás újra", - "globe_spin_error_desc": "Hiba történt a földgömb adatainak lekérésekor", "try_again": "Próbáld újra", - "no_globe_spin_data": "Nincsenek földgömb adatok", "about_country": "Országról", "about_region": "A régióról", "show_less": "Mutass kevesebbet", diff --git a/frontend/src/locales/it.json b/frontend/src/locales/it.json index 9ed41b37..73bb8f17 100644 --- a/frontend/src/locales/it.json +++ b/frontend/src/locales/it.json @@ -573,21 +573,9 @@ "total_countries": "Paesi totali", "total_regions": "Regioni totali", "getting_location_details": "Ottenere dettagli sulla posizione", - "cities_available": "Città disponibili", - "destination_revealed": "Destinazione rivelata!", - "dive_deeper": "Immergersi più in profondità", - "exploration_progress": "Progressi di esplorazione", "explore_country": "Esplora il paese", - "globe_spin_error_desc": "Errore che recupera i dati di spin Globe", - "hide_globe_spin": "Nascondi lo spin di globo", "in": "In", - "loading_globe_spin": "Caricamento di rotazione del globo", - "no_globe_spin_data": "Nessun dati di spin Globe", - "show_globe_spin": "Mostra lo spin globo", - "spin_again": "Girare di nuovo", - "spinning_globe": "Globe rotante", "try_again": "Riprova", - "your_random_adventure_awaits": "La tua avventura casuale ti aspetta!", "about_country": "Informazioni sul paese", "about_region": "A proposito di Regione", "show_less": "Mostra meno", diff --git a/frontend/src/locales/ja.json b/frontend/src/locales/ja.json index 68ff8ac4..78d560e8 100644 --- a/frontend/src/locales/ja.json +++ b/frontend/src/locales/ja.json @@ -1049,21 +1049,9 @@ "visit_remove_failed": "訪問を削除できませんでした", "visit_to": "訪問", "getting_location_details": "場所の詳細を取得します", - "cities_available": "利用可能な都市", - "destination_revealed": "目的地が明らかに!", - "dive_deeper": "より深く潜ります", - "exploration_progress": "探索の進行", "explore_country": "国を探索します", - "globe_spin_error_desc": "グローブスピンデータの取得エラー", - "hide_globe_spin": "グローブスピンを隠します", "in": "で", - "loading_globe_spin": "グローブスピンのロード", - "no_globe_spin_data": "グローブスピンデータはありません", - "show_globe_spin": "グローブスピンを表示します", - "spin_again": "もう一度スピンします", - "spinning_globe": "スピニンググローブ", "try_again": "もう一度やり直してください", - "your_random_adventure_awaits": "あなたのランダムな冒険が待っています!", "about_country": "国について", "about_region": "地域について", "show_less": "表示を減らす", diff --git a/frontend/src/locales/ko.json b/frontend/src/locales/ko.json index a2549a6d..ad165977 100644 --- a/frontend/src/locales/ko.json +++ b/frontend/src/locales/ko.json @@ -973,21 +973,9 @@ "total_countries": "총 국가", "total_regions": "총 지역", "getting_location_details": "위치 세부 정보 얻기", - "dive_deeper": "더 깊이 다이빙하십시오", - "exploration_progress": "탐사 진행", "explore_country": "국가를 탐험하십시오", - "globe_spin_error_desc": "오류 페치 글로브 스핀 데이터", - "hide_globe_spin": "글로브 스핀을 숨기십시오", "in": "~에", - "loading_globe_spin": "로드 글로브 스핀", - "no_globe_spin_data": "글로브 스핀 데이터가 없습니다", - "show_globe_spin": "글로브 스핀을 보여주십시오", - "spin_again": "다시 회전하십시오", - "spinning_globe": "회전하는 글로브", "try_again": "다시 시도하십시오", - "your_random_adventure_awaits": "당신의 임의의 모험이 기다리고 있습니다!", - "cities_available": "이용 가능", - "destination_revealed": "목적지 공개!", "about_country": "국가 소개", "about_region": "지역정보", "show_less": "간략히 표시", diff --git a/frontend/src/locales/nl.json b/frontend/src/locales/nl.json index b26d43e7..2504f809 100644 --- a/frontend/src/locales/nl.json +++ b/frontend/src/locales/nl.json @@ -573,21 +573,9 @@ "total_countries": "Totale landen", "total_regions": "Totaal aantal regio's", "getting_location_details": "Locatiegegevens krijgen", - "cities_available": "Steden beschikbaar", - "destination_revealed": "Bestemming onthuld!", - "dive_deeper": "Duik dieper", - "exploration_progress": "Verkennings voortgang", "explore_country": "Verken het land", - "globe_spin_error_desc": "Fout bij het ophalen van globe spin -gegevens", - "hide_globe_spin": "Globe spin verbergen", "in": "in", - "loading_globe_spin": "Globe spin laden", - "no_globe_spin_data": "Geen Globe spin -gegevens", - "show_globe_spin": "Toon Globe Spin", - "spin_again": "Weer spinnen", - "spinning_globe": "Spinnende bol", "try_again": "Probeer het opnieuw", - "your_random_adventure_awaits": "Je willekeurige avontuur wacht!", "about_country": "Over land", "about_region": "Over Regio", "show_less": "Toon minder", diff --git a/frontend/src/locales/no.json b/frontend/src/locales/no.json index f84daa49..8b602af5 100644 --- a/frontend/src/locales/no.json +++ b/frontend/src/locales/no.json @@ -544,21 +544,9 @@ "total_countries": "Totalt land", "total_regions": "Totale regioner", "getting_location_details": "Få stedsdetaljer", - "cities_available": "Byer tilgjengelig", - "destination_revealed": "Destinasjon avslørt!", - "dive_deeper": "Dykk dypere", - "exploration_progress": "Utforskningsfremgang", "explore_country": "Utforsk landet", - "globe_spin_error_desc": "Feilhåndtering av klode -spinndata", - "hide_globe_spin": "Skjul klode spinn", "in": "i", - "loading_globe_spin": "Laster klode spinn", - "no_globe_spin_data": "Ingen klode spinndata", - "show_globe_spin": "Vis Globe Spin", - "spin_again": "Spinn igjen", - "spinning_globe": "Spinnende klode", "try_again": "Prøv igjen", - "your_random_adventure_awaits": "Ditt tilfeldige eventyr venter!", "about_country": "Om landet", "about_region": "Om regionen", "show_less": "Vis mindre", diff --git a/frontend/src/locales/pl.json b/frontend/src/locales/pl.json index 55b80809..d169df87 100644 --- a/frontend/src/locales/pl.json +++ b/frontend/src/locales/pl.json @@ -544,21 +544,9 @@ "all_regions": "Wszystkie regiony", "cities_in": "Miasta w", "getting_location_details": "Uzyskanie szczegółów lokalizacji", - "cities_available": "Dostępne miasta", - "destination_revealed": "Ujawnione miejsce docelowe!", - "dive_deeper": "Nurkuj głębiej", - "exploration_progress": "Postęp eksploracyjny", "explore_country": "Poznaj kraj", - "globe_spin_error_desc": "Błąd przyciąganie danych spinowych globe", - "hide_globe_spin": "Ukryj globe spin", "in": "W", - "loading_globe_spin": "Ładowanie globowego spinu", - "no_globe_spin_data": "Brak danych spinowych globe", - "show_globe_spin": "Pokaż globe spin", - "spin_again": "Obrócić ponownie", - "spinning_globe": "Spinning Globe", "try_again": "Spróbuj ponownie", - "your_random_adventure_awaits": "Twoja przypadkowa przygoda czeka!", "about_country": "O kraju", "about_region": "O Regionie", "show_less": "Pokaż mniej", diff --git a/frontend/src/locales/pt-br.json b/frontend/src/locales/pt-br.json index 4b4fbdb0..ea0fd5c1 100644 --- a/frontend/src/locales/pt-br.json +++ b/frontend/src/locales/pt-br.json @@ -1051,23 +1051,11 @@ "visit_to": "Visita a", "about_country": "Sobre o país", "about_region": "Sobre a região", - "cities_available": "Cidades disponíveis", - "destination_revealed": "Destino revelado!", - "dive_deeper": "Mergulhe mais fundo", - "exploration_progress": "Progresso da Exploração", "explore_country": "Explorar o país", - "globe_spin_error_desc": "Erro ao buscar dados de rotação do globo", - "hide_globe_spin": "Ocultar rotação do globo", "in": "em", - "loading_globe_spin": "Carregando Globo Spin", - "no_globe_spin_data": "Sem dados de rotação do globo", - "show_globe_spin": "Mostrar rotação do globo", "show_less": "Mostrar menos", "show_more": "Mostrar mais", - "spin_again": "Gire novamente", - "spinning_globe": "Globo giratório", "try_again": "Tente novamente", - "your_random_adventure_awaits": "Sua aventura aleatória o aguarda!", "all_locations_visited": "Todos os locais visitados!" }, "collections": { diff --git a/frontend/src/locales/ro.json b/frontend/src/locales/ro.json index 3c0cf7e7..82509300 100644 --- a/frontend/src/locales/ro.json +++ b/frontend/src/locales/ro.json @@ -1090,7 +1090,6 @@ "all_regions": "Toate Regiunile", "available_to_explore": "Disponibil pentru a explora", "cities": "orase", - "cities_available": "Orașe disponibile", "cities_in": "Orașe în", "clear_all": "Ștergeți tot", "clear_all_filters": "Ștergeți toate filtrele", @@ -1099,29 +1098,22 @@ "countries": "ţări", "country_completed": "Țara finalizată", "country_list": "Lista țărilor", - "destination_revealed": "Destinația dezvăluită!", - "dive_deeper": "Scufundați mai adânc", - "exploration_progress": "Progresul de explorare", "explore_country": "Explorează țara", "failed_to_mark_visit": "Nu s-a marcat vizita la", "failed_to_remove_visit": "Nu s-a putut elimina vizita la", "filter_by": "Filtrați după", "filter_by_region": "Filtrați după regiune", "getting_location_details": "Obținerea detaliilor locației", - "globe_spin_error_desc": "Eroare la preluarea datelor de rotație a globului", - "hide_globe_spin": "Ascunde Globe Spin", "hide_map": "Ascunde harta", "hide_map_labels": "Ascundeți etichetele hărții", "in": "în", "interactive_map": "Hartă interactivă", - "loading_globe_spin": "Se încarcă Globe Spin", "marked_visited": "marcat ca vizitat", "no_cities_found": "Nu s-au găsit orașe", "no_countries_found": "Nu au fost găsite țări", "no_countries_found_desc": "Încercați să ajustați termenii sau filtrele de căutare pentru a găsi țările pe care le căutați.", "no_country_data_available": "Nu sunt disponibile date despre țară", "no_country_data_available_desc": "Vă rugăm să verificați documentația pentru actualizarea datelor din regiune.", - "no_globe_spin_data": "Fără date de rotație a globului", "no_regions_found": "Nu au fost găsite regiuni", "of": "de", "partial": "Parţial", @@ -1132,20 +1124,16 @@ "regions_in": "Regiunile din", "remaining": "Rămânând", "removed": "îndepărtat", - "show_globe_spin": "Arată Globe Spin", "show_less": "Arată mai puțin", "show_map": "Afișați harta", "show_map_labels": "Afișați etichetele hărții", "show_more": "Arată mai mult", - "spin_again": "Învârte din nou", - "spinning_globe": "Globul care se învârte", "total_cities": "Total orașe", "total_countries": "Total Țări", "total_regions": "Total regiuni", "try_again": "Încearcă din nou", "view_cities": "Vedeți orașele", "visit_remove_failed": "Nu s-a eliminat vizita", - "visit_to": "Vizită la", - "your_random_adventure_awaits": "Aventura ta aleatorie vă așteaptă!" + "visit_to": "Vizită la" } } diff --git a/frontend/src/locales/ru.json b/frontend/src/locales/ru.json index 66b7a5ec..edf4c74a 100644 --- a/frontend/src/locales/ru.json +++ b/frontend/src/locales/ru.json @@ -544,21 +544,9 @@ "total_countries": "Всего стран", "total_regions": "Всего регионов", "getting_location_details": "Получение деталей локации", - "cities_available": "Города доступны", - "destination_revealed": "Открыто место!", - "dive_deeper": "Погрузитесь глубже", - "exploration_progress": "Прогресс исследования", "explore_country": "Исследуйте страну", - "globe_spin_error_desc": "Ошибка извлечения данных спиновых глобусов", - "hide_globe_spin": "Скрыть глобус спин", "in": "в", - "loading_globe_spin": "Загрузка глобуса спина", - "no_globe_spin_data": "Нет данных о вращении Globe", - "show_globe_spin": "Показать Globe Spin", - "spin_again": "Снова спите", - "spinning_globe": "Вращающийся глобус", "try_again": "Попробуйте еще раз", - "your_random_adventure_awaits": "Ваше случайное приключение ждет!", "about_country": "О стране", "about_region": "О регионе", "show_less": "Показать меньше", diff --git a/frontend/src/locales/sk.json b/frontend/src/locales/sk.json index 08d5a2d6..5f47e191 100644 --- a/frontend/src/locales/sk.json +++ b/frontend/src/locales/sk.json @@ -544,20 +544,8 @@ "total_cities": "Celkový počet miest", "region_completed": "Región dokončený", "getting_location_details": "Získavajú sa detaily miesta", - "cities_available": "Mestá k dispozícii", - "destination_revealed": "Destinácia odhalená!", - "dive_deeper": "Ponorte sa hlbšie", - "exploration_progress": "Pokrok v preskúmavaní", "explore_country": "Preskúmať krajinu", - "globe_spin_error_desc": "Chyba načítania náhodnej destinácie", - "loading_globe_spin": "Načítavanie náhodnej destinácie", - "no_globe_spin_data": "Žiadne údaje náhodnej destinácie", - "show_globe_spin": "Zobraziť náhodnú destináciu", - "spin_again": "Iná náhodná destinácia", - "spinning_globe": "Glóbus sa točí", "try_again": "Skúsiť znova", - "your_random_adventure_awaits": "Čaká vaše náhodné dobrodružstvo!", - "hide_globe_spin": "Skryť náhodnú destináciu", "in": "v", "about_country": "O krajine", "about_region": "O regióne", diff --git a/frontend/src/locales/sv.json b/frontend/src/locales/sv.json index 475847a4..16c1508b 100644 --- a/frontend/src/locales/sv.json +++ b/frontend/src/locales/sv.json @@ -544,21 +544,9 @@ "total_countries": "Totala länder", "total_regions": "Totala regioner", "getting_location_details": "Få platsinformation", - "cities_available": "Städer tillgängliga", - "destination_revealed": "Destination avslöjad!", - "dive_deeper": "Dyk djupare", - "exploration_progress": "Undersökningens framsteg", "explore_country": "Utforska land", - "globe_spin_error_desc": "Fel som hämtar Globe Spin Data", - "hide_globe_spin": "Dölj jordklot", "in": "i", - "loading_globe_spin": "Loading Globe Spin", - "no_globe_spin_data": "Inga Globe Spin -data", - "show_globe_spin": "Show Globe Spin", - "spin_again": "Snurra igen", - "spinning_globe": "Snurrande jordklot", "try_again": "Försök igen", - "your_random_adventure_awaits": "Ditt slumpmässiga äventyr väntar!", "about_country": "Om Country", "about_region": "Om regionen", "show_less": "Visa mindre", diff --git a/frontend/src/locales/tr.json b/frontend/src/locales/tr.json index c59aad53..e810f01a 100644 --- a/frontend/src/locales/tr.json +++ b/frontend/src/locales/tr.json @@ -544,21 +544,9 @@ "total_cities": "Toplam Şehir", "region_completed": "Bölge Tamamlandı", "getting_location_details": "Konum detayları alınıyor", - "hide_globe_spin": "Küre Dönüşünü Gizle", - "show_globe_spin": "Küre Dönüşünü Göster", - "loading_globe_spin": "Küre Dönüşü Yükleniyor", - "spinning_globe": "Dönen Küre", - "destination_revealed": "Hedef Keşfedildi!", - "your_random_adventure_awaits": "Rastgele Maceran Seni Bekliyor!", - "exploration_progress": "Keşif İlerlemesi", - "dive_deeper": "Daha Fazlasını Keşfet", - "cities_available": "Mevcut Şehirler", "in": "içinde", "explore_country": "Ülkeyi Keşfet", - "spin_again": "Tekrar Döndür", - "globe_spin_error_desc": "Küre dönüşü verisi alınamadı", "try_again": "Tekrar Deneyin", - "no_globe_spin_data": "Küre Dönüşü Verisi Yok", "about_country": "Ülke Hakkında", "about_region": "Bölge Hakkında", "show_less": "Daha Az Göster", diff --git a/frontend/src/locales/uk.json b/frontend/src/locales/uk.json index 784fe253..88a2cf41 100644 --- a/frontend/src/locales/uk.json +++ b/frontend/src/locales/uk.json @@ -1011,7 +1011,6 @@ "all_regions": "Всі регіони", "available_to_explore": "Доступний для дослідження", "cities": "міст", - "cities_available": "Доступні міста", "cities_in": "Міста в", "clear_all": "Очистити все", "clear_all_filters": "Очистити всі фільтри", @@ -1020,29 +1019,22 @@ "countries": "країни", "country_completed": "Країна завершена", "country_list": "Список країн", - "destination_revealed": "Пункт призначення відомий!", - "dive_deeper": "Пірни глибше", - "exploration_progress": "Хід розвідки", "explore_country": "Досліджуйте країну", "failed_to_mark_visit": "Не вдалося позначити відвідування", "failed_to_remove_visit": "Не вдалося видалити відвідування", "filter_by": "Фільтрувати за", "filter_by_region": "Фільтрувати за регіоном", "getting_location_details": "Отримання інформації про місцезнаходження", - "globe_spin_error_desc": "Помилка отримання даних обертання глобуса", - "hide_globe_spin": "Приховати обертання глобуса", "hide_map": "Приховати карту", "hide_map_labels": "Приховати мітки на карті", "in": "в", "interactive_map": "Інтерактивна карта", - "loading_globe_spin": "Обертання глобуса завантаження", "marked_visited": "позначено як відвідане", "no_cities_found": "Міста не знайдено", "no_countries_found": "Країни не знайдено", "no_countries_found_desc": "Спробуйте налаштувати пошукові терміни або фільтри, щоб знайти країни, які ви шукаєте.", "no_country_data_available": "Немає даних по країні", "no_country_data_available_desc": "Будь ласка, перевірте документацію щодо оновлення даних регіону.", - "no_globe_spin_data": "Немає даних обертання глобуса", "no_regions_found": "Регіонів не знайдено", "of": "з", "partial": "Частковий", @@ -1053,12 +1045,9 @@ "regions_in": "Регіони в", "remaining": "Залишилося", "removed": "видалено", - "show_globe_spin": "Показати обертання глобуса", "show_less": "Показати менше", "show_map": "Показати карту", "show_map_labels": "Показати мітки на карті", - "spin_again": "Знову обертання", - "spinning_globe": "Обертовий глобус", "total_cities": "Всього міст", "total_countries": "Всього країн", "total_regions": "Всього регіонів", @@ -1066,7 +1055,6 @@ "view_cities": "Переглянути міста", "visit_remove_failed": "Не вдалося видалити відвідування", "visit_to": "Візит до", - "your_random_adventure_awaits": "Ваша випадкова пригода чекає!", "show_more": "Показати Більше", "all_locations_visited": "Всі відвідані локації!" }, diff --git a/frontend/src/locales/zh.json b/frontend/src/locales/zh.json index 3cfe79d7..f8e922c8 100644 --- a/frontend/src/locales/zh.json +++ b/frontend/src/locales/zh.json @@ -570,21 +570,9 @@ "total_cities": "总城市", "total_countries": "总国家", "getting_location_details": "获取地点详细信息", - "cities_available": "可用的城市", - "destination_revealed": "目的地揭示了!", - "dive_deeper": "深入潜水", - "exploration_progress": "勘探进度", "explore_country": "探索国家", - "globe_spin_error_desc": "错误获取地球旋转数据", - "hide_globe_spin": "隐藏环球旋转", "in": "在", - "loading_globe_spin": "加载地球旋转", - "no_globe_spin_data": "没有地球旋转数据", - "show_globe_spin": "显示环球旋转", - "spin_again": "再次旋转", - "spinning_globe": "旋转地球", "try_again": "再试一次", - "your_random_adventure_awaits": "您的随机冒险在等待!", "about_country": "关于国家", "about_region": "关于地区", "show_less": "显示较少", diff --git a/frontend/src/routes/worldtravel/+page.svelte b/frontend/src/routes/worldtravel/+page.svelte index 25947852..bd9fe2e8 100644 --- a/frontend/src/routes/worldtravel/+page.svelte +++ b/frontend/src/routes/worldtravel/+page.svelte @@ -27,7 +27,6 @@ const allCountries: Country[] = data.props?.countries || []; let worldSubregions: string[] = []; let showMap: boolean = false; - let showGlobeSpin: boolean = false; let sidebarOpen = false; type VisitStatus = 'not_visited' | 'partial' | 'complete'; @@ -223,39 +222,6 @@ .filter((feature): feature is CountryFeature => feature !== null) }; - // when isGlobeSpin is enabled, fetch /api/globespin/ - type GlobeSpinData = { - country: { - flag_url: string; - name: string; - country_code: string; - num_visits: number; - subregion: string; - capital: string; - num_regions: number; - }; - region: { name: string; num_cities: number }; - city: { name: string; region_name: string }; - }; - let globeSpinData: GlobeSpinData | null = null; - let isLoadingGlobeSpin = false; - - async function fetchGlobeSpin() { - isLoadingGlobeSpin = true; - try { - const response = await fetch('/api/globespin/'); - if (response.ok) { - globeSpinData = await response.json(); - } else { - console.error('Failed to fetch globe spin data'); - } - } catch (error) { - console.error('Error fetching globe spin data:', error); - } finally { - isLoadingGlobeSpin = false; - } - } - function toggleSidebar() { sidebarOpen = !sidebarOpen; } @@ -350,25 +316,7 @@ {:else} - - {/if} - - - @@ -449,257 +397,6 @@ {/if} - - {#if showGlobeSpin} -
-
-
- {#if isLoadingGlobeSpin} - -
-
- -
-
- -
- -
-
-
- -
-
-
-
-
-

- {$t('worldtravel.spinning_globe') + '...'} -

-

- {$t('worldtravel.loading_globe_spin')} -

-
-
-
-
-
-
-
- {:else if globeSpinData} - -
-
-

- - {$t('worldtravel.destination_revealed')} - -

-

- {$t('worldtravel.your_random_adventure_awaits')} -

-
- - -
- -
-
- {globeSpinData.country.name} flag - -
-
- -
- {globeSpinData.country.country_code} -
- {#if globeSpinData.country.num_visits > 0} -
- - {$t('adventures.visited')} -
- {/if} -
- - -
-

- {globeSpinData.country.name} -

- -
-
- - {globeSpinData.country.subregion} -
- {#if globeSpinData.country.capital} -
- - {globeSpinData.country.capital} -
- {/if} -
- - -
-
- {$t('worldtravel.exploration_progress')} - - {globeSpinData.country.num_visits}/{globeSpinData.country.num_regions} - -
- -
- {Math.round( - (globeSpinData.country.num_visits / globeSpinData.country.num_regions) * - 100 - )}% explored -
-
-
-
- - - {#if globeSpinData.region || globeSpinData.city} -
-
- {$t('worldtravel.dive_deeper')} -
- -
- {#if globeSpinData.region} -
-
-

- - {$t('adventures.region')} -

-

{globeSpinData.region.name}

-

- {globeSpinData.region.num_cities} - {$t('worldtravel.cities_available')} -

-
-
- {/if} - - {#if globeSpinData.city} -
-
-

- - {$t('adventures.city')} -

-

{globeSpinData.city.name}

-

- {$t('worldtravel.in')} - {globeSpinData.city.region_name} -

-
-
- {/if} -
-
- {/if} - - -
- - - {$t('worldtravel.explore_country')} - - -
-
- {:else} - -
-
- -
-

- {$t('worldtravel.no_globe_spin_data')} -

-

- {$t('worldtravel.globe_spin_error_desc')} -

- -
- {/if} -
-
-
- {/if} -
{#if filteredCountries.length === 0} @@ -870,48 +567,3 @@
- -