feat: dynamically manage floors/rooms/tags
This commit is contained in:
@@ -11,19 +11,36 @@ defmodule Localiser.Domain.Floors do
|
||||
def get_floor!(id), do: Repo.get!(Floor, id)
|
||||
|
||||
def create_floor(attrs) do
|
||||
%Floor{}
|
||||
|> Floor.changeset(attrs)
|
||||
|> Repo.insert()
|
||||
case %Floor{} |> Floor.changeset(attrs) |> Repo.insert() do
|
||||
{:ok, floor} ->
|
||||
Phoenix.PubSub.broadcast(Localiser.PubSub, "floors", {:floor_created, floor})
|
||||
{:ok, floor}
|
||||
|
||||
error ->
|
||||
error
|
||||
end
|
||||
end
|
||||
|
||||
def update_floor(%Floor{} = floor, attrs) do
|
||||
floor
|
||||
|> Floor.changeset(attrs)
|
||||
|> Repo.update()
|
||||
case floor |> Floor.changeset(attrs) |> Repo.update() do
|
||||
{:ok, floor} ->
|
||||
Phoenix.PubSub.broadcast(Localiser.PubSub, "floors", {:floor_updated, floor})
|
||||
{:ok, floor}
|
||||
|
||||
error ->
|
||||
error
|
||||
end
|
||||
end
|
||||
|
||||
def delete_floor(%Floor{} = floor) do
|
||||
Repo.delete(floor)
|
||||
case Repo.delete(floor) do
|
||||
{:ok, deleted} ->
|
||||
Phoenix.PubSub.broadcast(Localiser.PubSub, "floors", {:floor_deleted, deleted.id})
|
||||
{:ok, deleted}
|
||||
|
||||
error ->
|
||||
error
|
||||
end
|
||||
end
|
||||
|
||||
def list_floors_with_rooms do
|
||||
|
||||
@@ -3,6 +3,7 @@ defmodule Localiser.Domain.Rooms do
|
||||
|
||||
alias Localiser.Repo
|
||||
alias Localiser.Domain.Schema.Room
|
||||
alias Localiser.Domain.Schema.Sensor
|
||||
|
||||
def list_rooms do
|
||||
Repo.all(Room)
|
||||
@@ -17,18 +18,41 @@ defmodule Localiser.Domain.Rooms do
|
||||
def get_room!(id), do: Repo.get!(Room, id)
|
||||
|
||||
def create_room(attrs) do
|
||||
%Room{}
|
||||
|> Room.changeset(attrs)
|
||||
|> Repo.insert()
|
||||
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
|
||||
room
|
||||
|> Room.changeset(attrs)
|
||||
|> Repo.update()
|
||||
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
|
||||
Repo.delete(room)
|
||||
sensors = Repo.all(from s in Sensor, where: s.room_id == ^room.id)
|
||||
|
||||
case Repo.delete(room) do
|
||||
{:ok, deleted} ->
|
||||
Enum.each(sensors, fn s ->
|
||||
Phoenix.PubSub.broadcast(Localiser.PubSub, "sensors", {:sensor_unenrolled, s.sensor_id})
|
||||
end)
|
||||
|
||||
Phoenix.PubSub.broadcast(Localiser.PubSub, "rooms", {:room_deleted, deleted.id, deleted.floor_id})
|
||||
{:ok, deleted}
|
||||
|
||||
error ->
|
||||
error
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -13,18 +13,28 @@ defmodule Localiser.Domain.Tags do
|
||||
end
|
||||
|
||||
def create_tag(attrs) do
|
||||
%Tag{}
|
||||
|> Tag.changeset(attrs)
|
||||
|> Repo.insert()
|
||||
case %Tag{} |> Tag.changeset(attrs) |> Repo.insert() do
|
||||
{:ok, tag} ->
|
||||
Phoenix.PubSub.broadcast(Localiser.PubSub, "tags", {:tag_enrolled, tag})
|
||||
{:ok, tag}
|
||||
|
||||
error ->
|
||||
error
|
||||
end
|
||||
end
|
||||
|
||||
def update_tag(%Tag{} = tag, attrs) do
|
||||
tag
|
||||
|> Tag.changeset(attrs)
|
||||
|> Repo.update()
|
||||
tag |> Tag.changeset(attrs) |> Repo.update()
|
||||
end
|
||||
|
||||
def delete_tag(%Tag{} = tag) do
|
||||
Repo.delete(tag)
|
||||
case Repo.delete(tag) do
|
||||
{:ok, deleted} ->
|
||||
Phoenix.PubSub.broadcast(Localiser.PubSub, "tags", {:tag_removed, deleted.tag_id})
|
||||
{:ok, deleted}
|
||||
|
||||
error ->
|
||||
error
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user