1
0
Fork 0
golang-github-meilisearch-m.../index.go
Daniel Baumann 5d4914ed7f
Adding upstream version 0.31.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-18 21:42:39 +02:00

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
}