Skip to content

Commit

Permalink
Merge pull request #397 from meilisearch/add_swap_indexes_api_for_v0.…
Browse files Browse the repository at this point in the history
…30.0

Add swap indexes api for v0.30.0
  • Loading branch information
alallema committed Dec 14, 2022
2 parents d6bce8a + 15f1b43 commit d4c6242
Show file tree
Hide file tree
Showing 4 changed files with 582 additions and 362 deletions.
20 changes: 19 additions & 1 deletion client.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ type ClientInterface interface {
GetTask(taskUID int64) (resp *Task, err error)
GetTasks(param *TasksQuery) (resp *TaskResult, err error)
CancelTasks(param *CancelTasksQuery) (resp *TaskInfo, err error)
DeleteTasks(param *DeleteTasksQuery) (resp *TaskInfo, err error)
DeleteTasks(param *DeleteTasksQuery) (resp *TaskInfo, err error)
SwapIndexes(param []SwapIndexesParams) (resp *TaskInfo, err error)
WaitForTask(taskUID int64, options ...WaitParams) (*Task, error)
GenerateTenantToken(APIKeyUID string, searchRules map[string]interface{}, options *TenantTokenOptions) (resp string, err error)
}
Expand Down Expand Up @@ -350,6 +351,23 @@ func (c *Client) DeleteTasks(param *DeleteTasksQuery) (resp *TaskInfo, err error
return resp, nil
}

func (c *Client) SwapIndexes(param []SwapIndexesParams) (resp *TaskInfo, err error) {
resp = &TaskInfo{}
req := internalRequest{
endpoint: "/swap-indexes",
method: http.MethodPost,
contentType: contentTypeJSON,
withRequest: param,
withResponse: &resp,
acceptedStatusCodes: []int{http.StatusAccepted},
functionName: "SwapIndexes",
}
if err := c.executeRequest(req); err != nil {
return nil, err
}
return resp, nil
}

// WaitForTask waits for a task to be processed
//
// The function will check by regular interval provided in parameter interval
Expand Down
57 changes: 57 additions & 0 deletions client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1090,6 +1090,63 @@ func TestClient_DeleteTasks(t *testing.T) {
}
}

func TestClient_SwapIndexes(t *testing.T) {
type args struct {
UID string
client *Client
query []SwapIndexesParams
}
tests := []struct {
name string
args args
}{
{
name: "TestBasicSwapIndexes",
args: args{
UID: "indexUID",
client: defaultClient,
query: []SwapIndexesParams{
{Indexes: []string{"IndexA", "IndexB"}},
},
},
},
{
name: "TestSwapIndexesWithMultipleIndexes",
args: args{
UID: "indexUID",
client: defaultClient,
query: []SwapIndexesParams{
{Indexes: []string{"IndexA", "IndexB"}},
{Indexes: []string{"Index1", "Index2"}},
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := tt.args.client
t.Cleanup(cleanup(c))

gotResp, err := c.SwapIndexes(tt.args.query)
require.NoError(t, err)

_, err = c.WaitForTask(gotResp.TaskUID)
require.NoError(t, err)

gotTask, err := c.GetTask(gotResp.TaskUID)
require.NoError(t, err)

require.NotNil(t, gotResp.Status)
require.NotNil(t, gotResp.Type)
require.NotNil(t, gotResp.TaskUID)
require.NotNil(t, gotResp.EnqueuedAt)
require.Equal(t, "", gotResp.IndexUID)
require.Equal(t, "indexSwap", gotResp.Type)
require.Equal(t, tt.args.query, gotTask.Details.Swaps)
})
}
}

func TestClient_DefaultWaitForTask(t *testing.T) {
type args struct {
UID string
Expand Down
5 changes: 5 additions & 0 deletions types.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ type Details struct {
CanceledTasks int64 `json:"canceledTasks,omitempty"`
DeletedTasks int64 `json:"deletedTasks,omitempty"`
OriginalFilter string `json:"originalFilter,omitempty"`
Swaps []SwapIndexesParams `json:"swaps,omitempty"`
}

// Return of multiple tasks is wrap in a TaskResult
Expand Down Expand Up @@ -344,6 +345,10 @@ type DocumentsResult struct {
Total int64 `json:"total"`
}

type SwapIndexesParams struct {
Indexes []string `json:"indexes"`
}

// RawType is an alias for raw byte[]
type RawType []byte

Expand Down

0 comments on commit d4c6242

Please sign in to comment.