diff --git a/entities.go b/entities.go index 7809bb9..6165044 100644 --- a/entities.go +++ b/entities.go @@ -23,3 +23,6 @@ type creater interface { create(*entity, string, *Claims) *appError unmarshal([]byte) (entity, error) } +type deleter interface { + delete(int64, string, *Claims) *appError +} diff --git a/handlers.go b/handlers.go index 258abc6..10d1a23 100644 --- a/handlers.go +++ b/handlers.go @@ -122,6 +122,7 @@ func Handler() http.Handler { r{handleLister(measurementService), "GET", "/measurements"}, r{handleGetter(measurementService), "GET", "/measurements/{Id:.+}"}, r{handleUpdater(measurementService), "PUT", "/measurements/{Id:.+}"}, + r{handleDeleter(measurementService), "DELETE", "/measurements/{Id:.+}"}, } for _, route := range routes { @@ -235,6 +236,24 @@ func handleCreater(c creater) errorHandler { } } +func handleDeleter(d deleter) errorHandler { + return func(w http.ResponseWriter, r *http.Request) *appError { + id, err := strconv.ParseInt(mux.Vars(r)["Id"], 10, 0) + if err != nil { + return newJSONError(err, http.StatusInternalServerError) + } + + claims := getClaims(r) + + appErr := d.delete(id, mux.Vars(r)["genus"], &claims) + if appErr != nil { + return appErr + } + + return nil + } +} + func tokenHandler(h http.Handler) http.Handler { token := func(w http.ResponseWriter, r *http.Request) { recorder := httptest.NewRecorder() diff --git a/measurements.go b/measurements.go index b2be185..543095b 100644 --- a/measurements.go +++ b/measurements.go @@ -246,6 +246,15 @@ func (s MeasurementService) update(id int64, e *entity, genus string, claims *Cl return nil } +func (m MeasurementService) delete(id int64, genus string, claims *Claims) *appError { + q := `DELETE FROM measurements WHERE id=$1;` + _, err := DBH.Exec(q, id) + if err != nil { + return newJSONError(err, http.StatusInternalServerError) + } + return nil +} + func listMeasurements(opt MeasurementListOptions, claims *Claims) (*Measurements, error) { var vals []interface{}