summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Peter <dev@marius-peter.com>2025-11-20 11:35:24 +0100
committerMarius Peter <dev@marius-peter.com>2025-11-20 11:35:24 +0100
commit434b521ddb70287b55d1dc8f5e24f18aeaa01fdc (patch)
treeac347997a3f552cd7fc360cd38a5d5ae4a18d4c3
parentc0c81afb346254893457c33e3a9eb9081d13332a (diff)
Add latest nutrient measurement/target hash retrieval function.
-rw-r--r--models/nutrient-measurement.rkt15
-rw-r--r--models/nutrient-target.rkt15
2 files changed, 30 insertions, 0 deletions
diff --git a/models/nutrient-measurement.rkt b/models/nutrient-measurement.rkt
index dbcb53c..199208f 100644
--- a/models/nutrient-measurement.rkt
+++ b/models/nutrient-measurement.rkt
@@ -148,6 +148,21 @@
#:desc
#:limit 1)))
+(define (get-latest-nutrient-measurement-hash)
+ (for/hash ([(n-id n-name n-formula residual-rows)
+ (in-query (current-conn)
+ (select n.id
+ n.canonical_name
+ n.formula
+ nm.measured_on
+ nv.value_ppm
+ #:from (TableExpr:AST ,joined)
+ #:order-by nm.measured_on
+ #:desc)
+ #:group '(#(0 1 2)))])
+ ;; residual-rows is a non-empty list of vectors: #(measured_on value_ppm)
+ (match-define (vector _measured-on value-ppm) (first residual-rows))
+ (values (nutrient n-id n-name n-formula) value-ppm)))
;; UPDATE
diff --git a/models/nutrient-target.rkt b/models/nutrient-target.rkt
index b9ca2d1..261fce0 100644
--- a/models/nutrient-target.rkt
+++ b/models/nutrient-target.rkt
@@ -142,6 +142,21 @@
#:desc
#:limit 1)))
+(define (get-latest-nutrient-target-hash)
+ (for/hash ([(n-id n-name n-formula residual-rows)
+ (in-query (current-conn)
+ (select n.id
+ n.canonical_name
+ n.formula
+ nt.effective_on
+ nv.value_ppm
+ #:from (TableExpr:AST ,joined)
+ #:order-by nt.effective_on
+ #:desc)
+ #:group '(#(0 1 2)))])
+ ;; residual-rows is a non-empty list of vectors: #(effective_on value_ppm)
+ (match-define (vector _effective-on value-ppm) (first residual-rows))
+ (values (nutrient n-id n-name n-formula) value-ppm)))
;; UPDATE
Copyright 2019--2026 Marius PETER