func (c *AclCtrl) UpdateByID(w http.ResponseWriter, r *http.Request, params map[string]string) { id, err := strconv.Atoi(params["id"]) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.InvalidPathParams, err) return } acl := &domain.Acl{} err = json.NewDecoder(r.Body).Decode(acl) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.BodyDecodingError, err) return } lastRessource := interfaces.GetLastRessource(r) filter := interfaces.FilterIfOwnerRelations(r, nil) relations := interfaces.GetOwnerRelations(r) acl.SetRelatedID(lastRessource.IDKey, lastRessource.ID) acl, err = c.interactor.UpdateByID(id, acl, usecases.QueryContext{Filter: filter, OwnerRelations: relations}) if err != nil { switch err { case internalerrors.NotFound: c.render.JSONError(w, http.StatusUnauthorized, apierrors.Unauthorized, err) default: c.render.JSONError(w, http.StatusInternalServerError, apierrors.InternalServerError, err) } return } acl.BeforeRender() c.render.JSON(w, http.StatusCreated, acl) }
func (c *AclCtrl) FindByID(w http.ResponseWriter, r *http.Request, params map[string]string) { id, err := strconv.Atoi(params["id"]) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.InvalidPathParams, err) return } filter, err := interfaces.GetQueryFilter(r) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.FilterDecodingError, err) return } filter = interfaces.FilterIfOwnerRelations(r, filter) relations := interfaces.GetOwnerRelations(r) acl, err := c.interactor.FindByID(id, usecases.QueryContext{Filter: filter, OwnerRelations: relations}) if err != nil { switch err { case internalerrors.NotFound: c.render.JSONError(w, http.StatusUnauthorized, apierrors.Unauthorized, err) default: c.render.JSONError(w, http.StatusInternalServerError, apierrors.InternalServerError, err) } return } acl.BeforeRender() c.render.JSON(w, http.StatusOK, acl) }
// @Title UpdatePassword // @Description Update the user password // @Accept json // @Param id path int true "User id" // @Param PasswordForm body PasswordForm true "The old and the new password" // @Success 200 {object} domain.User "Request was successful" // @Router /users/{id}/updatePassword [post] func (c *UserCtrl) UpdatePassword(w http.ResponseWriter, r *http.Request, params map[string]string) { id, err := strconv.Atoi(params["id"]) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.InvalidPathParams, err) return } form := &PasswordForm{} err = json.NewDecoder(r.Body).Decode(form) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.BodyDecodingError, err) return } filter := interfaces.FilterIfOwnerRelations(r, nil) relations := interfaces.GetOwnerRelations(r) user, err := c.guestInter.UpdatePassword(id, usecases.QueryContext{Filter: filter, OwnerRelations: relations}, form.OldPassword, form.NewPassword) if err != nil { switch err { case internalerrors.NotFound: c.render.JSONError(w, http.StatusUnauthorized, apierrors.Unauthorized, err) case internalerrors.InvalidCredentials: c.render.JSONError(w, http.StatusUnauthorized, apierrors.InvalidCredentials, err) default: c.render.JSONError(w, http.StatusInternalServerError, apierrors.InternalServerError, err) } return } user.BeforeRender() c.render.JSON(w, http.StatusOK, user) }
// @Title DeleteByID // @Description Delete a Account instance // @Accept json // @Param id path int true "Account id" // @Success 204 {object} error "Request was successful" // @Router /accounts/{id} [delete] func (c *AccountCtrl) DeleteByID(w http.ResponseWriter, r *http.Request, params map[string]string) { var ( id int err error ) id, err = strconv.Atoi(params["id"]) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.InvalidPathParams, err) return } filter := interfaces.FilterIfOwnerRelations(r, nil) relations := interfaces.GetOwnerRelations(r) err = c.interactor.DeleteByID(id, usecases.QueryContext{Filter: filter, OwnerRelations: relations}) if err != nil { switch err { case internalerrors.NotFound: c.render.JSONError(w, http.StatusUnauthorized, apierrors.Unauthorized, err) default: c.render.JSONError(w, http.StatusInternalServerError, apierrors.InternalServerError, err) } return } c.render.JSON(w, http.StatusNoContent, nil) }
func (c *AclCtrl) Upsert(w http.ResponseWriter, r *http.Request, _ map[string]string) { acl := &domain.Acl{} var acls []domain.Acl buffer, _ := ioutil.ReadAll(r.Body) err := json.Unmarshal(buffer, acl) if err != nil { err := json.Unmarshal(buffer, &acls) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.BodyDecodingError, err) return } } lastRessource := interfaces.GetLastRessource(r) filter := interfaces.FilterIfOwnerRelations(r, nil) relations := interfaces.GetOwnerRelations(r) if acls == nil { acl.SetRelatedID(lastRessource.IDKey, lastRessource.ID) acl, err = c.interactor.UpsertOne(acl, usecases.QueryContext{Filter: filter, OwnerRelations: relations}) } else { for i := range acls { (&acls[i]).SetRelatedID(lastRessource.IDKey, lastRessource.ID) } acls, err = c.interactor.Upsert(acls, usecases.QueryContext{Filter: filter, OwnerRelations: relations}) } if err != nil { switch err.(type) { case *internalerrors.ViolatedConstraint: c.render.JSONError(w, 422, apierrors.ViolatedConstraint, err) } switch err { case internalerrors.NotFound: c.render.JSONError(w, http.StatusUnauthorized, apierrors.Unauthorized, err) default: c.render.JSONError(w, http.StatusInternalServerError, apierrors.InternalServerError, err) } return } if acls == nil { acl.BeforeRender() c.render.JSON(w, http.StatusCreated, acl) } else { for i := range acls { (&acls[i]).BeforeRender() } c.render.JSON(w, http.StatusCreated, acls) } }
func (c *AccountCtrl) UpdateByID(w http.ResponseWriter, r *http.Request, params map[string]string) { var ( id int err error ) if params["id"] == "me" { sessionCtx := context.Get(r, "currentSession") if sessionCtx == nil { c.render.JSONError(w, http.StatusUnauthorized, apierrors.SessionNotFound, nil) return } id = sessionCtx.(domain.Session).AccountID } else { id, err = strconv.Atoi(params["id"]) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.InvalidPathParams, err) return } } account := &domain.Account{} err = json.NewDecoder(r.Body).Decode(account) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.BodyDecodingError, err) return } lastRessource := interfaces.GetLastRessource(r) filter := interfaces.FilterIfOwnerRelations(r, nil) relations := interfaces.GetOwnerRelations(r) account.SetRelatedID(lastRessource.IDKey, lastRessource.ID) account, err = c.interactor.UpdateByID(id, account, usecases.QueryContext{Filter: filter, OwnerRelations: relations}) if err != nil { switch err { case internalerrors.NotFound: c.render.JSONError(w, http.StatusUnauthorized, apierrors.Unauthorized, err) default: c.render.JSONError(w, http.StatusInternalServerError, apierrors.InternalServerError, err) } return } account.BeforeRender() c.render.JSON(w, http.StatusCreated, account) }
func (c *AccountCtrl) FindByID(w http.ResponseWriter, r *http.Request, params map[string]string) { var ( id int err error ) if params["id"] == "me" { sessionCtx := context.Get(r, "currentSession") if sessionCtx == nil { c.render.JSONError(w, http.StatusUnauthorized, apierrors.SessionNotFound, nil) return } id = sessionCtx.(domain.Session).AccountID } else { id, err = strconv.Atoi(params["id"]) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.InvalidPathParams, err) return } } filter, err := interfaces.GetQueryFilter(r) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.FilterDecodingError, err) return } filter = interfaces.FilterIfOwnerRelations(r, filter) relations := interfaces.GetOwnerRelations(r) account, err := c.interactor.FindByID(id, usecases.QueryContext{Filter: filter, OwnerRelations: relations}) if err != nil { switch err { case internalerrors.NotFound: c.render.JSONError(w, http.StatusUnauthorized, apierrors.Unauthorized, err) default: c.render.JSONError(w, http.StatusInternalServerError, apierrors.InternalServerError, err) } return } account.BeforeRender() c.render.JSON(w, http.StatusOK, account) }
func (c *AclCtrl) DeleteAll(w http.ResponseWriter, r *http.Request, _ map[string]string) { filter, err := interfaces.GetQueryFilter(r) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.FilterDecodingError, err) return } filter = interfaces.FilterIfLastRessource(r, filter) filter = interfaces.FilterIfOwnerRelations(r, filter) relations := interfaces.GetOwnerRelations(r) err = c.interactor.DeleteAll(usecases.QueryContext{Filter: filter, OwnerRelations: relations}) if err != nil { c.render.JSONError(w, http.StatusInternalServerError, apierrors.InternalServerError, err) return } c.render.JSON(w, http.StatusNoContent, nil) }
// @Title UpdateByID // @Description Update attributes of a User instance // @Accept json // @Param id path int true "User id" // @Param User body domain.User true "User instance data" // @Success 200 {object} domain.User // @Router /users/{id} [put] func (c *UserCtrl) UpdateByID(w http.ResponseWriter, r *http.Request, params map[string]string) { id, err := strconv.Atoi(params["id"]) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.InvalidPathParams, err) return } user := &domain.User{} err = json.NewDecoder(r.Body).Decode(user) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.BodyDecodingError, err) return } lastResource := interfaces.GetLastResource(r) filter := interfaces.FilterIfOwnerRelations(r, nil) relations := interfaces.GetOwnerRelations(r) user.SetRelatedID(lastResource.IDKey, lastResource.ID) if roles := context.Get(r, "roles"); roles != nil && utils.ContainsStr(roles.([]string), "Admin") { user, err = c.interactor.UpdateByID(id, user, usecases.QueryContext{Filter: filter, OwnerRelations: relations}) } else { user, err = c.guestInter.UpdateByID(id, user, usecases.QueryContext{Filter: filter, OwnerRelations: relations}) } if err != nil { switch err { case internalerrors.NotFound: c.render.JSONError(w, http.StatusUnauthorized, apierrors.Unauthorized, err) default: c.render.JSONError(w, http.StatusInternalServerError, apierrors.InternalServerError, err) } return } user.BeforeRender() c.render.JSON(w, http.StatusOK, user) }
func (c *AclCtrl) Find(w http.ResponseWriter, r *http.Request, _ map[string]string) { filter, err := interfaces.GetQueryFilter(r) if err != nil { c.render.JSONError(w, http.StatusBadRequest, apierrors.FilterDecodingError, err) return } filter = interfaces.FilterIfLastRessource(r, filter) filter = interfaces.FilterIfOwnerRelations(r, filter) relations := interfaces.GetOwnerRelations(r) acls, err := c.interactor.Find(usecases.QueryContext{Filter: filter, OwnerRelations: relations}) if err != nil { c.render.JSONError(w, http.StatusInternalServerError, apierrors.InternalServerError, err) return } for i := range acls { (&acls[i]).BeforeRender() } c.render.JSON(w, http.StatusOK, acls) }