defmodule Ravix.Operations.Database.Commands.CreateDatabaseCommand do
@moduledoc """
Command to create a RavenDB database
## Fields
- Disabled: true/false - If the database is created disabled as default
- Encrypted: true/false - If the database is encrypted as default
- DatabaseName: Name - the database name
- ReplicationFactor: int - the replication factor of the database
"""
@derive {Jason.Encoder, only: [:Disabled, :Encrypted, :DatabaseName]}
use Ravix.Documents.Commands.RavenCommand,
Disabled: false,
Encrypted: false,
DatabaseName: nil,
ReplicationFactor: 1
import Ravix.Documents.Commands.RavenCommand
import Ravix.Helpers.UrlBuilder
alias Ravix.Operations.Database.Commands.CreateDatabaseCommand
alias Ravix.Documents.Protocols.{ToJson, CreateRequest}
alias Ravix.Connection.ServerNode
command_type(%{
Disabled: boolean(),
Encrypted: boolean(),
DatabaseName: String.t(),
ReplicationFactor: non_neg_integer()
})
defimpl CreateRequest, for: CreateDatabaseCommand do
@spec create_request(CreateDatabaseCommand.t(), ServerNode.t()) :: CreateDatabaseCommand.t()
def create_request(%CreateDatabaseCommand{} = command, %ServerNode{} = _server_node) do
%CreateDatabaseCommand{
command
| url:
"/admin/databases?"
|> append_param("name", Map.get(command, "DatabaseName"))
|> append_param("replicationFactor", Map.get(command, "ReplicationFactor")),
method: :put,
data: command |> ToJson.to_json()
}
end
end
end