1- import { desc , sql } from 'drizzle-orm'
1+ import { desc } from 'drizzle-orm'
22import { inArray } from 'drizzle-orm/sql/expressions/conditions'
33import { type Context } from '../../helpers/context.ts'
44import { readings } from '../../helpers/schema.ts'
@@ -17,17 +17,17 @@ export default {
1717 } ,
1818 lastWateredTime : async ( queries , context : Context ) => {
1919 const deviceIds = queries . map ( ( query ) => query . obj . id )
20- const result = await context . db . execute < { time : string ; device_id : string } > ( sql `
20+ const result = await context . sql < { time : string ; device_id : string } [ ] > `
2121 SELECT DISTINCT ON (device_id) *
2222 FROM (SELECT device_id,
2323 time::timestamptz,
2424 moisture - lead(moisture) OVER (PARTITION BY device_id ORDER BY time DESC) AS moisture_increase
2525 FROM readings
26- WHERE device_id = ANY (ARRAY [ ${ sql ( deviceIds . join ( ',' ) ) } ]::bigint[])
26+ WHERE device_id IN ${ context . sql ( deviceIds ) }
2727 AND time > now() - '90 days'::interval) AS readings
2828 WHERE moisture_increase > 10
2929 ORDER BY device_id, time DESC;
30- ` )
30+ `
3131
3232 return queries . map ( ( query ) => {
3333 const time = result . find ( ( entry ) => entry . device_id === `${ query . obj . id } ` ) ?. time
@@ -36,8 +36,7 @@ export default {
3636 } ,
3737 readings : async ( queries , context : Context ) => {
3838 const deviceIds = queries . map ( ( query ) => query . obj . id )
39- const result = await context . db . execute (
40- sql `
39+ const result = await context . sql `
4140 SELECT device_id, day AS time, moisture, temperature, light, battery_voltage AS "batteryVoltage"
4241 FROM (SELECT device_id,
4342 time_bucket_gapfill('1 day'::interval, time) AS day,
@@ -46,14 +45,13 @@ export default {
4645 locf(avg(light)) AS light,
4746 locf(avg(battery_voltage)) AS battery_voltage
4847 FROM readings
49- WHERE device_id = ANY (ARRAY [ ${ sql ( deviceIds . join ( ',' ) ) } ]::bigint[])
48+ WHERE device_id IN ${ context . sql ( deviceIds ) }
5049 AND time > now() - INTERVAL '90 days'
5150 AND time < now()
5251 GROUP BY day, device_id
5352 ORDER BY day ASC) AS readings
5453 WHERE moisture IS NOT NULL; -- Exclude entries with non-null readings that can occur when period is before first readings.
5554 `
56- )
5755
5856 return queries . map ( ( query ) => result . filter ( ( entry ) => entry . device_id === `${ query . obj . id } ` ) )
5957 }
0 commit comments