-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathtransitions_handler.go
57 lines (46 loc) · 1.21 KB
/
transitions_handler.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package main
import (
"log"
"net/http"
"net/url"
"strconv"
)
func TransitionsHandler(params url.Values, request *http.Request) ([]byte, *ApiError) {
// return the transition areas
ward := params.Get("ward")
type Transition struct {
Id int `json:"id"`
Ward2013 int `json:"ward_2013"`
Ward2015 int `json:"ward_2015"`
Boundary string `json:"boundary"`
}
type Changes struct {
Incoming []Transition `json:"incoming"`
Outgoing []Transition `json:"outgoing"`
}
var c Changes
w, err := strconv.Atoi(ward)
if err != nil || w < 1 || w > 50 {
return nil, &ApiError{Code: 400, Msg: "invalid ward"}
}
rows, err := api.Db.Query(`SELECT ward_2013,ward_2015,id, ST_AsGeoJSON(boundary, 5, 2)
FROM transition_areas
WHERE ward_2013 = $1
OR ward_2015 = $2
ORDER BY ward_2013;`, w, w)
if err != nil {
log.Printf("error fetching transition areas: %s", err)
}
for rows.Next() {
var t Transition
if err := rows.Scan(&t.Ward2013, &t.Ward2015, &t.Id, &t.Boundary); err != nil {
log.Printf("error loading transition area result: %s", err)
}
if t.Ward2013 == w {
c.Outgoing = append(c.Outgoing, t)
} else {
c.Incoming = append(c.Incoming, t)
}
}
return dumpJson(c), nil
}