From ecc0870cae4a8a269ded6659816edb9004f90355 Mon Sep 17 00:00:00 2001 From: dvdrw Date: Wed, 13 May 2026 20:28:21 +0200 Subject: [PATCH] fix: sensor schema drift --- lib/localiser/domain/schema/sensor.ex | 2 ++ lib/localiser/domain/sensors.ex | 22 +++++++++++++++++-- .../web/controllers/sensor_controller.ex | 3 +-- lib/localiser/web/schemas.ex | 6 ++--- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/lib/localiser/domain/schema/sensor.ex b/lib/localiser/domain/schema/sensor.ex index 1d317fe..edc93ba 100644 --- a/lib/localiser/domain/schema/sensor.ex +++ b/lib/localiser/domain/schema/sensor.ex @@ -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 diff --git a/lib/localiser/domain/sensors.ex b/lib/localiser/domain/sensors.ex index cdcbe84..f37ef0a 100644 --- a/lib/localiser/domain/sensors.ex +++ b/lib/localiser/domain/sensors.ex @@ -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 diff --git a/lib/localiser/web/controllers/sensor_controller.ex b/lib/localiser/web/controllers/sensor_controller.ex index 47bdba4..7afdfc1 100644 --- a/lib/localiser/web/controllers/sensor_controller.ex +++ b/lib/localiser/web/controllers/sensor_controller.ex @@ -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 diff --git a/lib/localiser/web/schemas.ex b/lib/localiser/web/schemas.ex index c3399e4..ad44506 100644 --- a/lib/localiser/web/schemas.ex +++ b/lib/localiser/web/schemas.ex @@ -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