changeset 2912:93fa55bce126

Add utility function to get users area of responsibility
author Tom Gottfried <tom@intevation.de>
date Tue, 02 Apr 2019 19:25:17 +0200
parents a75c546ef498
children cf6f595af2cb
files pkg/imports/dma.go pkg/imports/fd.go pkg/imports/wa.go pkg/imports/wx.go schema/manage_users.sql schema/manage_users_tests.sql schema/run_tests.sh
diffstat 7 files changed, 49 insertions(+), 44 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/dma.go	Tue Apr 02 19:24:08 2019 +0200
+++ b/pkg/imports/dma.go	Tue Apr 02 19:25:17 2019 +0200
@@ -77,22 +77,16 @@
 const (
 	deleteDistanceMarksSQL = `
 WITH resp AS (
-  SELECT best_utm(area) AS t,
-         ST_Transform(area::geometry, best_utm(area)) AS a
-  FROM users.responsibility_areas
-  WHERE country = users.current_user_country()
+  SELECT users.current_user_area_utm() AS a
 )
 DELETE FROM waterway.distance_marks
 WHERE ST_Covers(
   (SELECT a FROM resp),
-  ST_Transform(geom::geometry, (SELECT t FROM resp)))
+  ST_Transform(geom::geometry, (SELECT ST_SRID(a) FROM resp)))
 `
 	insertDistanceMarksSQL = `
 WITH resp AS (
-  SELECT best_utm(area) AS t,
-         ST_Transform(area::geometry, best_utm(area)) AS a
-  FROM users.responsibility_areas
-  WHERE country = users.current_user_country()
+  SELECT users.current_user_area_utm() AS a
 )
 INSERT INTO waterway.distance_marks (geom, catdis)
 SELECT ST_Transform(clipped.geom, 4326)::geography, $3 FROM (
@@ -101,7 +95,7 @@
          (SELECT a FROM resp),
          ST_Transform(
            ST_GeomFromWKB($1, $2::integer),
-           (SELECT t FROM resp)
+           (SELECT ST_SRID(a) FROM resp)
          )
        )
      )).geom AS geom
--- a/pkg/imports/fd.go	Tue Apr 02 19:24:08 2019 +0200
+++ b/pkg/imports/fd.go	Tue Apr 02 19:25:17 2019 +0200
@@ -139,15 +139,12 @@
 
 	deleteFairwayDimensionSQL = `
 WITH resp AS (
-  SELECT best_utm(area) AS t,
-         ST_Transform(area::geometry, best_utm(area)) AS a
-  FROM users.responsibility_areas
-  WHERE country = users.current_user_country()
+  SELECT users.current_user_area_utm() AS a
 )
 DELETE FROM waterway.fairway_dimensions
 WHERE ST_Covers(
   (SELECT a FROM resp),
-  ST_Transform(area::geometry, (SELECT t FROM resp)))
+  ST_Transform(area::geometry, (SELECT ST_SRID(a) FROM resp)))
   AND staging_done
   AND level_of_service = $1::smallint`
 
@@ -155,10 +152,7 @@
 	// avoid errors due to reprojection.
 	insertFairwayDimensionSQL = `
 WITH resp AS (
-  SELECT best_utm(area) AS t,
-         ST_Transform(area::geometry, best_utm(area)) AS a
-  FROM users.responsibility_areas
-  WHERE country = users.current_user_country()
+  SELECT users.current_user_area_utm() AS a
 )
 INSERT INTO waterway.fairway_dimensions (area, level_of_service, min_width, max_width, min_depth, date_info, source_organization)
 SELECT ST_Transform(clipped.geom, 4326)::geography, $3, $4, $5, $6, $7, $8 FROM (
@@ -167,7 +161,7 @@
          (SELECT ST_Buffer(a, -0.0001) FROM resp),
          ST_MakeValid(ST_Transform(
            ST_GeomFromWKB($1, $2::integer),
-           (SELECT t FROM resp)
+           (SELECT ST_SRID(a) FROM resp)
          ))
        )
      )).geom AS geom
