fix: sensor schema drift

This commit is contained in:
2026-05-13 20:28:21 +02:00
parent b1c7ded7ab
commit ecc0870cae
4 changed files with 26 additions and 7 deletions
+2
View File
@@ -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
+20 -2
View File
@@ -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
+3 -3
View File
@@ -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