Skip to content

Commit

Permalink
BED-4581: added endpoint to update a saved query (#771)
Browse files Browse the repository at this point in the history
* added updated saved query endpoint

* added documentation

* better response codes

* allow admins to update public queries

* minor optimization
  • Loading branch information
irshadaj authored Aug 13, 2024
1 parent e010681 commit a2a391f
Show file tree
Hide file tree
Showing 7 changed files with 686 additions and 7 deletions.
1 change: 1 addition & 0 deletions cmd/api/src/api/registration/v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ func NewV2API(cfg config.Configuration, resources v2.Resources, routerInst *rout
routerInst.POST("/api/v2/graphs/cypher", resources.CypherQuery).RequirePermissions(permissions.GraphDBRead),
routerInst.GET("/api/v2/saved-queries", resources.ListSavedQueries).RequirePermissions(permissions.SavedQueriesRead),
routerInst.POST("/api/v2/saved-queries", resources.CreateSavedQuery).RequirePermissions(permissions.SavedQueriesWrite),
routerInst.PUT(fmt.Sprintf("/api/v2/saved-queries/{%s}", api.URIPathVariableSavedQueryID), resources.UpdateSavedQuery).RequirePermissions(permissions.SavedQueriesWrite),
routerInst.DELETE(fmt.Sprintf("/api/v2/saved-queries/{%s}", api.URIPathVariableSavedQueryID), resources.DeleteSavedQuery).RequirePermissions(permissions.SavedQueriesWrite),

// Azure Entity API
Expand Down
52 changes: 52 additions & 0 deletions cmd/api/src/api/v2/saved_queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,58 @@ func (s Resources) CreateSavedQuery(response http.ResponseWriter, request *http.
}
}

func (s Resources) UpdateSavedQuery(response http.ResponseWriter, request *http.Request) {
var (
rawSavedQueryID = mux.Vars(request)[api.URIPathVariableSavedQueryID]
updateRequest CreateSavedQueryRequest
savedQuery model.SavedQuery
err error
)

if user, isUser := auth.GetUserFromAuthCtx(ctx2.FromRequest(request).AuthCtx); !isUser {
api.WriteErrorResponse(request.Context(), api.BuildErrorResponse(http.StatusBadRequest, "No associated user found", request), response)
return
} else if err := api.ReadJSONRequestPayloadLimited(&updateRequest, request); err != nil {
api.WriteErrorResponse(request.Context(), api.BuildErrorResponse(http.StatusBadRequest, err.Error(), request), response)
return
} else if savedQueryID, err := strconv.Atoi(rawSavedQueryID); err != nil {
api.WriteErrorResponse(request.Context(), api.BuildErrorResponse(http.StatusBadRequest, api.ErrorResponseDetailsIDMalformed, request), response)
return
} else if savedQuery, err = s.DB.GetSavedQuery(request.Context(), savedQueryID); err != nil {
api.WriteErrorResponse(request.Context(), api.BuildErrorResponse(http.StatusInternalServerError, err.Error(), request), response)
return
} else if savedQuery.UserID != user.ID.String() {
if !user.Roles.Has(model.Role{Name: auth.RoleAdministrator}) {
api.WriteErrorResponse(request.Context(), api.BuildErrorResponse(http.StatusNotFound, "query does not exist", request), response)
return
} else {
if isPublic, err := s.DB.IsSavedQueryPublic(request.Context(), savedQuery.ID); err != nil {
api.WriteErrorResponse(request.Context(), api.BuildErrorResponse(http.StatusInternalServerError, err.Error(), request), response)
return
} else if !isPublic {
api.WriteErrorResponse(request.Context(), api.BuildErrorResponse(http.StatusNotFound, "query does not exist", request), response)
return
}
}
}

if updateRequest.Query != "" {
savedQuery.Query = updateRequest.Query
}
if updateRequest.Name != "" {
savedQuery.Name = updateRequest.Name
}
if updateRequest.Description != "" {
savedQuery.Description = updateRequest.Description
}

if savedQuery, err = s.DB.UpdateSavedQuery(request.Context(), savedQuery); err != nil {
api.HandleDatabaseError(request, response, err)
} else {
api.WriteBasicResponse(request.Context(), savedQuery, http.StatusOK, response)
}
}

func (s Resources) DeleteSavedQuery(response http.ResponseWriter, request *http.Request) {
var (
rawSavedQueryID = mux.Vars(request)[api.URIPathVariableSavedQueryID]
Expand Down
Loading

0 comments on commit a2a391f

Please sign in to comment.