# HG changeset patch # User Sascha Wilde # Date 1585309046 -3600 # Node ID a6e5bb85f0a7f21f6c8b961ae430b927379ce3ca # Parent 7bd9c5161836389c1bda5d48bc38e205d53f2ebc Added new (optional) parameter "time" to search end point. diff -r 7bd9c5161836 -r a6e5bb85f0a7 pkg/controllers/search.go --- a/pkg/controllers/search.go Fri Mar 27 12:20:48 2020 +0100 +++ b/pkg/controllers/search.go Fri Mar 27 12:37:26 2020 +0100 @@ -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, 2020 by via donau // – Österreichische Wasserstraßen-Gesellschaft mbH // Software engineering by Intevation GmbH // @@ -24,7 +24,7 @@ ) const ( - searchMostSQL = `SELECT search_most($1)::text` + searchMostSQL = `SELECT search_most($1,$2)::text` ) func searchFeature(req *http.Request) (jr mw.JSONResult, err error) { @@ -44,6 +44,7 @@ req.Context(), searchMostSQL, s.SearchString, + s.SearchTime, ).Scan(&result) if err != nil { diff -r 7bd9c5161836 -r a6e5bb85f0a7 pkg/models/search.go --- a/pkg/models/search.go Fri Mar 27 12:20:48 2020 +0100 +++ b/pkg/models/search.go Fri Mar 27 12:37:26 2020 +0100 @@ -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, 2020 by via donau // – Österreichische Wasserstraßen-Gesellschaft mbH // Software engineering by Intevation GmbH // @@ -13,8 +13,13 @@ package models +import ( + "time" +) + type ( SearchRequest struct { SearchString string `json:"string"` + SearchTime *time.Time `json:"time"` } ) diff -r 7bd9c5161836 -r a6e5bb85f0a7 schema/search_functions.sql --- a/schema/search_functions.sql Fri Mar 27 12:20:48 2020 +0100 +++ b/schema/search_functions.sql Fri Mar 27 12:37:26 2020 +0100 @@ -4,7 +4,7 @@ -- SPDX-License-Identifier: AGPL-3.0-or-later -- License-Filename: LICENSES/AGPL-3.0.txt --- Copyright (C) 2018,2019 by via donau +-- Copyright (C) 2018,2019,2020 by via donau -- – Österreichische Wasserstraßen-Gesellschaft mbH -- Software engineering by Intevation GmbH @@ -42,7 +42,10 @@ END; $$; -CREATE OR REPLACE FUNCTION search_bottlenecks(search_string text) RETURNS jsonb +CREATE OR REPLACE FUNCTION search_bottlenecks( + search_string text, + search_time timestamp with time zone) +RETURNS jsonb LANGUAGE plpgsql STABLE PARALLEL SAFE AS $$ DECLARE @@ -57,7 +60,7 @@ FROM waterway.bottlenecks WHERE (objnam ILIKE '%' || search_string || '%' OR bottleneck_id ILIKE '%' || search_string || '%') - AND validity @> now() + AND validity @> search_time ORDER BY name) r; RETURN _result; END; @@ -159,12 +162,16 @@ END; $$; -CREATE OR REPLACE FUNCTION search_most(search_string text) RETURNS jsonb +CREATE OR REPLACE FUNCTION search_most( + search_string text, + search_time timestamp with time zone) +RETURNS jsonb LANGUAGE plpgsql STABLE PARALLEL SAFE AS $$ BEGIN RETURN search_hectometre(search_string) - || search_bottlenecks(search_string) + || search_bottlenecks(search_string, + COALESCE(search_time, current_timestamp)) || search_gauges(search_string) || search_sections(search_string) || search_stretches(search_string) diff -r 7bd9c5161836 -r a6e5bb85f0a7 schema/updates/1432/01.search_functions-time.sql --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/updates/1432/01.search_functions-time.sql Fri Mar 27 12:37:26 2020 +0100 @@ -0,0 +1,58 @@ +-- This is Free Software under GNU Affero General Public License v >= 3.0 +-- without warranty, see README.md and license for details. + +-- SPDX-License-Identifier: AGPL-3.0-or-later +-- License-Filename: LICENSES/AGPL-3.0.txt + +-- Copyright (C) 2018,2019,2020 by via donau +-- – Österreichische Wasserstraßen-Gesellschaft mbH +-- Software engineering by Intevation GmbH + +-- Author(s): +-- * Sascha Wilde + +-- This update adds the new argument "search_time" to +-- search_bottlenecks() and the meta function search_most(). + +DROP FUNCTION search_bottlenecks(text); +CREATE OR REPLACE FUNCTION search_bottlenecks( + search_string text, + search_time timestamp with time zone) +RETURNS jsonb + LANGUAGE plpgsql STABLE PARALLEL SAFE + AS $$ +DECLARE + _result jsonb; +BEGIN + SELECT COALESCE(json_agg(r),'[]') + INTO _result + FROM (SELECT objnam AS name, + ST_AsGeoJSON(ST_Envelope(area::geometry))::json AS geom, + 'bottleneck' AS type, + bottleneck_id AS location + FROM waterway.bottlenecks + WHERE (objnam ILIKE '%' || search_string || '%' + OR bottleneck_id ILIKE '%' || search_string || '%') + AND validity @> search_time + ORDER BY name) r; + RETURN _result; +END; +$$; + +DROP FUNCTION search_most(text); +CREATE OR REPLACE FUNCTION search_most( + search_string text, + search_time timestamp with time zone) +RETURNS jsonb + LANGUAGE plpgsql STABLE PARALLEL SAFE + AS $$ +BEGIN + RETURN search_hectometre(search_string) + || search_bottlenecks(search_string, + COALESCE(search_time, current_timestamp)) + || search_gauges(search_string) + || search_sections(search_string) + || search_stretches(search_string) + || search_cities(search_string); +END; +$$; diff -r 7bd9c5161836 -r a6e5bb85f0a7 schema/version.sql --- a/schema/version.sql Fri Mar 27 12:20:48 2020 +0100 +++ b/schema/version.sql Fri Mar 27 12:37:26 2020 +0100 @@ -1,1 +1,1 @@ -INSERT INTO gemma_schema_version(version) VALUES (1431); +INSERT INTO gemma_schema_version(version) VALUES (1432);