Files

62 lines
1.4 KiB
Elixir

defmodule Localiser.Domain.Rooms do
import Ecto.Query
alias Localiser.Repo
alias Localiser.Domain.Schema.Room
alias Localiser.Domain.Schema.Sensor
alias Localiser.Domain.Sensors
def list_rooms do
Repo.all(Room)
end
def any?, do: Repo.exists?(Room)
def list_rooms_for_floor(floor_id) do
Room
|> where([r], r.floor_id == ^floor_id)
|> Repo.all()
end
def get_room!(id), do: Repo.get!(Room, id)
def create_room(attrs) do
case %Room{} |> Room.changeset(attrs) |> Repo.insert() do
{:ok, room} ->
Phoenix.PubSub.broadcast(Localiser.PubSub, "rooms", {:room_created, room})
{:ok, room}
error ->
error
end
end
def update_room(%Room{} = room, attrs) do
case room |> Room.changeset(attrs) |> Repo.update() do
{:ok, room} ->
Phoenix.PubSub.broadcast(Localiser.PubSub, "rooms", {:room_updated, room})
{:ok, room}
error ->
error
end
end
def delete_room(%Room{} = room) do
sensors = Repo.all(from s in Sensor, where: s.room_id == ^room.id)
Enum.each(sensors, fn s ->
Sensors.remove_from_layout(s)
end)
case Repo.delete(room) do
{:ok, deleted} ->
Phoenix.PubSub.broadcast(Localiser.PubSub, "rooms", {:room_deleted, deleted.id, deleted.floor_id})
{:ok, deleted}
error ->
error
end
end
end