func()

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)
	}
}