Mercurial > gemma
diff pkg/controllers/surveys.go @ 2149:ed0ee54fc49e
Extend /surveys endpoint to include waterlevel_value
* Change SQL to use the same strategy as used in schema/gemma.sql
for bottlenecks_geoserver to determine the waterlevel_value.
* Extend go controler to deal with the situation where the value is not
there. This is still suboptimal as this creates a json object for
the NullInt64 value.
author | Bernhard Reiter <bernhard@intevation.de> |
---|---|
date | Fri, 08 Feb 2019 11:26:05 +0100 |
parents | 7267f8168176 |
children | 8132434f4093 |
line wrap: on
line diff
--- a/pkg/controllers/surveys.go Fri Feb 08 11:03:12 2019 +0100 +++ b/pkg/controllers/surveys.go Fri Feb 08 11:26:05 2019 +0100 @@ -24,18 +24,32 @@ ) const ( + // Use the same logic as in schema/gemma.sql to find out + // which is the reference gauge and which from its values is meant. + // The LEFT for the JOIN is necessary because we still want to list + // the surveys even if the corresponding value cannot be found because the + // depth_reference and reference_water_level strings do not match. + // + // As this information could be vary from survey entry to survey, + // in theory even for the same bottleneck + // it seems to be the right place to return it from the /surveys endpoint. listSurveysSQL = ` SELECT s.bottleneck_id, s.date_info::text, s.depth_reference, - bg.objname AS gauge_objname + bg.objname AS gauge_objname, + r.value AS waterlevel_value FROM - ( SELECT * FROM waterway.bottlenecks AS b, waterway.gauges AS g - WHERE b.fk_g_fid = g.location - ) AS bg - JOIN waterway.sounding_results AS s -ON bg.id = s.bottleneck_id + ( + ( SELECT * FROM waterway.bottlenecks AS b, waterway.gauges AS g + WHERE b.fk_g_fid = g.location + ) AS bg + JOIN waterway.sounding_results AS s + ON bg.id = s.bottleneck_id + ) +LEFT JOIN waterway.gauges_reference_water_levels AS r +ON s.depth_reference = r.reference_water_level AND bg.location = r.gauge_id WHERE bg.objnam=$1` ) @@ -57,6 +71,9 @@ surveys := []models.Survey{} + // as we do not use the values here, we could simply the code here + // to work without an explicit mdels/surverys.go + // (like done in controllers/search.go) for rows.Next() { var survey models.Survey if err = rows.Scan( @@ -64,6 +81,7 @@ &survey.DateInfo, &survey.DepthReference, &survey.ReferenceGauge, + &survey.WaterLevelValue, ); err != nil { return }