Mercurial > gemma
changeset 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 | 4057a1f15174 |
children | d639b721c7be |
files | pkg/controllers/surveys.go pkg/models/surveys.go |
diffstat | 2 files changed, 33 insertions(+), 10 deletions(-) [+] |
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 }
--- a/pkg/models/surveys.go Fri Feb 08 11:03:12 2019 +0100 +++ b/pkg/models/surveys.go Fri Feb 08 11:26:05 2019 +0100 @@ -13,11 +13,16 @@ package models +import ( + "database/sql" +) + type ( Survey struct { - BottleneckID string `json:"bottleneck_id"` - DateInfo string `json:"date_info"` - DepthReference string `json:"depth_reference"` - ReferenceGauge string `json:"gauge_objname"` + BottleneckID string `json:"bottleneck_id"` + DateInfo string `json:"date_info"` + DepthReference string `json:"depth_reference"` + ReferenceGauge string `json:"gauge_objname"` + WaterLevelValue sql.NullInt64 `json:"waterlevel_value"` } )