53 lines
1.1 KiB
Elixir
53 lines
1.1 KiB
Elixir
defmodule Localiser.Domain.Floors do
|
|
import Ecto.Query
|
|
|
|
alias Localiser.Repo
|
|
alias Localiser.Domain.Schema.Floor
|
|
|
|
def list_floors do
|
|
Repo.all(Floor)
|
|
end
|
|
|
|
def get_floor!(id), do: Repo.get!(Floor, id)
|
|
def any?, do: Repo.exists?(Floor)
|
|
|
|
def create_floor(attrs) do
|
|
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
|
|
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
|
|
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
|
|
Floor
|
|
|> preload(:rooms)
|
|
|> Repo.all()
|
|
end
|
|
end
|