master
Raw Download raw file
  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}