init: inital commit
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user