This repository has been archived by the owner on Feb 16, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 53
/
routes.go
142 lines (127 loc) Β· 3.75 KB
/
routes.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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package api
import (
"encoding/json"
"net/http"
"strconv"
"github.com/wtg/shuttletracker"
"github.com/wtg/shuttletracker/log"
)
func (api *API) ETAHandler(w http.ResponseWriter, r *http.Request) {
etas := api.etaManager.CurrentETAs()
err := WriteJSON(w, etas)
if err != nil {
return
}
}
// RoutesHandler finds all of the routes in the database
func (api *API) RoutesHandler(w http.ResponseWriter, r *http.Request) {
routes, err := api.ms.Routes()
if err != nil {
log.WithError(err).Error("unable to get routes")
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
WriteJSON(w, routes)
}
// StopsHandler finds all of the route stops in the database
func (api *API) StopsHandler(w http.ResponseWriter, r *http.Request) {
stops, err := api.ms.Stops()
if err != nil {
log.WithError(err).Error("unable to get stops")
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
WriteJSON(w, stops)
}
// RoutesCreateHandler adds a new route to the database
func (api *API) RoutesCreateHandler(w http.ResponseWriter, r *http.Request) {
route := &shuttletracker.Route{}
err := json.NewDecoder(r.Body).Decode(route)
if err != nil {
log.WithError(err).Error("unable to decode route")
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
err = api.ms.CreateRoute(route)
if err != nil {
log.WithError(err).Error("unable to create route")
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
// RoutesDeleteHandler deletes a route from database
func (api *API) RoutesDeleteHandler(w http.ResponseWriter, r *http.Request) {
id, err := strconv.ParseInt(r.URL.Query().Get("id"), 10, 64)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
err = api.ms.DeleteRoute(id)
if err != nil {
if err == shuttletracker.ErrRouteNotFound {
http.Error(w, "Route not found", http.StatusNotFound)
} else {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
}
// RoutesEditHandler Only handles editing enabled flag for now
func (api *API) RoutesEditHandler(w http.ResponseWriter, r *http.Request) {
route := &shuttletracker.Route{}
err := json.NewDecoder(r.Body).Decode(route)
if err != nil {
log.WithError(err).Error("Unable to decode route")
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
en := route.Enabled
sched := route.Schedule
route, err = api.ms.Route(route.ID)
route.Enabled = en
route.Schedule = sched
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
err = api.ms.ModifyRoute(route)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
// StopsCreateHandler adds a new route stop to the database
func (api *API) StopsCreateHandler(w http.ResponseWriter, r *http.Request) {
stop := &shuttletracker.Stop{}
err := json.NewDecoder(r.Body).Decode(stop)
if err != nil {
log.WithError(err).Error("unable to decode stop")
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if stop.ID < 0 {
err = api.ms.CreateStop(stop)
} else {
err = api.ms.CreateStopWithID(stop)
}
if err != nil {
log.WithError(err).Error("unable to create stop")
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
WriteJSON(w, stop)
}
func (api *API) StopsDeleteHandler(w http.ResponseWriter, r *http.Request) {
id, err := strconv.ParseInt(r.URL.Query().Get("id"), 10, 64)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
err = api.ms.DeleteStop(id)
if err != nil {
if err == shuttletracker.ErrStopNotFound {
http.Error(w, "Stop not found", http.StatusNotFound)
} else {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
}
// func (api *API) UnmarshalJSON(data []byte) error