github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/lazy_suggestion_query_operation.go (about) 1 package ravendb 2 3 var _ ILazyOperation = &LazySuggestionQueryOperation{} 4 5 type LazySuggestionQueryOperation struct { 6 result interface{} 7 queryResult *QueryResult 8 requiresRetry bool 9 10 _conventions *DocumentConventions 11 _indexQuery *IndexQuery 12 _invokeAfterQueryExecuted func(*QueryResult) 13 _processResults func(*QueryResult, *DocumentConventions) (map[string]*SuggestionResult, error) 14 } 15 16 func newLazySuggestionQueryOperation(conventions *DocumentConventions, indexQuery *IndexQuery, invokeAfterQueryExecuted func(*QueryResult), 17 processResults func(*QueryResult, *DocumentConventions) (map[string]*SuggestionResult, error)) *LazySuggestionQueryOperation { 18 return &LazySuggestionQueryOperation{ 19 _conventions: conventions, 20 _indexQuery: indexQuery, 21 _invokeAfterQueryExecuted: invokeAfterQueryExecuted, 22 _processResults: processResults, 23 } 24 } 25 26 // needed for ILazyOperation 27 func (o *LazySuggestionQueryOperation) createRequest() *getRequest { 28 return &getRequest{ 29 url: "/queries", 30 method: "POST", 31 query: "?queryHash=" + o._indexQuery.GetQueryHash(), 32 content: NewIndexQueryContent(o._conventions, o._indexQuery), 33 } 34 } 35 36 // needed for ILazyOperation 37 func (o *LazySuggestionQueryOperation) getResult(result interface{}) error { 38 return setInterfaceToValue(result, o.result) 39 } 40 41 func (o *LazySuggestionQueryOperation) getQueryResult() *QueryResult { 42 return o.queryResult 43 } 44 45 // needed for ILazyOperation 46 func (o *LazySuggestionQueryOperation) isRequiresRetry() bool { 47 return o.requiresRetry 48 } 49 50 // needed for ILazyOperation 51 func (o *LazySuggestionQueryOperation) handleResponse(response *GetResponse) error { 52 if response.IsForceRetry { 53 o.result = nil 54 o.requiresRetry = true 55 return nil 56 } 57 58 var queryResult *QueryResult 59 err := jsonUnmarshal(response.Result, &queryResult) 60 if err != nil { 61 return err 62 } 63 64 return o.handleResponse2(queryResult) 65 } 66 67 func (o *LazySuggestionQueryOperation) handleResponse2(queryResult *QueryResult) error { 68 if o._invokeAfterQueryExecuted != nil { 69 o._invokeAfterQueryExecuted(queryResult) 70 } 71 72 var err error 73 // TODO: is op._processResults always != nil ? 74 o.result, err = o._processResults(queryResult, o._conventions) 75 o.queryResult = queryResult 76 return err 77 }