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.rkt31
1 files changed, 20 insertions, 11 deletions
diff --git a/models/nutrient-measurement.rkt b/models/nutrient-measurement.rkt
index 913e402..b4baba6 100644
--- a/models/nutrient-measurement.rkt
+++ b/models/nutrient-measurement.rkt
@@ -12,11 +12,11 @@
(->* ()
(#:id (or/c #f exact-nonnegative-integer?) #:measured-on (or/c #f string?))
(or/c nutrient-measurement? #f))]
- [get-nutrient-measurement-values (-> nutrient-measurement? nutrient-value-hash/c)]
- [get-nutrient-measurement-value (-> nutrient-measurement? nutrient? (or/c number? #f))]
- [get-latest-nutrient-measurement-value (-> nutrient? (or/c number? #f))]
+ [get-nutrient-measurement-values (-> nutrient-measurement-or-id/c nutrient-value-hash/c)]
+ [get-nutrient-measurement-value (-> nutrient-measurement-or-id/c nutrient? (or/c real? #f))]
+ [get-latest-nutrient-measurement-value (-> nutrient? (or/c real? #f))]
[get-latest-nutrient-measurement-hash (-> nutrient-value-hash/c)]
- [delete-nutrient-measurement! (-> nutrient-measurement? void?)]))
+ [delete-nutrient-measurement! (-> nutrient-measurement-or-id/c void?)]))
(require racket/contract
db
@@ -38,6 +38,15 @@
(~a (nutrient-canonical-name n) #:min-width 14)
(~a v #:max-width 6 #:align 'right)))))
+(define nutrient-measurement-id? exact-nonnegative-integer?)
+
+(define nutrient-measurement-or-id/c (or/c nutrient-measurement? nutrient-measurement-id?))
+
+(define (->nm-id nm-or-id)
+ (match nm-or-id
+ [(? nutrient-measurement-id? id) id]
+ [(nutrient-measurement id _ _) id]))
+
;; CREATE
(define (create-nutrient-measurement! measured-on nutrient-values)
@@ -120,7 +129,7 @@
[(list row) (grouped-row->nutrient-measurement row)]
[many (error 'get-nutrient-measurement "expected 1 nutrient measurement, got ~a" (length many))]))
-(define (get-nutrient-measurement-values nutrient-measurement)
+(define (get-nutrient-measurement-values nm-or-id)
(for/hash ([(nutrient-id canonical-name french-name formula value_ppm)
(in-query (current-conn)
(select n.id
@@ -129,14 +138,14 @@
n.formula
nv.value_ppm
#:from (TableExpr:AST ,joined)
- #:where (= nm.id ,(nutrient-measurement-id nutrient-measurement))))])
+ #:where (= nm.id ,(->nm-id nm-or-id))))])
(values (nutrient nutrient-id canonical-name french-name formula) value_ppm)))
-(define (get-nutrient-measurement-value nutrient-measurement nutrient)
+(define (get-nutrient-measurement-value nm-or-id nutrient)
(query-maybe-value (current-conn)
(select value_ppm
#:from (TableExpr:AST ,joined)
- #:where (and (= nm.id ,(nutrient-measurement-id nutrient-measurement))
+ #:where (and (= nm.id ,(->nm-id nm-or-id))
(= nv.nutrient_id ,(nutrient-id nutrient))))))
(define (get-latest-nutrient-measurement-value nutrient)
@@ -171,9 +180,9 @@
;; DELETE
-(define (delete-nutrient-measurement! nutrient-measurement)
- (define id (nutrient-measurement-id nutrient-measurement))
- (query-exec (current-conn) (delete #:from nutrient_measurements #:where (= id ,id))))
+(define (delete-nutrient-measurement! nm-or-id)
+ (query-exec (current-conn)
+ (delete #:from nutrient_measurements #:where (= id ,(->nm-id nm-or-id)))))
(module+ test
(require rackunit
Copyright 2019--2026 Marius PETER