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 }