154 lines
3.7 KiB
Go
154 lines
3.7 KiB
Go
package meilisearch
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
)
|
|
|
|
// index is the type that represent an index in meilisearch
|
|
type index struct {
|
|
uid string
|
|
primaryKey string
|
|
client *client
|
|
}
|
|
|
|
func newIndex(cli *client, uid string) IndexManager {
|
|
return &index{
|
|
client: cli,
|
|
uid: uid,
|
|
}
|
|
}
|
|
|
|
func (i *index) GetTaskReader() TaskReader {
|
|
return i
|
|
}
|
|
|
|
func (i *index) GetDocumentManager() DocumentManager {
|
|
return i
|
|
}
|
|
|
|
func (i *index) GetDocumentReader() DocumentReader {
|
|
return i
|
|
}
|
|
|
|
func (i *index) GetSettingsManager() SettingsManager {
|
|
return i
|
|
}
|
|
|
|
func (i *index) GetSettingsReader() SettingsReader {
|
|
return i
|
|
}
|
|
|
|
func (i *index) GetSearch() SearchReader {
|
|
return i
|
|
}
|
|
|
|
func (i *index) GetIndexReader() IndexReader {
|
|
return i
|
|
}
|
|
|
|
func (i *index) FetchInfo() (*IndexResult, error) {
|
|
return i.FetchInfoWithContext(context.Background())
|
|
}
|
|
|
|
func (i *index) FetchInfoWithContext(ctx context.Context) (*IndexResult, error) {
|
|
resp := new(IndexResult)
|
|
req := &internalRequest{
|
|
endpoint: "/indexes/" + i.uid,
|
|
method: http.MethodGet,
|
|
withRequest: nil,
|
|
withResponse: resp,
|
|
acceptedStatusCodes: []int{http.StatusOK},
|
|
functionName: "FetchInfo",
|
|
}
|
|
if err := i.client.executeRequest(ctx, req); err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.PrimaryKey != "" {
|
|
i.primaryKey = resp.PrimaryKey
|
|
}
|
|
resp.IndexManager = i
|
|
return resp, nil
|
|
}
|
|
|
|
func (i *index) FetchPrimaryKey() (*string, error) {
|
|
return i.FetchPrimaryKeyWithContext(context.Background())
|
|
}
|
|
|
|
func (i *index) FetchPrimaryKeyWithContext(ctx context.Context) (*string, error) {
|
|
idx, err := i.FetchInfoWithContext(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
i.primaryKey = idx.PrimaryKey
|
|
return &idx.PrimaryKey, nil
|
|
}
|
|
|
|
func (i *index) UpdateIndex(primaryKey string) (*TaskInfo, error) {
|
|
return i.UpdateIndexWithContext(context.Background(), primaryKey)
|
|
}
|
|
|
|
func (i *index) UpdateIndexWithContext(ctx context.Context, primaryKey string) (*TaskInfo, error) {
|
|
request := &UpdateIndexRequest{
|
|
PrimaryKey: primaryKey,
|
|
}
|
|
i.primaryKey = primaryKey
|
|
resp := new(TaskInfo)
|
|
|
|
req := &internalRequest{
|
|
endpoint: "/indexes/" + i.uid,
|
|
method: http.MethodPatch,
|
|
contentType: contentTypeJSON,
|
|
withRequest: request,
|
|
withResponse: resp,
|
|
acceptedStatusCodes: []int{http.StatusAccepted},
|
|
functionName: "UpdateIndex",
|
|
}
|
|
if err := i.client.executeRequest(ctx, req); err != nil {
|
|
return nil, err
|
|
}
|
|
i.primaryKey = primaryKey
|
|
return resp, nil
|
|
}
|
|
|
|
func (i *index) Delete(uid string) (bool, error) {
|
|
return i.DeleteWithContext(context.Background(), uid)
|
|
}
|
|
|
|
func (i *index) DeleteWithContext(ctx context.Context, uid string) (bool, error) {
|
|
resp := new(TaskInfo)
|
|
req := &internalRequest{
|
|
endpoint: "/indexes/" + uid,
|
|
method: http.MethodDelete,
|
|
withRequest: nil,
|
|
withResponse: resp,
|
|
acceptedStatusCodes: []int{http.StatusAccepted},
|
|
functionName: "Delete",
|
|
}
|
|
// err is not nil if status code is not 204 StatusNoContent
|
|
if err := i.client.executeRequest(ctx, req); err != nil {
|
|
return false, err
|
|
}
|
|
i.primaryKey = ""
|
|
return true, nil
|
|
}
|
|
|
|
func (i *index) GetStats() (*StatsIndex, error) {
|
|
return i.GetStatsWithContext(context.Background())
|
|
}
|
|
|
|
func (i *index) GetStatsWithContext(ctx context.Context) (*StatsIndex, error) {
|
|
resp := new(StatsIndex)
|
|
req := &internalRequest{
|
|
endpoint: "/indexes/" + i.uid + "/stats",
|
|
method: http.MethodGet,
|
|
withRequest: nil,
|
|
withResponse: resp,
|
|
acceptedStatusCodes: []int{http.StatusOK},
|
|
functionName: "GetStats",
|
|
}
|
|
if err := i.client.executeRequest(ctx, req); err != nil {
|
|
return nil, err
|
|
}
|
|
return resp, nil
|
|
}
|