Files
localiserd/lib/localiser/localisation/room/supervisor.ex
T
2026-04-16 15:46:00 +02:00

42 lines
934 B
Elixir

defmodule Localiser.Localisation.Room.Supervisor do
use DynamicSupervisor
alias Localiser.Domain.Rooms
alias Localiser.Localisation.Room.Server
def start_link(floor) do
case DynamicSupervisor.start_link(__MODULE__, :ok, name: via(floor.id)) do
{:ok, pid} ->
seed_rooms(floor.id)
{:ok, pid}
error ->
error
end
end
def via(floor_id) do
{:via, Registry, {Localiser.Registry, {:room_supervisor, floor_id}}}
end
@impl true
def init(:ok) do
DynamicSupervisor.init(strategy: :one_for_one)
end
def start_room_server(floor_id, room) do
child_spec = %{
id: {Server, room.id},
start: {Server, :start_link, [room]},
restart: :transient
}
DynamicSupervisor.start_child(via(floor_id), child_spec)
end
defp seed_rooms(floor_id) do
Rooms.list_rooms_for_floor(floor_id)
|> Enum.each(&start_room_server(floor_id, &1))
end
end