35 lines
853 B
Go
35 lines
853 B
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/didiercrunch/doormanserver/doormen"
|
|
"gopkg.in/mgo.v2/bson"
|
|
"net/http"
|
|
)
|
|
|
|
func CreateDoorman(w http.ResponseWriter, request *http.Request) {
|
|
wdef := new(doormen.DoormanDefinition)
|
|
defer request.Body.Close()
|
|
decoder := json.NewDecoder(request.Body)
|
|
if err := decoder.Decode(wdef); err != nil {
|
|
w.WriteHeader(400)
|
|
fmt.Fprintln(w, "cannot create doorman definition \n", err)
|
|
return
|
|
}
|
|
wdef.Id = bson.NewObjectId()
|
|
if err := wdef.Validate(); err != nil {
|
|
w.WriteHeader(400)
|
|
fmt.Fprintln(w, "New doorman is invalid \n", err)
|
|
return
|
|
}
|
|
if err := CreateDoormanInDatabase(wdef); err != nil {
|
|
w.WriteHeader(500)
|
|
fmt.Fprintln(w, "Server error \n", err)
|
|
return
|
|
}
|
|
go publisher.Emit(wdef.Id, wdef)
|
|
w.Header().Set("location", "/api/doormen/"+wdef.Id.Hex())
|
|
w.WriteHeader(201)
|
|
}
|