@@ -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 = `
4665SELECT
4766 p.id,
4867 p.name,
@@ -58,14 +77,17 @@ WHERE ps.active = 1
5877 AND p.sensors != '[]'
5978 AND p.sensors != ''
6079ORDER 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 = `
90127SELECT
91128 s.name,
92129 s.unit,
@@ -101,7 +138,14 @@ JOIN sensor_data sd ON s.id = sd.sensor_id
101138LEFT JOIN rolling_averages ra ON ra.sensor_id = s.id AND ra.create_dt = sd.create_dt
102139WHERE 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