lib/ravix.ex

defmodule Ravix do
  @moduledoc """
    Ravix is a RavenDB Driver written in Elixir
  """
  use Application

  @doc """
    Initializes three processes registers to facilitate grouping sessions, connections and nodes.
    - :sessions = Stores sessions by their UUIDs
    - :connections = Stores the connections processes, based on the Repo Name
    - :request_executors = Stores the node executors data
  """
  def start(_type, _args) do
    children = [
      {Registry, [keys: :unique, name: :sessions]},
      {Registry, [keys: :unique, name: :connections]},
      {Registry, [keys: :duplicate, name: :request_executors]},
      {Registry, [keys: :unique, name: :request_executor_pools]}
    ]

    opts = [strategy: :one_for_one, name: Ravix.Supervisor]
    Supervisor.start_link(children, opts)
  end
end