This repository has been archived on 2025-03-30. You can view files and clone it, but cannot push or open issues or pull requests.
bactdb/handlers/entities.go

139 lines
3.1 KiB
Go

package handlers
import (
"io/ioutil"
"net/http"
"strconv"
"github.com/thermokarst/bactdb/Godeps/_workspace/src/github.com/gorilla/mux"
"github.com/thermokarst/bactdb/api"
"github.com/thermokarst/bactdb/helpers"
"github.com/thermokarst/bactdb/types"
)
func handleGetter(g api.Getter) errorHandler {
return func(w http.ResponseWriter, r *http.Request) *types.AppError {
id, err := strconv.ParseInt(mux.Vars(r)["ID"], 10, 0)
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
claims := helpers.GetClaims(r)
e, appErr := g.Get(id, mux.Vars(r)["genus"], &claims)
if appErr != nil {
return appErr
}
data, err := e.Marshal()
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
w.Write(data)
return nil
}
}
func handleLister(l api.Lister) errorHandler {
return func(w http.ResponseWriter, r *http.Request) *types.AppError {
opt := r.URL.Query()
opt.Add("Genus", mux.Vars(r)["genus"])
claims := helpers.GetClaims(r)
es, appErr := l.List(&opt, &claims)
if appErr != nil {
return appErr
}
data, err := es.Marshal()
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
w.Write(data)
return nil
}
}
func handleUpdater(u api.Updater) errorHandler {
return func(w http.ResponseWriter, r *http.Request) *types.AppError {
id, err := strconv.ParseInt(mux.Vars(r)["ID"], 10, 0)
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
bodyBytes, err := ioutil.ReadAll(r.Body)
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
e, err := u.Unmarshal(bodyBytes)
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
claims := helpers.GetClaims(r)
appErr := u.Update(id, &e, mux.Vars(r)["genus"], &claims)
if appErr != nil {
return appErr
}
data, err := e.Marshal()
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
w.Write(data)
return nil
}
}
func handleCreater(c api.Creater) errorHandler {
return func(w http.ResponseWriter, r *http.Request) *types.AppError {
bodyBytes, err := ioutil.ReadAll(r.Body)
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
e, err := c.Unmarshal(bodyBytes)
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
claims := helpers.GetClaims(r)
appErr := c.Create(&e, mux.Vars(r)["genus"], &claims)
if appErr != nil {
return appErr
}
data, err := e.Marshal()
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
w.WriteHeader(http.StatusCreated)
w.Write(data)
return nil
}
}
func handleDeleter(d api.Deleter) errorHandler {
return func(w http.ResponseWriter, r *http.Request) *types.AppError {
id, err := strconv.ParseInt(mux.Vars(r)["ID"], 10, 0)
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
claims := helpers.GetClaims(r)
appErr := d.Delete(id, mux.Vars(r)["genus"], &claims)
if appErr != nil {
return appErr
}
w.WriteHeader(http.StatusNoContent)
return nil
}
}