Mercurial > gemma
changeset 254:de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 27 Jul 2018 12:30:19 +0200 |
parents | 322c3d0e05ef |
children | c36bd39782c1 dfc2b035e055 |
files | controllers/routes.go controllers/user.go |
diffstat | 2 files changed, 53 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/controllers/routes.go Fri Jul 27 12:12:48 2018 +0200 +++ b/controllers/routes.go Fri Jul 27 12:30:19 2018 +0200 @@ -24,6 +24,10 @@ })).Methods(http.MethodPost) api.Handle("/users/{user}", sysAdmin(&JSONHandler{ + Handle: listUser, + })).Methods(http.MethodGet) + + api.Handle("/users/{user}", sysAdmin(&JSONHandler{ Input: func() interface{} { return new(User) }, Handle: updateUser, })).Methods(http.MethodPut)
--- a/controllers/user.go Fri Jul 27 12:12:48 2018 +0200 +++ b/controllers/user.go Fri Jul 27 12:30:19 2018 +0200 @@ -5,6 +5,7 @@ "database/sql/driver" "encoding/json" "errors" + "fmt" "net/http" "regexp" "strings" @@ -55,6 +56,15 @@ ST_XMin(map_extent), ST_YMin(map_extent), ST_XMax(map_extent), ST_YMax(map_extent) FROM sys_admin.list_users` + + listUserSQL = `SELECT + rolname, + country, + email_address, + ST_XMin(map_extent), ST_YMin(map_extent), + ST_XMax(map_extent), ST_YMax(map_extent) +FROM sys_admin.list_users +WHERE username = $1` ) var errNoString = errors.New("Not a string") @@ -335,3 +345,42 @@ } return } + +func listUser( + rw http.ResponseWriter, req *http.Request, + input interface{}, db *sql.DB, +) (jr JSONResult, err error) { + + user := mux.Vars(req)["user"] + if user == "" { + err = JSONError{http.StatusBadRequest, "error: user empty"} + return + } + + result := &User{ + User: user, + Extent: &BoundingBox{}, + } + + err = db.QueryRow(listUserSQL, user).Scan( + &result.Role, + &result.Country, + &result.Email, + &result.Extent.X1, &result.Extent.Y1, + &result.Extent.X2, &result.Extent.Y2, + ) + + switch { + case err == sql.ErrNoRows: + err = JSONError{ + Code: http.StatusNotFound, + Message: fmt.Sprintf("Cannot find user %s.", user), + } + return + case err != nil: + return + } + + jr.Result = result + return +}