in internal/server/server.go [125:182]
func (s *IndexServer) handleDelete() http.HandlerFunc {
route := "delete"
return func(w http.ResponseWriter, r *http.Request) {
param := chi.URLParam(r, "id")
rID, err := strconv.ParseUint(param, 10, 32)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
repoID := uint32(rID)
if !s.IndexingLock.TryLock(repoID) {
s.respondWithError(w, r, route, errors.New("indexing is in progress"), http.StatusLocked)
return
}
defer s.IndexingLock.Unlock(repoID)
deleteRequest := DeleteRequest{
RepoID: repoID,
Callback: &callback.CallbackParams{
Name: "delete",
RailsPayload: map[string]uint32{"RepoId": repoID},
},
}
err = s.IndexBuilder.DeleteRepository(
deleteRequest,
callback.CallbackFunc{
OnSuccess: func(params callback.CallbackParams) { //nolint:contextcheck
s.CallbackAPI.SendSuccess(r.Context(), params, s.IndexBuilder.GetIndexDir(), deleteRequest.RepoID)
},
OnFailure: func(params callback.CallbackParams, errorReason error) { //nolint:contextcheck
s.CallbackAPI.SendFailure(r.Context(), params, s.IndexBuilder.GetIndexDir(), deleteRequest.RepoID, errorReason)
},
},
s.IndexingLock,
)
if err != nil {
err = fmt.Errorf("failed to remove shards for repoID: %d from %v with error: %w", repoID, s.IndexBuilder.GetIndexDir(), err)
s.respondWithError(w, r, route, err, http.StatusInternalServerError)
return
}
resp := struct {
Success bool
}{
Success: true,
}
s.respondWith(w, r, route, resp)
}
}