lib/operations/commands/get_statistics_command.ex

defmodule Ravix.Operations.Database.Commands.GetStatisticsCommand do
  @moduledoc """
  Command to delete a RavenDB database
  """
  @derive {Jason.Encoder, only: [:debugTag]}
  use Ravix.Documents.Commands.RavenCommand,
    debugTag: nil,
    databaseName: nil

  import Ravix.Documents.Commands.RavenCommand

  alias Ravix.Operations.Database.Commands.GetStatisticsCommand
  alias Ravix.Documents.Protocols.CreateRequest
  alias Ravix.Connection.ServerNode

  command_type(%{
    debugTag: String.t(),
    databaseName: String.t() | nil
  })

  defimpl CreateRequest, for: GetStatisticsCommand do
    @spec create_request(GetStatisticsCommand.t(), ServerNode.t()) :: GetStatisticsCommand.t()
    def create_request(%GetStatisticsCommand{} = command, %ServerNode{} = server_node) do
      database_name =
        case command.databaseName do
          nil -> server_node.database
          database_name -> database_name
        end

      %GetStatisticsCommand{
        command
        | url: "/databases/#{database_name}/stats?" <> command.debugTag,
          method: "GET"
      }
    end
  end
end