Skip to content

Commit f8edf9b

Browse files
committed
Update overlay API endpoint for linked sensor data
1 parent 9383171 commit f8edf9b

1 file changed

Lines changed: 56 additions & 12 deletions

File tree

handlers/overlay.go

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,30 @@ func GetPlantMoistureReadings() []PlantMoistureReading {
3838
db, err := model.GetDB()
3939
if err != nil {
4040
fieldLogger.WithError(err).Error("Error opening database")
41-
return nil
41+
return []PlantMoistureReading{}
4242
}
4343

44-
// Query living plants that have sensors linked
45-
rows, err := db.Query(`
44+
var plantQuery string
45+
if model.IsPostgres() {
46+
plantQuery = `
47+
SELECT
48+
p.id,
49+
p.name,
50+
p.sensors,
51+
((CURRENT_DATE - p.start_dt::date) / 7 + 1) AS current_week,
52+
((CURRENT_DATE - p.start_dt::date) + 1) AS current_day
53+
FROM plant p
54+
JOIN plant_status_log psl ON p.id = psl.plant_id
55+
JOIN plant_status ps ON psl.status_id = ps.id
56+
WHERE ps.active = true
57+
AND psl.date = (SELECT MAX(date) FROM plant_status_log WHERE plant_id = p.id)
58+
AND p.sensors IS NOT NULL
59+
AND p.sensors != '[]'
60+
AND p.sensors != ''
61+
ORDER BY p.name
62+
`
63+
} else {
64+
plantQuery = `
4665
SELECT
4766
p.id,
4867
p.name,
@@ -58,14 +77,17 @@ WHERE ps.active = 1
5877
AND p.sensors != '[]'
5978
AND p.sensors != ''
6079
ORDER BY p.name
61-
`)
80+
`
81+
}
82+
83+
rows, err := db.Query(plantQuery)
6284
if err != nil {
6385
fieldLogger.WithError(err).Error("Error querying plants")
64-
return nil
86+
return []PlantMoistureReading{}
6587
}
6688
defer rows.Close()
6789

68-
var results []PlantMoistureReading
90+
results := []PlantMoistureReading{}
6991

7092
for rows.Next() {
7193
var plantID, currentWeek, currentDay int
@@ -82,11 +104,26 @@ ORDER BY p.name
82104
continue
83105
}
84106

85-
for _, sensorID := range sensorIDs {
86-
var sensorName, unit, trend string
87-
var value float64
88-
89-
err := db.QueryRow(`
107+
var sensorQuery string
108+
if model.IsPostgres() {
109+
sensorQuery = `
110+
SELECT
111+
s.name,
112+
s.unit,
113+
sd.value,
114+
CASE
115+
WHEN sd.value > ra.avg_value THEN 'up'
116+
WHEN sd.value < ra.avg_value THEN 'down'
117+
ELSE 'flat'
118+
END AS trend
119+
FROM sensors s
120+
JOIN sensor_data sd ON s.id = sd.sensor_id
121+
LEFT JOIN rolling_averages ra ON ra.sensor_id = s.id AND ra.create_dt = sd.create_dt
122+
WHERE s.id = $1
123+
AND sd.id = (SELECT MAX(id) FROM sensor_data WHERE sensor_id = s.id)
124+
`
125+
} else {
126+
sensorQuery = `
90127
SELECT
91128
s.name,
92129
s.unit,
@@ -101,7 +138,14 @@ JOIN sensor_data sd ON s.id = sd.sensor_id
101138
LEFT JOIN rolling_averages ra ON ra.sensor_id = s.id AND ra.create_dt = sd.create_dt
102139
WHERE s.id = ?
103140
AND sd.id = (SELECT MAX(id) FROM sensor_data WHERE sensor_id = s.id)
104-
`, sensorID).Scan(&sensorName, &unit, &value, &trend)
141+
`
142+
}
143+
144+
for _, sensorID := range sensorIDs {
145+
var sensorName, unit, trend string
146+
var value float64
147+
148+
err := db.QueryRow(sensorQuery, sensorID).Scan(&sensorName, &unit, &value, &trend)
105149
if err != nil {
106150
fieldLogger.WithError(err).WithField("sensor_id", sensorID).Error("Error querying sensor reading")
107151
continue

0 commit comments

Comments
 (0)