defmodule ExCheckout.Checkout.Supervisor do use DynamicSupervisor @name __MODULE__ def child_spec([args]) do %{ id: __MODULE__, start: {__MODULE__, :start_link, args}, type: :supervisor } end def start_child(args \\ []) do child_spec = %{ id: ExCheckout.Server, start: {ExCheckout.Server, :start_link, args}, restart: :transient } DynamicSupervisor.start_child(__MODULE__, child_spec) end def start_link(args \\ []) do DynamicSupervisor.start_link(__MODULE__, args, name: @name) end def stop_checkout(pid) do DynamicSupervisor.terminate_child(__MODULE__, pid) end def init(args) do DynamicSupervisor.init( strategy: :one_for_one, extra_arguments: args ) end end