feat: expose CRUD, onboarding, pubsub via web
This commit is contained in:
@@ -9,6 +9,7 @@ defmodule Localiser.Domain.Floors do
|
||||
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
|
||||
|
||||
@@ -9,6 +9,8 @@ defmodule Localiser.Domain.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)
|
||||
|
||||
@@ -6,6 +6,7 @@ defmodule Localiser.Domain.Schema.User do
|
||||
field :username, :string
|
||||
field :password_hash, :string, redact: true
|
||||
field :password, :string, virtual: true, redact: true
|
||||
field :is_admin, :boolean, default: false
|
||||
|
||||
timestamps(type: :utc_datetime)
|
||||
end
|
||||
@@ -13,7 +14,7 @@ defmodule Localiser.Domain.Schema.User do
|
||||
@doc false
|
||||
def changeset(user, attrs) do
|
||||
user
|
||||
|> cast(attrs, [:username, :password])
|
||||
|> cast(attrs, [:username, :password, :is_admin])
|
||||
|> validate_required([:username, :password])
|
||||
|> validate_length(:password, min: 8)
|
||||
|> unique_constraint(:username)
|
||||
|
||||
@@ -9,6 +9,12 @@ defmodule Localiser.Domain.Sensors do
|
||||
Repo.all(Sensor)
|
||||
end
|
||||
|
||||
def list_unplaced do
|
||||
Sensor |> where([s], is_nil(s.room_id)) |> Repo.all()
|
||||
end
|
||||
|
||||
def any_placed?, do: Repo.exists?(from s in Sensor, where: not is_nil(s.room_id))
|
||||
|
||||
def list_sensors_for_room(room_id) do
|
||||
Sensor
|
||||
|> where([s], s.room_id == ^room_id)
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
defmodule Localiser.Domain.System do
|
||||
alias Localiser.Domain.{Floors, Rooms, Sensors, Tags, Users}
|
||||
|
||||
def onboarding_status do
|
||||
%{
|
||||
has_admin: Users.any?(),
|
||||
has_floors: Floors.any?(),
|
||||
has_rooms: Rooms.any?(),
|
||||
has_sensors_placed: Sensors.any_placed?(),
|
||||
has_tags: Tags.any?()
|
||||
}
|
||||
end
|
||||
end
|
||||
@@ -6,6 +6,8 @@ defmodule Localiser.Domain.Tags do
|
||||
Repo.all(Tag)
|
||||
end
|
||||
|
||||
def any?, do: Repo.exists?(Tag)
|
||||
|
||||
def get_tag!(id), do: Repo.get!(Tag, id)
|
||||
|
||||
def get_tag_by_tag_id(tag_id) do
|
||||
|
||||
@@ -2,8 +2,19 @@ defmodule Localiser.Domain.Users do
|
||||
alias Localiser.Repo
|
||||
alias Localiser.Domain.Schema.User
|
||||
|
||||
def list_users, do: Repo.all(User)
|
||||
|
||||
def get_user!(id), do: Repo.get!(User, id)
|
||||
|
||||
def get_user(id) do
|
||||
case Repo.get(User, id) do
|
||||
nil -> {:error, :not_found}
|
||||
user -> {:ok, user}
|
||||
end
|
||||
end
|
||||
|
||||
def any?, do: Repo.exists?(User)
|
||||
|
||||
def get_user_by_username(username) do
|
||||
Repo.get_by(User, username: username)
|
||||
end
|
||||
@@ -14,6 +25,20 @@ defmodule Localiser.Domain.Users do
|
||||
|> Repo.insert()
|
||||
end
|
||||
|
||||
def update_user(%User{} = user, attrs) do
|
||||
user
|
||||
|> User.changeset(attrs)
|
||||
|> Repo.update()
|
||||
end
|
||||
|
||||
def promote_to_admin(%User{} = user) do
|
||||
user
|
||||
|> Ecto.Changeset.change(is_admin: true)
|
||||
|> Repo.update()
|
||||
end
|
||||
|
||||
def delete_user(%User{} = user), do: Repo.delete(user)
|
||||
|
||||
def authenticate_user(username, password) do
|
||||
user = get_user_by_username(username)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user