init: inital commit

This commit is contained in:
2026-04-16 15:46:00 +02:00
commit 34ddbe669e
40 changed files with 1556 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
defmodule Localiser.Domain.Schema.Floor do
use Ecto.Schema
import Ecto.Changeset
alias Localiser.Domain.Schema.Room
schema "floors" do
field :name, :string
has_many :rooms, Room
timestamps(type: :utc_datetime)
end
@doc false
def changeset(floor, attrs) do
floor
|> cast(attrs, [:name])
|> validate_required([:name])
end
end
+28
View File
@@ -0,0 +1,28 @@
defmodule Localiser.Domain.Schema.Room do
use Ecto.Schema
import Ecto.Changeset
alias Localiser.Domain.Schema.Floor
alias Localiser.Domain.Schema.Sensor
schema "rooms" do
field :name, :string
field :width, :float
field :height, :float
field :offset_x, :float
field :offset_y, :float
belongs_to :floor, Floor
has_many :sensors, Sensor
timestamps(type: :utc_datetime)
end
@doc false
def changeset(room, attrs) do
room
|> cast(attrs, [:name, :floor_id, :width, :height, :offset_x, :offset_y])
|> validate_required([:name, :floor_id])
|> assoc_constraint(:floor)
end
end
+27
View File
@@ -0,0 +1,27 @@
defmodule Localiser.Domain.Schema.Sensor do
use Ecto.Schema
import Ecto.Changeset
alias Localiser.Domain.Schema.Room
alias Localiser.Domain.Schema.SensorCalibration
schema "sensors" do
field :sensor_id, :string
field :x, :float
field :y, :float
belongs_to :room, Room
has_many :calibrations, SensorCalibration
timestamps(type: :utc_datetime)
end
@doc false
def changeset(sensor, attrs) do
sensor
|> cast(attrs, [:sensor_id, :room_id, :x, :y])
|> validate_required([:sensor_id])
|> unique_constraint(:sensor_id)
|> assoc_constraint(:room)
end
end
@@ -0,0 +1,26 @@
defmodule Localiser.Domain.Schema.SensorCalibration do
use Ecto.Schema
import Ecto.Changeset
alias Localiser.Domain.Schema.Sensor
@timestamps_opts [inserted_at: :inserted_at, updated_at: false, type: :utc_datetime]
schema "sensor_calibrations" do
field :rssi_ref, :integer
field :path_loss_exp, :float
field :calibrated_at, :utc_datetime
belongs_to :sensor, Sensor
timestamps(@timestamps_opts)
end
@doc false
def changeset(calibration, attrs) do
calibration
|> cast(attrs, [:sensor_id, :rssi_ref, :path_loss_exp, :calibrated_at])
|> validate_required([:sensor_id, :rssi_ref, :path_loss_exp, :calibrated_at])
|> assoc_constraint(:sensor)
end
end
+21
View File
@@ -0,0 +1,21 @@
defmodule Localiser.Domain.Schema.Tag do
use Ecto.Schema
import Ecto.Changeset
schema "tags" do
field :tag_id, :string
field :name, :string
field :color, :string
field :metadata, :map
timestamps(type: :utc_datetime)
end
@doc false
def changeset(tag, attrs) do
tag
|> cast(attrs, [:tag_id, :name, :color, :metadata])
|> validate_required([:tag_id])
|> unique_constraint(:tag_id)
end
end
+28
View File
@@ -0,0 +1,28 @@
defmodule Localiser.Domain.Schema.User do
use Ecto.Schema
import Ecto.Changeset
schema "users" do
field :username, :string
field :password_hash, :string, redact: true
field :password, :string, virtual: true, redact: true
timestamps(type: :utc_datetime)
end
@doc false
def changeset(user, attrs) do
user
|> cast(attrs, [:username, :password])
|> validate_required([:username, :password])
|> validate_length(:password, min: 8)
|> unique_constraint(:username)
|> hash_password()
end
defp hash_password(%Ecto.Changeset{valid?: true, changes: %{password: pw}} = changeset) do
put_change(changeset, :password_hash, Argon2.hash_pwd_salt(pw))
end
defp hash_password(changeset), do: changeset
end