master
1package main
2
3import (
4 "encoding/json"
5 "net/http"
6
7 "github.com/gorilla/mux"
8)
9
10type MuxRequest http.Request
11
12type datasource interface {
13 GetVisit(string) (*Visit, error) // string a type?
14 GetVisits() ([]Visit, error)
15 CreateVisit(Visit) ([]Visit, error)
16 CancelVisit(string) ([]Visit, error)
17}
18
19func VisitList() http.Handler {
20 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
21 vl, err := visitDB.GetVisits()
22 if err != nil {
23 http.Error(w, err.Error(), http.StatusInternalServerError)
24 return
25 }
26
27 enc := json.NewEncoder(w)
28 err = enc.Encode(vl)
29 if err != nil {
30 http.Error(w, err.Error(), http.StatusInternalServerError)
31 return
32 }
33 return
34 })
35}
36
37// path vars expected: visitID
38func VisitDetails() http.Handler {
39 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
40 visitID, present := mux.Vars(r)["visitID"]
41 if !present {
42 http.Error(w, "visit key not in path", http.StatusInternalServerError)
43 return
44 }
45
46 v, err := visitDB.GetVisit(visitID)
47 if err != nil {
48 http.Error(w, err.Error(), http.StatusNotFound)
49 }
50
51 enc := json.NewEncoder(w)
52 err = enc.Encode(v)
53 if err != nil {
54 http.Error(w, err.Error(), http.StatusInternalServerError)
55 return
56 }
57 return
58 })
59}
60
61func VisitCreate() http.Handler {
62 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
63 var v Visit
64 dec := json.NewDecoder(r.Body)
65 err := dec.Decode(&v)
66 if err != nil {
67 http.Error(w, err.Error(), http.StatusBadRequest)
68 return
69 }
70
71 vl, err := visitDB.CreateVisit(v)
72 if err != nil {
73 http.Error(w, err.Error(), http.StatusBadRequest)
74 return
75 }
76
77 w.WriteHeader(http.StatusCreated)
78 enc := json.NewEncoder(w)
79 err = enc.Encode(vl)
80 if err != nil {
81 http.Error(w, err.Error(), http.StatusInternalServerError)
82 return
83 }
84 return
85 })
86}
87
88// path vars expected: visitID
89func VisitCancel() http.Handler {
90 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
91 visitID, present := mux.Vars(r)["visitID"]
92 if !present {
93 http.Error(w, "visit key not in path", http.StatusInternalServerError)
94 return
95 }
96
97 vl, err := visitDB.CancelVisit(visitID)
98 if err != nil {
99 http.Error(w, err.Error(), http.StatusBadRequest)
100 }
101
102 enc := json.NewEncoder(w)
103 err = enc.Encode(vl)
104 if err != nil {
105 http.Error(w, err.Error(), http.StatusInternalServerError)
106 return
107 }
108 return
109 })
110}
111
112// path vars expected: visitID, visitorID
113func VisitorList() http.Handler {
114 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
115 })
116}
117
118// path vars expected: visitID
119func VisitorCreate() http.Handler {
120 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
121 })
122}
123
124// path vars expected: visitID, visitorID
125func VisitorRemove() http.Handler {
126 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
127 })
128}