comparison controllers/user.go @ 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 dfc2b035e055
comparison
equal deleted inserted replaced
253:322c3d0e05ef 254:de6fdb316b8f
3 import ( 3 import (
4 "database/sql" 4 "database/sql"
5 "database/sql/driver" 5 "database/sql/driver"
6 "encoding/json" 6 "encoding/json"
7 "errors" 7 "errors"
8 "fmt"
8 "net/http" 9 "net/http"
9 "regexp" 10 "regexp"
10 "strings" 11 "strings"
11 12
12 "github.com/gorilla/mux" 13 "github.com/gorilla/mux"
53 country, 54 country,
54 email_address, 55 email_address,
55 ST_XMin(map_extent), ST_YMin(map_extent), 56 ST_XMin(map_extent), ST_YMin(map_extent),
56 ST_XMax(map_extent), ST_YMax(map_extent) 57 ST_XMax(map_extent), ST_YMax(map_extent)
57 FROM sys_admin.list_users` 58 FROM sys_admin.list_users`
59
60 listUserSQL = `SELECT
61 rolname,
62 country,
63 email_address,
64 ST_XMin(map_extent), ST_YMin(map_extent),
65 ST_XMax(map_extent), ST_YMax(map_extent)
66 FROM sys_admin.list_users
67 WHERE username = $1`
58 ) 68 )
59 69
60 var errNoString = errors.New("Not a string") 70 var errNoString = errors.New("Not a string")
61 71
62 var ( 72 var (
333 Users: users, 343 Users: users,
334 }, 344 },
335 } 345 }
336 return 346 return
337 } 347 }
348
349 func listUser(
350 rw http.ResponseWriter, req *http.Request,
351 input interface{}, db *sql.DB,
352 ) (jr JSONResult, err error) {
353
354 user := mux.Vars(req)["user"]
355 if user == "" {
356 err = JSONError{http.StatusBadRequest, "error: user empty"}
357 return
358 }
359
360 result := &User{
361 User: user,
362 Extent: &BoundingBox{},
363 }
364
365 err = db.QueryRow(listUserSQL, user).Scan(
366 &result.Role,
367 &result.Country,
368 &result.Email,
369 &result.Extent.X1, &result.Extent.Y1,
370 &result.Extent.X2, &result.Extent.Y2,
371 )
372
373 switch {
374 case err == sql.ErrNoRows:
375 err = JSONError{
376 Code: http.StatusNotFound,
377 Message: fmt.Sprintf("Cannot find user %s.", user),
378 }
379 return
380 case err != nil:
381 return
382 }
383
384 jr.Result = result
385 return
386 }