Mercurial > gemma
changeset 846:6902032757e4
Added end point to set style (colour) information for feature.
author | Sascha Wilde <wilde@intevation.de> |
---|---|
date | Fri, 28 Sep 2018 11:51:06 +0200 |
parents | 596ef3b46028 |
children | 82765aa6de53 |
files | pkg/controllers/routes.go pkg/controllers/system.go pkg/models/system.go schema/auth.sql |
diffstat | 4 files changed, 63 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/controllers/routes.go Fri Sep 28 11:48:57 2018 +0200 +++ b/pkg/controllers/routes.go Fri Sep 28 11:51:06 2018 +0200 @@ -59,6 +59,11 @@ Handle: getFeatureStyle, })).Methods(http.MethodGet) + api.Handle("/system/style/{feature}/{attr}", any(&JSONHandler{ + Input: func() interface{} { return new(models.Colour) }, + Handle: setFeatureStyle, + })).Methods(http.MethodPut) + // Password resets. api.Handle("/users/passwordreset", &JSONHandler{ Input: func() interface{} { return new(models.PWResetUser) },
--- a/pkg/controllers/system.go Fri Sep 28 11:48:57 2018 +0200 +++ b/pkg/controllers/system.go Fri Sep 28 11:51:06 2018 +0200 @@ -15,6 +15,9 @@ getFeatureColourSQL = `SELECT r,g,b,a FROM systemconf.feature_colours WHERE feature_name = $1 AND style_attr = $2` + setFeatureColourSQL = `UPDATE systemconf.feature_colours +SET (r, g, b, a) = ($3, $4, $5, $6) +WHERE feature_name = $1 AND style_attr = $2` ) // System status end points @@ -97,3 +100,46 @@ }{c, fmt.Sprintf("rgba(%d, %d, %d, %g)", c.R, c.G, c.B, c.A)} return } + +func setFeatureStyle( + input interface{}, + req *http.Request, + db *sql.Conn, +) (jr JSONResult, err error) { + + feature := mux.Vars(req)["feature"] + attr := mux.Vars(req)["attr"] + + c := input.(*models.Colour) + if !c.IsValid() { + err = JSONError{http.StatusBadRequest, "error: invalid colours"} + return + } + + var res sql.Result + res, err = db.ExecContext( + req.Context(), + setFeatureColourSQL, + feature, attr, + c.R, c.G, c.B, c.A) + + if err != nil { + return + } + + if n, err2 := res.RowsAffected(); err2 == nil && n == 0 { + err = JSONError{ + Code: http.StatusNotFound, + Message: "Requestes style not found.", + } + return + } + + jr = JSONResult{ + Code: http.StatusCreated, + Result: struct { + Result string `json:"result"` + }{"success"}, + } + return +}
--- a/pkg/models/system.go Fri Sep 28 11:48:57 2018 +0200 +++ b/pkg/models/system.go Fri Sep 28 11:51:06 2018 +0200 @@ -8,3 +8,14 @@ A float32 `json:"a"` } ) + +func isByteRange(i int) bool { + return i >= 0 && i < 256 +} + +func (c Colour) IsValid() bool { + return isByteRange(c.R) && + isByteRange(c.G) && + isByteRange(c.B) && + c.A >= 0 && c.A <= 1 +}
--- a/schema/auth.sql Fri Sep 28 11:48:57 2018 +0200 +++ b/schema/auth.sql Fri Sep 28 11:51:06 2018 +0200 @@ -32,6 +32,7 @@ GRANT USAGE ON SCHEMA sys_admin TO sys_admin; GRANT SELECT ON ALL TABLES IN SCHEMA sys_admin TO sys_admin; GRANT UPDATE ON sys_admin.system_config TO sys_admin; +GRANT UPDATE ON systemconf.feature_colours TO sys_admin; GRANT INSERT, DELETE ON sys_admin.password_reset_requests TO sys_admin; GRANT INSERT, DELETE, UPDATE ON waterway.sounding_results_contour_lines TO sys_admin;