func (rc *ResourceController) IndexHandler(c *echo.Context) error { defer func() error { if r := recover(); r != nil { switch x := r.(type) { case search.Error: return c.JSON(x.HTTPStatus, x.OperationOutcome) default: outcome := models.NewOperationOutcome("fatal", "exception", "") return c.JSON(http.StatusInternalServerError, outcome) } } return nil }() searchQuery := search.Query{Resource: rc.Name, Query: c.Request().URL.RawQuery} baseURL := responseURL(c.Request(), rc.Name) bundle, err := rc.DAL.Search(*baseURL, searchQuery) if err != nil { return err } c.Set("bundle", bundle) c.Set("Resource", rc.Name) c.Set("Action", "search") c.Response().Header().Set("Access-Control-Allow-Origin", "*") return c.JSON(http.StatusOK, bundle) }
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) 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) }
func convertIDToBsonID(id string) (bson.ObjectId, error) { if bson.IsObjectIdHex(id) { return bson.ObjectIdHex(id), nil } return bson.ObjectId(""), models.NewOperationOutcome("fatal", "exception", "Id must be a valid BSON ObjectId") }