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 }