github.com/altipla-consulting/ravendb-go-client@v0.1.3/get_terms_operation.go (about)

     1  package ravendb
     2  
     3  import (
     4  	"net/http"
     5  	"strconv"
     6  )
     7  
     8  var _ IMaintenanceOperation = &GetTermsOperation{}
     9  
    10  // GetTermsOperation represents "get terms" operation
    11  type GetTermsOperation struct {
    12  	_indexName string
    13  	_field     string
    14  	_fromValue string
    15  	_pageSize  int // 0 for unset
    16  
    17  	Command *GetTermsCommand
    18  }
    19  
    20  // NewGetTermsOperation returns GetTermsOperation. pageSize 0 means default size
    21  func NewGetTermsOperation(indexName string, field string, fromValue string, pageSize int) (*GetTermsOperation, error) {
    22  	if indexName == "" {
    23  		return nil, newIllegalStateError("Index name connot be empty")
    24  	}
    25  	if field == "" {
    26  		return nil, newIllegalStateError("Field name connot be empty")
    27  
    28  	}
    29  	return &GetTermsOperation{
    30  		_indexName: indexName,
    31  		_field:     field,
    32  		_fromValue: fromValue,
    33  		_pageSize:  pageSize,
    34  	}, nil
    35  }
    36  
    37  // GetCommand returns command for this operation
    38  func (o *GetTermsOperation) GetCommand(conventions *DocumentConventions) (RavenCommand, error) {
    39  	var err error
    40  	o.Command, err = NewGetTermsCommand(o._indexName, o._field, o._fromValue, o._pageSize)
    41  	if err != nil {
    42  		return nil, err
    43  	}
    44  	return o.Command, err
    45  }
    46  
    47  var (
    48  	_ RavenCommand = &GetTermsCommand{}
    49  )
    50  
    51  // GetTermsCommand represents "get terms" command
    52  type GetTermsCommand struct {
    53  	RavenCommandBase
    54  
    55  	_indexName string
    56  	_field     string
    57  	_fromValue string
    58  	_pageSize  int
    59  
    60  	Result []string
    61  }
    62  
    63  // NewGetTermsCommand returns new GetTermsCommand
    64  func NewGetTermsCommand(indexName string, field string, fromValue string, pageSize int) (*GetTermsCommand, error) {
    65  	if indexName == "" {
    66  		return nil, newIllegalArgumentError("Index name connot be empty")
    67  	}
    68  
    69  	res := &GetTermsCommand{
    70  		RavenCommandBase: NewRavenCommandBase(),
    71  
    72  		_indexName: indexName,
    73  		_field:     field,
    74  		_fromValue: fromValue,
    75  		_pageSize:  pageSize,
    76  	}
    77  	res.IsReadRequest = true
    78  	return res, nil
    79  }
    80  
    81  func (c *GetTermsCommand) createRequest(node *ServerNode) (*http.Request, error) {
    82  	pageSize := ""
    83  	if c._pageSize > 0 {
    84  		pageSize = strconv.Itoa(c._pageSize)
    85  	}
    86  	url := node.URL + "/databases/" + node.Database + "/indexes/terms?name=" + urlUtilsEscapeDataString(c._indexName) + "&field=" + urlUtilsEscapeDataString(c._field) + "&fromValue=" + c._fromValue + "&pageSize=" + pageSize
    87  
    88  	return newHttpGet(url)
    89  }
    90  
    91  func (c *GetTermsCommand) setResponse(response []byte, fromCache bool) error {
    92  	if response == nil {
    93  		return throwInvalidResponse()
    94  	}
    95  
    96  	var res TermsQueryResult
    97  	err := jsonUnmarshal(response, &res)
    98  	if err != nil {
    99  		return err
   100  	}
   101  	c.Result = res.Terms
   102  	return nil
   103  }