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

     1  package ravendb
     2  
     3  import (
     4  	"net/http"
     5  	"strconv"
     6  )
     7  
     8  var (
     9  	_ RavenCommand = &GetRevisionsCommand{}
    10  )
    11  
    12  type GetRevisionsCommand struct {
    13  	RavenCommandBase
    14  
    15  	id            string
    16  	start         int
    17  	pageSize      int
    18  	metadataOnly  bool
    19  	changeVector  string
    20  	changeVectors []string
    21  
    22  	Result *JSONArrayResult
    23  }
    24  
    25  func NewGetRevisionsCommand(changeVectors []string, metadataOnly bool) *GetRevisionsCommand {
    26  	cmd := &GetRevisionsCommand{
    27  		RavenCommandBase: NewRavenCommandBase(),
    28  
    29  		changeVectors: changeVectors,
    30  		metadataOnly:  metadataOnly,
    31  	}
    32  	cmd.IsReadRequest = true
    33  	return cmd
    34  }
    35  
    36  func NewGetRevisionsCommandRange(id string, start int, pageSize int, metadataOnly bool) *GetRevisionsCommand {
    37  	cmd := &GetRevisionsCommand{
    38  		RavenCommandBase: NewRavenCommandBase(),
    39  
    40  		id:           id,
    41  		start:        start,
    42  		pageSize:     pageSize,
    43  		metadataOnly: metadataOnly,
    44  	}
    45  	cmd.IsReadRequest = true
    46  	return cmd
    47  }
    48  
    49  func (c *GetRevisionsCommand) GetChangeVectors() []string {
    50  	return c.changeVectors
    51  }
    52  
    53  func (c *GetRevisionsCommand) createRequest(node *ServerNode) (*http.Request, error) {
    54  	url := node.URL + "/databases/" + node.Database + "/revisions?"
    55  
    56  	if c.id != "" {
    57  		url += "&id=" + urlUtilsEscapeDataString(c.id)
    58  	} else if c.changeVector != "" {
    59  		url += "&changeVector=" + urlUtilsEscapeDataString(c.changeVector)
    60  	} else if c.changeVectors != nil {
    61  		for _, changeVector := range c.changeVectors {
    62  			url += "&changeVector=" + urlUtilsEscapeDataString(changeVector)
    63  		}
    64  	}
    65  
    66  	if c.start > 0 {
    67  		url += "&start=" + strconv.Itoa(c.start)
    68  	}
    69  
    70  	if c.pageSize > 0 {
    71  		url += "&pageSize=" + strconv.Itoa(c.pageSize)
    72  	}
    73  
    74  	if c.metadataOnly {
    75  		url += "&metadataOnly=true"
    76  	}
    77  
    78  	return newHttpGet(url)
    79  }
    80  
    81  func (c *GetRevisionsCommand) setResponse(response []byte, fromCache bool) error {
    82  	var res JSONArrayResult
    83  	err := jsonUnmarshal(response, &res)
    84  	if err != nil {
    85  		return err
    86  	}
    87  	if res.Results == nil {
    88  		return throwInvalidResponse()
    89  	}
    90  	c.Result = &res
    91  	return nil
    92  }