changeset 3190:54a3e40cfbed

controllers: moved filter builder to a separate file.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 08 May 2019 10:50:14 +0200
parents 6f8fb2053881
children c0cd5dfec153
files pkg/controllers/common.go pkg/controllers/gauges.go pkg/controllers/importqueue.go
diffstat 3 files changed, 54 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkg/controllers/common.go	Wed May 08 10:50:14 2019 +0200
@@ -0,0 +1,43 @@
+// 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) 2019 by via donau
+//   – Österreichische Wasserstraßen-Gesellschaft mbH
+// Software engineering by Intevation GmbH
+//
+// Author(s):
+//  * Sascha L. Teichmann <sascha.teichmann@intevation.de>
+
+package controllers
+
+import (
+	"fmt"
+	"strings"
+)
+
+type filterBuilder struct {
+	stmt    strings.Builder
+	args    []interface{}
+	hasCond bool
+}
+
+func (fb *filterBuilder) arg(format string, v ...interface{}) {
+	indices := make([]interface{}, len(v))
+	for i := range indices {
+		indices[i] = len(fb.args) + i + 1
+	}
+	fmt.Fprintf(&fb.stmt, format, indices...)
+	fb.args = append(fb.args, v...)
+}
+
+func (fb *filterBuilder) and(format string, v ...interface{}) {
+	if fb.hasCond {
+		fb.stmt.WriteString(" AND ")
+	} else {
+		fb.hasCond = true
+	}
+	fb.arg(format, v...)
+}
--- a/pkg/controllers/gauges.go	Wed May 08 10:37:47 2019 +0200
+++ b/pkg/controllers/gauges.go	Wed May 08 10:50:14 2019 +0200
@@ -631,7 +631,7 @@
 	var fb filterBuilder
 	fb.stmt.WriteString(selectWaterlevelsSQL)
 
-	fb.cond(
+	fb.and(
 		" fk_gauge_id = ($%d::char(2), $%d::char(3), $%d::char(5), $%d::char(5), $%d::int) ",
 		isrs.CountryCode,
 		isrs.LoCode,
@@ -640,7 +640,7 @@
 		isrs.Hectometre,
 	)
 
-	fb.cond(
+	fb.and(
 		`(NOT predicted
          OR (
            date_issue = (
@@ -663,7 +663,7 @@
 				http.StatusBadRequest)
 			return
 		}
-		fb.cond("measure_date >= $%d", fromTime)
+		fb.and("measure_date >= $%d", fromTime)
 	}
 
 	if to := req.FormValue("to"); to != "" {
@@ -674,7 +674,7 @@
 				http.StatusBadRequest)
 			return
 		}
-		fb.cond("measure_date <= $%d", toTime)
+		fb.and("measure_date <= $%d", toTime)
 	}
 
 	conn := middleware.GetDBConn(req)
--- a/pkg/controllers/importqueue.go	Wed May 08 10:37:47 2019 +0200
+++ b/pkg/controllers/importqueue.go	Wed May 08 10:50:14 2019 +0200
@@ -132,30 +132,6 @@
 	return &ta
 }
 
-type filterBuilder struct {
-	stmt    strings.Builder
-	args    []interface{}
-	hasCond bool
-}
-
-func (fb *filterBuilder) arg(format string, v ...interface{}) {
-	indices := make([]interface{}, len(v))
-	for i := range indices {
-		indices[i] = len(fb.args) + i + 1
-	}
-	fmt.Fprintf(&fb.stmt, format, indices...)
-	fb.args = append(fb.args, v...)
-}
-
-func (fb *filterBuilder) cond(format string, v ...interface{}) {
-	if fb.hasCond {
-		fb.stmt.WriteString(" AND ")
-	} else {
-		fb.hasCond = true
-	}
-	fb.arg(format, v...)
-}
-
 func buildFilters(req *http.Request) (l, b, a *filterBuilder, err error) {
 
 	l = new(filterBuilder)
@@ -177,9 +153,9 @@
 	b.stmt.WriteString(selectBeforeSQL)
 
 	cond := func(format string, v ...interface{}) {
-		l.cond(format, v...)
-		a.cond(format, v...)
-		b.cond(format, v...)
+		l.and(format, v...)
+		a.and(format, v...)
+		b.and(format, v...)
 	}
 
 	if query := req.FormValue("query"); query != "" {
@@ -209,8 +185,8 @@
 		if fromTime, err = time.Parse(models.ImportTimeFormat, from); err != nil {
 			return
 		}
-		l.cond(" enqueued >= $%d ", fromTime)
-		b.cond(" enqueued < $%d", fromTime)
+		l.and(" enqueued >= $%d ", fromTime)
+		b.and(" enqueued < $%d", fromTime)
 	} else {
 		noBefore = true
 	}
@@ -220,8 +196,8 @@
 		if toTime, err = time.Parse(models.ImportTimeFormat, to); err != nil {
 			return
 		}
-		l.cond(" enqueued <= $%d ", toTime)
-		a.cond(" enqueued > $%d", toTime)
+		l.and(" enqueued <= $%d ", toTime)
+		a.and(" enqueued > $%d", toTime)
 	} else {
 		noAfter = true
 	}