--- a/pkg/imports/wa.go	Tue Apr 02 19:24:08 2019 +0200
+++ b/pkg/imports/wa.go	Tue Apr 02 19:25:17 2019 +0200
@@ -81,22 +81,16 @@
 const (
 	deleteWaterwayAreaSQL = `
 WITH resp AS (
-  SELECT best_utm(area) AS t,
-         ST_Transform(area::geometry, best_utm(area)) AS a
-  FROM users.responsibility_areas
-  WHERE country = users.current_user_country()
+  SELECT users.current_user_area_utm() AS a
 )
 DELETE FROM waterway.waterway_area
 WHERE pg_has_role('sys_admin', 'MEMBER')
   OR ST_Covers((SELECT a FROM resp),
-    ST_Transform(area::geometry, (SELECT t FROM resp)))
+    ST_Transform(area::geometry, (SELECT ST_SRID(a) FROM resp)))
 `
 	insertWaterwayAreaSQL = `
 WITH resp AS (
-  SELECT best_utm(area) AS t,
-         ST_Transform(area::geometry, best_utm(area)) AS a
-  FROM users.responsibility_areas
-  WHERE country = users.current_user_country()
+  SELECT users.current_user_area_utm() AS a
 )
 INSERT INTO waterway.waterway_area (area, catccl, dirimp)
 SELECT dmp.geom, $3, $4
@@ -106,7 +100,7 @@
         THEN ST_MakeValid(ST_Transform(new_area,
           best_utm(ST_Transform(new_area, 4326))))
         ELSE ST_Intersection((SELECT a FROM resp),
-          ST_MakeValid(ST_Transform(new_area, (SELECT t FROM resp))))
+          ST_MakeValid(ST_Transform(new_area, (SELECT ST_SRID(a) FROM resp))))
         END,
       3), 4326)) AS dmp
 `
--- a/pkg/imports/wx.go	Tue Apr 02 19:24:08 2019 +0200
+++ b/pkg/imports/wx.go	Tue Apr 02 19:25:17 2019 +0200
@@ -80,15 +80,12 @@
 const (
 	deleteWaterwayAxisSQL = `
 WITH resp AS (
-  SELECT best_utm(area) AS t,
-         ST_Transform(area::geometry, best_utm(area)) AS a
-  FROM users.responsibility_areas
-  WHERE country = users.current_user_country()
+  SELECT users.current_user_area_utm() AS a
 )
 DELETE FROM waterway.waterway_axis
 WHERE pg_has_role('sys_admin', 'MEMBER')
   OR ST_Covers((SELECT a FROM resp),
-    ST_Transform(wtwaxs::geometry, (SELECT t FROM resp)))
+    ST_Transform(wtwaxs::geometry, (SELECT ST_SRID(a) FROM resp)))
 `
 
 	checkCrossingAxisSQL = `
@@ -100,10 +97,7 @@
 
 	insertWaterwayAxisSQL = `
 WITH resp AS (
-  SELECT best_utm(area) AS t,
-         ST_Transform(area::geometry, best_utm(area)) AS a
-  FROM users.responsibility_areas
-  WHERE country = users.current_user_country()
+  SELECT users.current_user_area_utm() AS a
 )
 INSERT INTO waterway.waterway_axis (wtwaxs, objnam, nobjnam)
 SELECT dmp.geom, $3, $4
@@ -113,7 +107,7 @@
         THEN ST_Node(ST_Transform(new_line,
           best_utm(ST_Transform(new_line, 4326))))
         ELSE ST_Intersection((SELECT a FROM resp),
-          ST_Node(ST_Transform(new_line, (SELECT t FROM resp))))
+          ST_Node(ST_Transform(new_line, (SELECT ST_SRID(a) FROM resp))))
         END,
       2), 4326)) AS dmp
 RETURNING id
--- a/schema/manage_users.sql	Tue Apr 02 19:24:08 2019 +0200
+++ b/schema/manage_users.sql	Tue Apr 02 19:25:17 2019 +0200
@@ -4,7 +4,7 @@
 -- SPDX-License-Identifier: AGPL-3.0-or-later
 -- License-Filename: LICENSES/AGPL-3.0.txt
 
--- Copyright (C) 2018 by via donau
+-- Copyright (C) 2018, 2019 by via donau
 --   – Österreichische Wasserstraßen-Gesellschaft mbH
 -- Software engineering by Intevation GmbH
 
@@ -68,6 +68,22 @@
     STABLE PARALLEL SAFE;
 
 
+CREATE OR REPLACE FUNCTION users.current_user_area_utm()
+    RETURNS geometry
+    AS $$
+        DECLARE utm_area geometry;
+        BEGIN
+            SELECT ST_Transform(area::geometry, best_utm(area))
+                INTO STRICT utm_area
+                FROM users.responsibility_areas
+                WHERE country = users.current_user_country();
+            RETURN utm_area;
+        END;
+    $$
+    LANGUAGE plpgsql
+    STABLE PARALLEL SAFE;
+
+
 CREATE OR REPLACE FUNCTION internal.create_user() RETURNS trigger
 AS $$
 BEGIN
--- a/schema/manage_users_tests.sql	Tue Apr 02 19:24:08 2019 +0200
+++ b/schema/manage_users_tests.sql	Tue Apr 02 19:25:17 2019 +0200
@@ -4,7 +4,7 @@
 -- SPDX-License-Identifier: AGPL-3.0-or-later
 -- License-Filename: LICENSES/AGPL-3.0.txt
 
--- Copyright (C) 2018 by via donau
+-- Copyright (C) 2018, 2019 by via donau
 --   – Österreichische Wasserstraßen-Gesellschaft mbH
 -- Software engineering by Intevation GmbH
 
@@ -17,10 +17,23 @@
 
 SET search_path TO public, gemma, gemma_waterway, gemma_fairway;
 
+SET SESSION AUTHORIZATION test_user_at;
+--
+-- Utility functions
+--
+SELECT results_eq($$
+    SELECT ST_SRID(users.current_user_area_utm())
+    $$,
+    $$
+    SELECT best_utm(area)
+        FROM users.responsibility_areas
+        WHERE country = users.current_user_country()
+    $$,
+    'Geometry has SRID corresponding to best_utm()');
+
 --
 -- Role listing
 --
-SET SESSION AUTHORIZATION test_user_at;
 SELECT results_eq($$
     SELECT username FROM users.list_users
     $$,
--- a/schema/run_tests.sh	Tue Apr 02 19:24:08 2019 +0200
+++ b/schema/run_tests.sh	Tue Apr 02 19:25:17 2019 +0200
@@ -28,7 +28,7 @@
     -c 'SET client_min_messages TO WARNING' \
     -c "DROP ROLE IF EXISTS $TEST_ROLES" \
     -f tap_tests_data.sql \
-    -c 'SELECT plan(63)' \
+    -c 'SELECT plan(64)' \
     -f gemma_tests.sql \
     -f isrs_tests.sql \
     -f auth_tests.sql \