diff options
Diffstat (limited to 'models/nutrient-measurement.rkt')
| -rw-r--r-- | models/nutrient-measurement.rkt | 31 |
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 |