# HG changeset patch # User Sascha L. Teichmann # Date 1532687419 -7200 # Node ID de6fdb316b8f83a1aa28b4f6fa27712c4aae4335 # Parent 322c3d0e05ef6b95dac5587dbce50561512ad575 Implemented /users/{user} GET a listing of given user. diff -r 322c3d0e05ef -r de6fdb316b8f controllers/routes.go --- 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) diff -r 322c3d0e05ef -r de6fdb316b8f controllers/user.go --- 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 +}