From 66d6f1fdd578432c2b73c38355eb7a9a1b2a0438 Mon Sep 17 00:00:00 2001 From: "Rudy (zarya)" Date: Wed, 25 Jun 2025 17:41:01 +0200 Subject: [PATCH 1/3] Added a view for showing all available layers for all camps/teams/facilities --- src/maps/urls.py | 2 ++ src/maps/views.py | 44 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/maps/urls.py b/src/maps/urls.py index f00104982..e1d54fa04 100644 --- a/src/maps/urls.py +++ b/src/maps/urls.py @@ -7,6 +7,7 @@ from django.urls import re_path from .views import LayerGeoJSONView +from .views import LayerJsonView from .views import MapMarkerView from .views import MapProxyView @@ -14,6 +15,7 @@ urlpatterns = [ path("marker//", MapMarkerView.as_view(), name="marker"), + path("layers/", LayerJsonView.as_view(), name="layers_json"), path( "/", include( diff --git a/src/maps/views.py b/src/maps/views.py index 01e6334ef..df700ad44 100644 --- a/src/maps/views.py +++ b/src/maps/views.py @@ -12,9 +12,6 @@ from django.contrib import messages from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.gis.geos import Point -from django.utils.decorators import method_decorator -from django.views.decorators.cache import cache_page -from django.views.decorators.cache import cache_control from django.core.exceptions import BadRequest from django.core.exceptions import PermissionDenied from django.core.serializers import serialize @@ -27,6 +24,8 @@ from django.templatetags.static import static from django.urls import reverse from django.utils.decorators import method_decorator +from django.views.decorators.cache import cache_control +from django.views.decorators.cache import cache_page from django.views.decorators.csrf import csrf_exempt from django.views.generic import CreateView from django.views.generic import DeleteView @@ -123,6 +122,45 @@ def render_to_response(self, context: dict, **kwargs) -> TemplateResponse: ) +class LayerJsonView(JsonView): + """View for returning all available layers in json.""" + + def get_context_data(self, **kwargs) -> list: + """Return the GeoJSON Data to the client.""" + layers = [] + for layer in Layer.objects.filter(public=True): + url = reverse( + "maps:map_layer_geojson", + kwargs={"layer_slug": layer.slug}, + ) + layers.append( + { + "name": layer.name, + "team": layer.responsible_team.name if layer.responsible_team else "None", + "camp": layer.responsible_team.camp.slug if layer.responsible_team else "all", + "url": self.request.build_absolute_uri(url), + }, + ) + for facility_type in FacilityType.objects.all(): + url = reverse( + "facilities:facility_list_geojson", + kwargs={ + "camp_slug": facility_type.responsible_team.camp.slug, + "facility_type_slug": facility_type.slug, + }, + ) + layers.append( + { + "name": facility_type.name, + "team": facility_type.responsible_team.name, + "camp": facility_type.responsible_team.camp.slug, + "url": self.request.build_absolute_uri(url), + }, + ) + + return layers + + class MapView(CampViewMixin, TemplateView): """Global map view.""" From 60b4772387b6dca604c2f730275485b38b2b0255 Mon Sep 17 00:00:00 2001 From: "Rudy (zarya)" Date: Wed, 25 Jun 2025 17:49:54 +0200 Subject: [PATCH 2/3] Added tests --- src/maps/tests/test_views.py | 6 ++++++ src/maps/urls.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/maps/tests/test_views.py b/src/maps/tests/test_views.py index 38137e6d9..8f545fc94 100644 --- a/src/maps/tests/test_views.py +++ b/src/maps/tests/test_views.py @@ -176,6 +176,12 @@ def test_map_views(self) -> None: response = self.client.get(url) assert response.status_code == 200 + def test_map_layer_json_view(self) -> None: + """Test the map layers json view.""" + url = reverse("maps:map_layers_json") + response = self.client.get(url) + assert response.status_code == 200 + def test_marker_views(self) -> None: """Test the marker view.""" good = ["ffffff", "ffffff00"] diff --git a/src/maps/urls.py b/src/maps/urls.py index e1d54fa04..a6b8d73e5 100644 --- a/src/maps/urls.py +++ b/src/maps/urls.py @@ -15,7 +15,7 @@ urlpatterns = [ path("marker//", MapMarkerView.as_view(), name="marker"), - path("layers/", LayerJsonView.as_view(), name="layers_json"), + path("layers/", LayerJsonView.as_view(), name="map_layers_json"), path( "/", include( From 1991697ae2093351dafb0b9dfdeddd46cdf25135 Mon Sep 17 00:00:00 2001 From: "Rudy (zarya)" Date: Wed, 25 Jun 2025 20:11:24 +0200 Subject: [PATCH 3/3] Add layer type to output --- src/maps/views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/maps/views.py b/src/maps/views.py index df700ad44..589a7b23e 100644 --- a/src/maps/views.py +++ b/src/maps/views.py @@ -139,6 +139,7 @@ def get_context_data(self, **kwargs) -> list: "team": layer.responsible_team.name if layer.responsible_team else "None", "camp": layer.responsible_team.camp.slug if layer.responsible_team else "all", "url": self.request.build_absolute_uri(url), + "type": "layer", }, ) for facility_type in FacilityType.objects.all(): @@ -155,6 +156,7 @@ def get_context_data(self, **kwargs) -> list: "team": facility_type.responsible_team.name, "camp": facility_type.responsible_team.camp.slug, "url": self.request.build_absolute_uri(url), + "type": "facility", }, )