From bd5dec7327828611d58d99befad4ce1a78b77f73 Mon Sep 17 00:00:00 2001 From: fschade Date: Tue, 29 Jul 2025 13:45:06 +0200 Subject: [PATCH] enhancement(search): implement engine restore --- services/search/pkg/opensearch/engine.go | 9 ++++++ services/search/pkg/opensearch/engine_test.go | 28 ++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/services/search/pkg/opensearch/engine.go b/services/search/pkg/opensearch/engine.go index f6939d469c..3ecaea9156 100644 --- a/services/search/pkg/opensearch/engine.go +++ b/services/search/pkg/opensearch/engine.go @@ -61,6 +61,15 @@ func (e *Engine) Delete(id string) error { } func (e *Engine) Restore(id string) error { + _, err := e.client.Update(context.Background(), opensearchgoAPI.UpdateReq{ + Index: e.index, + DocumentID: id, + Body: bytes.NewReader([]byte(`{"doc": {"Deleted": false}}`)), + }) + if err != nil { + return fmt.Errorf("failed to mark document as deleted: %w", err) + } + return nil } diff --git a/services/search/pkg/opensearch/engine_test.go b/services/search/pkg/opensearch/engine_test.go index a72df24aef..8b1be51a87 100644 --- a/services/search/pkg/opensearch/engine_test.go +++ b/services/search/pkg/opensearch/engine_test.go @@ -57,7 +57,33 @@ func TestEngine_Delete(t *testing.T) { }) } -func TestEngine_Restore(t *testing.T) {} +func TestEngine_Restore(t *testing.T) { + index := "test-engine-delete" + tc := ostest.NewDefaultTestClient(t) + tc.Require.IndicesReset([]string{index}) + tc.Require.IndicesCount([]string{index}, "", 0) + + defer tc.Require.IndicesDelete([]string{index}) + + engine, err := opensearch.NewEngine(index, tc.Client()) + assert.NoError(t, err) + + t.Run("mark document as not deleted", func(t *testing.T) { + document := ostest.Testdata.Resources.Full + document.Deleted = true + tc.Require.DocumentCreate(index, document.ID, toJSON(t, document)) + tc.Require.IndicesCount([]string{index}, "", 1) + + tc.Require.IndicesCount([]string{index}, opensearch.NewRootQuery( + opensearch.NewTermQuery[bool]("Deleted").Value(true), + ).String(), 1) + + assert.NoError(t, engine.Restore(document.ID)) + tc.Require.IndicesCount([]string{index}, opensearch.NewRootQuery( + opensearch.NewTermQuery[bool]("Deleted").Value(true), + ).String(), 0) + }) +} func TestEngine_Purge(t *testing.T) { index := "test-engine-purge"