github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/create_database_operation.go (about) 1 package ravendb 2 3 import ( 4 "net/http" 5 "net/url" 6 "strconv" 7 ) 8 9 var _ IServerOperation = &CreateDatabaseOperation{} 10 11 // CreateDatabaseOperation represents "create database" operation 12 type CreateDatabaseOperation struct { 13 databaseRecord *DatabaseRecord 14 replicationFactor int 15 } 16 17 // NewCreateDatabaseOperation returns CreateDatabaseOperation 18 func NewCreateDatabaseOperation(databaseRecord *DatabaseRecord, replicationFactor int) *CreateDatabaseOperation { 19 if databaseRecord.DatabaseTopology != nil && databaseRecord.DatabaseTopology.ReplicationFactor > 0 { 20 replicationFactor = databaseRecord.DatabaseTopology.ReplicationFactor 21 } else if replicationFactor <= 0 { 22 replicationFactor = 1 23 } 24 25 return &CreateDatabaseOperation{ 26 databaseRecord: databaseRecord, 27 replicationFactor: replicationFactor, 28 } 29 } 30 31 // GetCommand returns command for this operation 32 func (o *CreateDatabaseOperation) GetCommand(conventions *DocumentConventions) (RavenCommand, error) { 33 return NewCreateDatabaseCommand(conventions, o.databaseRecord, o.replicationFactor) 34 } 35 36 var ( 37 _ RavenCommand = &CreateDatabaseCommand{} 38 ) 39 40 // CreateDatabaseCommand represents "create database" command 41 type CreateDatabaseCommand struct { 42 RavenCommandBase 43 44 conventions *DocumentConventions 45 databaseRecord *DatabaseRecord 46 replicationFactor int 47 databaseName string 48 49 Result *DatabasePutResult 50 } 51 52 // NewCreateDatabaseCommand returns new CreateDatabaseCommand 53 func NewCreateDatabaseCommand(conventions *DocumentConventions, databaseRecord *DatabaseRecord, replicationFactor int) (*CreateDatabaseCommand, error) { 54 if databaseRecord.DatabaseName == "" { 55 return nil, newIllegalArgumentError("databaseRecord.DatabaseName cannot be empty") 56 } 57 if databaseRecord.DatabaseTopology != nil && databaseRecord.DatabaseTopology.ReplicationFactor > 0 { 58 replicationFactor = databaseRecord.DatabaseTopology.ReplicationFactor 59 } else if replicationFactor <= 0 { 60 replicationFactor = 1 61 } 62 63 cmd := &CreateDatabaseCommand{ 64 RavenCommandBase: NewRavenCommandBase(), 65 66 conventions: conventions, 67 databaseRecord: databaseRecord, 68 replicationFactor: replicationFactor, 69 databaseName: databaseRecord.DatabaseName, 70 } 71 return cmd, nil 72 } 73 74 func (c *CreateDatabaseCommand) CreateRequest(node *ServerNode) (*http.Request, error) { 75 url := node.URL + "/admin/databases?name=" + url.QueryEscape(c.databaseName) 76 url += "&replicationFactor=" + strconv.Itoa(c.replicationFactor) 77 78 js, err := jsonMarshal(c.databaseRecord) 79 if err != nil { 80 return nil, err 81 } 82 return newHttpPut(url, js) 83 } 84 85 func (c *CreateDatabaseCommand) SetResponse(response []byte, fromCache bool) error { 86 if len(response) == 0 { 87 return throwInvalidResponse() 88 } 89 return jsonUnmarshal(response, &c.Result) 90 }