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

     1  package ravendb
     2  
     3  import (
     4  	"net/http"
     5  )
     6  
     7  var (
     8  	_ IServerOperation = &CompactDatabaseOperation{}
     9  )
    10  
    11  // CompactDatabaseOperation describes "compact database" operation
    12  type CompactDatabaseOperation struct {
    13  	compactSettings *CompactSettings
    14  
    15  	Command *CompactDatabaseCommand
    16  }
    17  
    18  // NewCompactDatabaseOperation returns new CompactDatabaseOperation
    19  func NewCompactDatabaseOperation(compactSettings *CompactSettings) *CompactDatabaseOperation {
    20  	return &CompactDatabaseOperation{
    21  		compactSettings: compactSettings,
    22  	}
    23  }
    24  
    25  // GetCommand returns a command
    26  func (o *CompactDatabaseOperation) GetCommand(conventions *DocumentConventions) (RavenCommand, error) {
    27  	var err error
    28  	o.Command, err = NewCompactDatabaseCommand(conventions, o.compactSettings)
    29  	if err != nil {
    30  		return nil, err
    31  	}
    32  	return o.Command, nil
    33  }
    34  
    35  var _ RavenCommand = &CompactDatabaseCommand{}
    36  
    37  // CompactDatabaseCommand describes "compact database" command
    38  type CompactDatabaseCommand struct {
    39  	RavenCommandBase
    40  
    41  	compactSettings []byte // CompactSettings serialized to json
    42  
    43  	Result *OperationIDResult
    44  }
    45  
    46  //NewCompactDatabaseCommand returns new CompactDatabaseCommand
    47  func NewCompactDatabaseCommand(conventions *DocumentConventions, compactSettings *CompactSettings) (*CompactDatabaseCommand, error) {
    48  	if conventions == nil {
    49  		return nil, newIllegalArgumentError("Conventions cannot be null")
    50  	}
    51  	if compactSettings == nil {
    52  		return nil, newIllegalArgumentError("CompactSettings cannot be null")
    53  	}
    54  
    55  	d, err := jsonMarshal(compactSettings)
    56  	if err != nil {
    57  		return nil, err
    58  	}
    59  	res := &CompactDatabaseCommand{
    60  		RavenCommandBase: NewRavenCommandBase(),
    61  
    62  		compactSettings: d,
    63  	}
    64  	return res, nil
    65  }
    66  
    67  func (c *CompactDatabaseCommand) createRequest(node *ServerNode) (*http.Request, error) {
    68  	url := node.URL + "/admin/compact"
    69  	return newHttpPost(url, c.compactSettings)
    70  }
    71  
    72  func (c *CompactDatabaseCommand) setResponse(response []byte, fromCache bool) error {
    73  	if len(response) == 0 {
    74  		return throwInvalidResponse()
    75  	}
    76  	return jsonUnmarshal(response, &c.Result)
    77  }