annotate pkg/controllers/search.go @ 3984:2fa052a44300

Set schema version in update-db.sh, not in extra scripts. Also fixed handling of empty gemma_schema_version table.
author Sascha Wilde <wilde@intevation.de>
date Wed, 17 Jul 2019 13:54:01 +0200
parents f68529ff47a4
children 1458c9b0fdaa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1017
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 995
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 995
diff changeset
2 // without warranty, see README.md and license for details.
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 995
diff changeset
3 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 995
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 995
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 995
diff changeset
6 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 995
diff changeset
7 // Copyright (C) 2018 by via donau
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 995
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 995
diff changeset
9 // Software engineering by Intevation GmbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 995
diff changeset
10 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 995
diff changeset
11 // Author(s):
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 995
diff changeset
12 // * Sascha Wilde <sascha.wilde@intevation.de>
1337
53057ab27ff2 add headers for licensing to some middleware files
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1109
diff changeset
13 // * Sascha Teichmann <sascha.teichmann@intevation.de>
1017
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 995
diff changeset
14
743
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
15 package controllers
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
16
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
17 import (
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
18 "database/sql"
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
19 "net/http"
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
20 "strings"
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
21
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
22 "gemma.intevation.de/gemma/pkg/models"
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
23 )
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
24
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
25 const (
1109
74a75a5ce770 Added geonames data and extended search for villages/cities.
Sascha Wilde <wilde@intevation.de>
parents: 1050
diff changeset
26 searchMostSQL = `SELECT search_most($1)::text`
1050
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
27
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
28 listBottlenecksSQL = `
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
29 SELECT COALESCE(json_agg(r),'[]')
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
30 FROM (
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
31 SELECT
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
32 objnam AS name,
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
33 ST_AsGeoJSON(ST_Centroid(area))::json AS geom,
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
34 'bottleneck' AS type
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
35 FROM waterway.bottlenecks
3666
db87f34805fb Align bottleneck validity at gauges
Tom Gottfried <tom@intevation.de>
parents: 3645
diff changeset
36 WHERE validity @> current_timestamp
1050
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
37 ORDER BY objnam) r
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
38 `
743
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
39 )
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
40
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
41 func searchFeature(
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
42 input interface{},
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
43 req *http.Request,
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
44 db *sql.Conn,
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
45 ) (jr JSONResult, err error) {
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
46
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
47 s := input.(*models.SearchRequest)
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
48
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
49 if len(s.SearchString) == 0 {
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
50 err = JSONError{http.StatusBadRequest,
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
51 "error: empty search string"}
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
52 return
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
53 }
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
54
751
21dd10f26206 Some refactoring in search endpoint.
Sascha Wilde <wilde@intevation.de>
parents: 750
diff changeset
55 var result string
3734
1504856c9378 Moved rhm search to db.
Sascha Wilde <wilde@intevation.de>
parents: 3666
diff changeset
56 err = db.QueryRowContext(
1504856c9378 Moved rhm search to db.
Sascha Wilde <wilde@intevation.de>
parents: 3666
diff changeset
57 req.Context(),
1504856c9378 Moved rhm search to db.
Sascha Wilde <wilde@intevation.de>
parents: 3666
diff changeset
58 searchMostSQL,
1504856c9378 Moved rhm search to db.
Sascha Wilde <wilde@intevation.de>
parents: 3666
diff changeset
59 s.SearchString,
1504856c9378 Moved rhm search to db.
Sascha Wilde <wilde@intevation.de>
parents: 3666
diff changeset
60 ).Scan(&result)
748
3cb012d4d9ef Added search for bottlenecks
Sascha Wilde <wilde@intevation.de>
parents: 744
diff changeset
61
751
21dd10f26206 Some refactoring in search endpoint.
Sascha Wilde <wilde@intevation.de>
parents: 750
diff changeset
62 if err != nil {
21dd10f26206 Some refactoring in search endpoint.
Sascha Wilde <wilde@intevation.de>
parents: 750
diff changeset
63 return
21dd10f26206 Some refactoring in search endpoint.
Sascha Wilde <wilde@intevation.de>
parents: 750
diff changeset
64 }
743
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
65
751
21dd10f26206 Some refactoring in search endpoint.
Sascha Wilde <wilde@intevation.de>
parents: 750
diff changeset
66 jr.Result = strings.NewReader(result)
743
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
67 return
fdff2de616ad Added search function for river kilometer.
Sascha Wilde <wilde@intevation.de>
parents:
diff changeset
68 }
1050
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
69
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
70 func listBottlenecks(
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
71 _ interface{},
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
72 req *http.Request,
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
73 conn *sql.Conn,
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
74 ) (jr JSONResult, err error) {
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
75
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
76 var result string
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
77 err = conn.QueryRowContext(
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
78 req.Context(), listBottlenecksSQL).Scan(&result)
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
79
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
80 switch {
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
81 case err == sql.ErrNoRows:
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
82 err = JSONError{
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
83 Code: http.StatusNotFound,
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
84 Message: "Cannot find any bottleneck.",
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
85 }
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
86 return
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
87 case err != nil:
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
88 return
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
89 }
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
90
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
91 jr = JSONResult{Result: strings.NewReader(result)}
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
92 return
146245d2198f List all bottlenecks via GET /api/bottlenecks
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1024
diff changeset
93 }