func (rc *ResourceController) UpdateHandler(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc) { var id bson.ObjectId idString := mux.Vars(r)["id"] if bson.IsObjectIdHex(idString) { id = bson.ObjectIdHex(idString) } else { http.Error(rw, "Invalid id", http.StatusBadRequest) } decoder := json.NewDecoder(r.Body) resource := models.NewStructForResourceName(rc.Name) err := decoder.Decode(resource) if err != nil { http.Error(rw, err.Error(), http.StatusInternalServerError) } c := Database.C(models.PluralizeLowerResourceName(rc.Name)) reflect.ValueOf(resource).Elem().FieldByName("Id").SetString(id.Hex()) err = c.Update(bson.M{"_id": id.Hex()}, resource) if err != nil { http.Error(rw, err.Error(), http.StatusInternalServerError) } context.Set(r, rc.Name, resource) context.Set(r, "Resource", rc.Name) context.Set(r, "Action", "update") rw.Header().Set("Content-Type", "application/json; charset=utf-8") rw.Header().Set("Access-Control-Allow-Origin", "*") json.NewEncoder(rw).Encode(resource) }
func (rc *ResourceController) CreateHandler(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc) { decoder := json.NewDecoder(r.Body) resource := models.NewStructForResourceName(rc.Name) err := decoder.Decode(resource) if err != nil { http.Error(rw, err.Error(), http.StatusInternalServerError) } c := Database.C(models.PluralizeLowerResourceName(rc.Name)) i := bson.NewObjectId() reflect.ValueOf(resource).Elem().FieldByName("Id").SetString(i.Hex()) err = c.Insert(resource) if err != nil { http.Error(rw, err.Error(), http.StatusInternalServerError) } context.Set(r, rc.Name, resource) context.Set(r, "Resource", rc.Name) context.Set(r, "Action", "create") rw.Header().Add("Location", responseURL(r, rc.Name, i.Hex()).String()) rw.Header().Set("Content-Type", "application/json; charset=utf-8") rw.Header().Set("Access-Control-Allow-Origin", "*") rw.WriteHeader(http.StatusCreated) json.NewEncoder(rw).Encode(resource) }
func (dal *mongoDataAccessLayer) Get(id, resourceType string) (result interface{}, err error) { bsonID, err := convertIDToBsonID(id) if err != nil { return nil, convertMongoErr(err) } collection := dal.Database.C(models.PluralizeLowerResourceName(resourceType)) result = models.NewStructForResourceName(resourceType) if err = collection.FindId(bsonID.Hex()).One(result); err != nil { return nil, convertMongoErr(err) } return }
func (rc *ResourceController) CreateHandler(c *echo.Context) error { resource := models.NewStructForResourceName(rc.Name) err := c.Bind(resource) if err != nil { oo := models.NewOperationOutcome("fatal", "exception", err.Error()) return c.JSON(http.StatusBadRequest, oo) } id, err := rc.DAL.Post(resource) if err != nil { return err } c.Set(rc.Name, resource) c.Set("Resource", rc.Name) c.Set("Action", "create") c.Response().Header().Add("Location", responseURL(c.Request(), rc.Name, id).String()) c.Response().Header().Set("Access-Control-Allow-Origin", "*") return c.JSON(http.StatusCreated, resource) }
func (rc *ResourceController) LoadResource(r *http.Request) (interface{}, error) { var id bson.ObjectId idString := mux.Vars(r)["id"] if bson.IsObjectIdHex(idString) { id = bson.ObjectIdHex(idString) } else { return nil, errors.New("Invalid id") } c := Database.C(models.PluralizeLowerResourceName(rc.Name)) result := models.NewStructForResourceName(rc.Name) err := c.Find(bson.M{"_id": id.Hex()}).One(result) if err != nil { return nil, err } context.Set(r, rc.Name, result) context.Set(r, "Resource", rc.Name) return result, nil }
func (rc *ResourceController) UpdateHandler(c *echo.Context) error { resource := models.NewStructForResourceName(rc.Name) err := c.Bind(resource) if err != nil { oo := models.NewOperationOutcome("fatal", "exception", err.Error()) return c.JSON(http.StatusBadRequest, oo) } createdNew, err := rc.DAL.Put(c.Param("id"), resource) if err != nil { return err } c.Set(rc.Name, resource) c.Set("Resource", rc.Name) c.Set("Action", "update") c.Response().Header().Set("Access-Control-Allow-Origin", "*") if createdNew { return c.JSON(http.StatusCreated, resource) } return c.JSON(http.StatusOK, resource) }