Add `read_at` column to `sensor_readings` table. Closes #1363
parent
d2549c0208
commit
077894bb4d
|
@ -10,13 +10,14 @@ module SensorReadings
|
|||
end
|
||||
|
||||
optional do
|
||||
time :read_at
|
||||
integer :mode,
|
||||
in: CeleryScriptSettingsBag::ALLOWED_PIN_MODES,
|
||||
default: CeleryScriptSettingsBag::DIGITAL
|
||||
end
|
||||
|
||||
def execute
|
||||
SensorReading.create!(inputs)
|
||||
SensorReading.create!(inputs.merge(read_at: read_at || Time.now))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
class SensorReadingSerializer < ApplicationSerializer
|
||||
attributes :mode, :pin, :value, :x, :y, :z
|
||||
attributes :mode, :pin, :value, :x, :y, :z, :read_at
|
||||
# This is for legacy support reasons.
|
||||
# Very old sensor_readings will have a
|
||||
# read_at value of `nil`, so we pre-populate it
|
||||
# to `created_at` for the convinience of API users.
|
||||
def read_at
|
||||
object.read_at || object.created_at
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
class AddReadAtToSensorReadings < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :sensor_readings, :read_at, :datetime, default: nil
|
||||
end
|
||||
end
|
|
@ -1483,7 +1483,8 @@ CREATE TABLE public.sensor_readings (
|
|||
pin integer,
|
||||
created_at timestamp without time zone NOT NULL,
|
||||
updated_at timestamp without time zone NOT NULL,
|
||||
mode integer DEFAULT 0
|
||||
mode integer DEFAULT 0,
|
||||
read_at timestamp without time zone
|
||||
);
|
||||
|
||||
|
||||
|
@ -3444,6 +3445,7 @@ INSERT INTO "schema_migrations" (version) VALUES
|
|||
('20191107170431'),
|
||||
('20191119204916'),
|
||||
('20191203163621'),
|
||||
('20191219212755');
|
||||
('20191219212755'),
|
||||
('20191220010646');
|
||||
|
||||
|
||||
|
|
|
@ -229,6 +229,7 @@ export function fakeSensorReading(): TaggedSensorReading {
|
|||
return fakeResource("SensorReading", {
|
||||
id: idCounter++,
|
||||
created_at: "2018-01-11T20:20:38.362Z",
|
||||
read_at: "2018-01-11T20:20:38.362Z",
|
||||
pin: 1,
|
||||
value: 0,
|
||||
mode: 0,
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
"coveralls": "3.0.9",
|
||||
"enzyme": "3.10.0",
|
||||
"enzyme-adapter-react-16": "1.15.1",
|
||||
"farmbot": "9.0.0-rc1",
|
||||
"farmbot": "9.0.0",
|
||||
"i18next": "19.0.2",
|
||||
"install": "0.13.0",
|
||||
"lodash": "4.17.15",
|
||||
|
|
|
@ -7,11 +7,39 @@ describe Api::SensorReadingsController do
|
|||
let(:user) { FactoryBot.create(:user) }
|
||||
let (:reading) { FactoryBot.create(:sensor_reading, device: user.device) }
|
||||
|
||||
it "sets a default `read_at` value" do
|
||||
sign_in user
|
||||
before = SensorReading.count
|
||||
read_at = Time.now - 5.hours
|
||||
post :create,
|
||||
body: {
|
||||
pin: 13,
|
||||
value: 128,
|
||||
x: nil,
|
||||
y: 1,
|
||||
z: 2,
|
||||
mode: 1
|
||||
}.to_json,
|
||||
params: { format: :json }
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
expect(json[:created_at]).to eq(json[:read_at])
|
||||
end
|
||||
|
||||
it "makes a sensor reading" do
|
||||
sign_in user
|
||||
before = SensorReading.count
|
||||
read_at = Time.now - 5.hours
|
||||
post :create,
|
||||
body: { pin: 13, value: 128, x: nil, y: 1, z: 2, mode: 1 }.to_json,
|
||||
body: {
|
||||
pin: 13,
|
||||
value: 128,
|
||||
x: nil,
|
||||
y: 1,
|
||||
z: 2,
|
||||
mode: 1,
|
||||
read_at: read_at
|
||||
}.to_json,
|
||||
params: { format: :json }
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
|
@ -24,6 +52,7 @@ describe Api::SensorReadingsController do
|
|||
expect(json[:z]).to eq(2)
|
||||
expect(json[:pin]).to eq(13)
|
||||
expect(json[:mode]).to eq(1)
|
||||
expect(read_at.as_json.first(23)).to eq(json[:read_at].first(23))
|
||||
expect(before < SensorReading.count).to be_truthy
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue