summaryrefslogtreecommitdiff
path: root/models/nutrient-measurement.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'models/nutrient-measurement.rkt')
-rw-r--r--models/nutrient-measurement.rkt62
1 files changed, 29 insertions, 33 deletions
diff --git a/models/nutrient-measurement.rkt b/models/nutrient-measurement.rkt
index 199208f..fa1171c 100644
--- a/models/nutrient-measurement.rkt
+++ b/models/nutrient-measurement.rkt
@@ -6,14 +6,13 @@
(rename-out [nutrient-measurement-measured-on nutrient-measurement-date]
[nutrient-measurement-nutrient-values nutrient-measurement-values])
(contract-out
- [create-nutrient-measurement!
- (-> string? (listof nutrient-value-pair/c) nutrient-measurement?)]
+ [create-nutrient-measurement! (-> string? nutrient-value-hash/c nutrient-measurement?)]
[get-nutrient-measurements (-> (listof nutrient-measurement?))]
[get-nutrient-measurement
(->* ()
(#:id (or/c #f exact-nonnegative-integer?) #:measured-on (or/c #f string?))
(or/c nutrient-measurement? #f))]
- [get-nutrient-measurement-values (-> nutrient-measurement? (listof nutrient-value-pair/c))]
+ [get-nutrient-measurement-values (-> nutrient-measurement? nutrient-value-hash/c)]
[get-nutrient-measurement-value (-> nutrient-measurement? nutrient? number?)]
[get-latest-nutrient-measurement-value (-> nutrient? (or/c number? #f))]
[get-latest-nutrient-measurement-hash (-> (hash/c nutrient? number?))]
@@ -33,8 +32,7 @@
"Measurement #~a on ~a\n"
(nutrient-measurement-id v)
(nutrient-measurement-measured-on v))
- (for ([nv (nutrient-measurement-nutrient-values v)])
- (match-define (cons n v) nv)
+ (for ([(n v) (in-hash (nutrient-measurement-nutrient-values v))])
(fprintf out
"~a ~a\n"
(~a (nutrient-name n) #:min-width 14)
@@ -55,8 +53,7 @@
(define nvs-id
(query-value (current-conn)
(select id #:from nutrient_value_sets #:where (= nutrient_measurement_id ,nm-id))))
- (for ([nv nutrient-values])
- (match-define (cons n v) nv)
+ (for ([(n v) (in-hash nutrient-values)])
(query-exec (current-conn)
(insert #:into nutrient_values
#:set [value_set_id ,nvs-id]
@@ -77,21 +74,21 @@
(define (grouped-row->nutrient-measurement row)
(match-define (vector nm-id measured-on residuals) row)
- (define nutrient-value-pairs (residuals->nutrient-value-pairs residuals))
- (nutrient-measurement nm-id measured-on nutrient-value-pairs))
+ (nutrient-measurement nm-id measured-on (residuals->nutrient-value-hash residuals)))
(define (get-nutrient-measurements)
- (define grouped-rows (query-rows (current-conn)
- (select nm.id
- nm.measured_on
- n.id
- n.canonical_name
- n.formula
- nv.value_ppm
- #:from (TableExpr:AST ,joined)
- #:order-by nm.measured_on
- #:desc)
- #:group '#(0 1)))
+ (define grouped-rows
+ (query-rows (current-conn)
+ (select nm.id
+ nm.measured_on
+ n.id
+ n.canonical_name
+ n.formula
+ nv.value_ppm
+ #:from (TableExpr:AST ,joined)
+ #:order-by nm.measured_on
+ #:desc)
+ #:group '#(0 1)))
(for/list ([row grouped-rows])
(grouped-row->nutrient-measurement row)))
@@ -122,7 +119,7 @@
[many (error 'get-nutrient-measurement "expected 1 nutrient measurement, got ~a" (length many))]))
(define (get-nutrient-measurement-values nutrient-measurement)
- (for/list ([(nutrient-id name formula value_ppm)
+ (for/hash ([(nutrient-id name formula value_ppm)
(in-query (current-conn)
(select n.id
n.canonical_name
@@ -130,7 +127,7 @@
nv.value_ppm
#:from (TableExpr:AST ,joined)
#:where (= nm.id ,(nutrient-measurement-id nutrient-measurement))))])
- (cons (nutrient nutrient-id name formula) value_ppm)))
+ (values (nutrient nutrient-id name formula) value_ppm)))
(define (get-nutrient-measurement-value nutrient-measurement nutrient)
(query-maybe-value (current-conn)
@@ -149,17 +146,16 @@
#: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)))])
+ (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)))
Copyright 2019--2026 Marius PETER