fix: sensor schema drift
This commit is contained in:
@@ -9,6 +9,8 @@ defmodule Localiser.Domain.Schema.Sensor do
|
||||
field :sensor_id, :string
|
||||
field :x, :float
|
||||
field :y, :float
|
||||
field :floor_x, :float, virtual: true
|
||||
field :floor_y, :float, virtual: true
|
||||
|
||||
belongs_to :room, Room
|
||||
has_many :calibrations, SensorCalibration
|
||||
|
||||
@@ -6,7 +6,10 @@ defmodule Localiser.Domain.Sensors do
|
||||
alias Localiser.Domain.Schema.SensorCalibration
|
||||
|
||||
def list_sensors do
|
||||
Repo.all(Sensor)
|
||||
Sensor
|
||||
|> Repo.all()
|
||||
|> Repo.preload(:room)
|
||||
|> Enum.map(&populate_floor_coords/1)
|
||||
end
|
||||
|
||||
def list_unplaced do
|
||||
@@ -28,7 +31,12 @@ defmodule Localiser.Domain.Sensors do
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
def get_sensor!(id), do: Repo.get!(Sensor, id)
|
||||
def get_sensor!(id) do
|
||||
Sensor
|
||||
|> Repo.get!(id)
|
||||
|> Repo.preload(:room)
|
||||
|> populate_floor_coords()
|
||||
end
|
||||
|
||||
def get_sensor_by_sensor_id(sensor_id) do
|
||||
Repo.get_by(Sensor, sensor_id: sensor_id)
|
||||
@@ -108,6 +116,7 @@ defmodule Localiser.Domain.Sensors do
|
||||
def place_sensor(%Sensor{} = sensor, room_id, {x, y}) do
|
||||
with {:ok, sensor} <- update_sensor(sensor, %{room_id: room_id, x: x, y: y}) do
|
||||
room = Repo.preload(sensor, :room).room
|
||||
sensor = populate_floor_coords(%{sensor | room: room})
|
||||
Phoenix.PubSub.broadcast(Localiser.PubSub, "sensors", {:sensor_enrolled, sensor, room})
|
||||
{:ok, sensor}
|
||||
end
|
||||
@@ -121,4 +130,13 @@ defmodule Localiser.Domain.Sensors do
|
||||
{:ok, sensor}
|
||||
end
|
||||
end
|
||||
|
||||
defp populate_floor_coords(%Sensor{room: nil} = sensor), do: sensor
|
||||
|
||||
defp populate_floor_coords(%Sensor{room: room} = sensor) do
|
||||
%{sensor |
|
||||
floor_x: (room.x || 0.0) + (sensor.x || 0.0),
|
||||
floor_y: (room.y || 0.0) + (sensor.y || 0.0)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -178,8 +178,7 @@ defmodule Localiser.Web.Controllers.SensorController do
|
||||
sensor_id: sensor.sensor_id,
|
||||
room_id: sensor.room_id,
|
||||
floor_x: sensor.floor_x,
|
||||
floor_y: sensor.floor_y,
|
||||
rssi_ref: sensor.rssi_ref
|
||||
floor_y: sensor.floor_y
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
@@ -250,10 +250,10 @@ defmodule Localiser.Web.Schemas do
|
||||
title: "SensorPlaceParams", type: :object,
|
||||
properties: %{
|
||||
room_id: %Schema{type: :integer},
|
||||
offset_x: %Schema{type: :number, format: :float},
|
||||
offset_y: %Schema{type: :number, format: :float}
|
||||
x: %Schema{type: :number, format: :float},
|
||||
y: %Schema{type: :number, format: :float}
|
||||
},
|
||||
required: [:room_id, :offset_x, :offset_y]
|
||||
required: [:room_id, :x, :y]
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user