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.rkt86
1 files changed, 39 insertions, 47 deletions
diff --git a/models/nutrient-measurement.rkt b/models/nutrient-measurement.rkt
index ee336fe..5b999d8 100644
--- a/models/nutrient-measurement.rkt
+++ b/models/nutrient-measurement.rkt
@@ -35,62 +35,53 @@
#:transparent
#:property prop:custom-write
(λ (v out _)
- (fprintf out "Measurement #~a on ~a\n"
+ (fprintf out
+ "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)
- (fprintf out "~a ~a\n"
+ (fprintf out
+ "~a ~a\n"
(~a (nutrient-name n) #:min-width 14)
(~a v #:max-width 6 #:align 'right)))))
-
;; CREATE
(define (create-nutrient-measurement! measured-on nutrient-values)
- (or (get-nutrient-measurement #:measured-on measured-on)
- (with-tx
- (query-exec (current-conn)
- (insert #:into nutrient_measurements
- #:set [measured_on ,measured-on]))
- (define nm-id (query-value (current-conn)
- (select id
- #:from nutrient_measurements
- #:where (= measured_on ,measured-on))))
- (query-exec (current-conn)
- (insert #:into nutrient_value_sets
- #:set [nutrient_measurement_id ,nm-id]))
- (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)
- (query-exec (current-conn)
- (insert #:into nutrient_values
- #:set
- [value_set_id ,nvs-id]
- [nutrient_id ,(nutrient-id n)]
- [value_ppm ,v])))
- (get-nutrient-measurement #:measured-on measured-on))))
-
+ (or
+ (get-nutrient-measurement #:measured-on measured-on)
+ (with-tx
+ (query-exec (current-conn) (insert #:into nutrient_measurements #:set [measured_on ,measured-on]))
+ (define nm-id
+ (query-value (current-conn)
+ (select id #:from nutrient_measurements #:where (= measured_on ,measured-on))))
+ (query-exec (current-conn)
+ (insert #:into nutrient_value_sets #:set [nutrient_measurement_id ,nm-id]))
+ (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)
+ (query-exec (current-conn)
+ (insert #:into nutrient_values
+ #:set [value_set_id ,nvs-id]
+ [nutrient_id ,(nutrient-id n)]
+ [value_ppm ,v])))
+ (get-nutrient-measurement #:measured-on measured-on))))
;; READ
(struct acc (measured-on pairs) #:transparent)
-
(define joined
- (table-expr-qq
- (inner-join
- (inner-join
- (inner-join
- (as nutrient_measurements nm)
- (as nutrient_value_sets nvs)
- #:on (= nvs.nutrient_measurement_id nm.id))
- (as nutrient_values nv)
- #:on (= nv.value_set_id nvs.id))
- (as nutrients n)
- #:on (= n.id nv.nutrient_id))))
+ (table-expr-qq (inner-join (inner-join (inner-join (as nutrient_measurements nm)
+ (as nutrient_value_sets nvs)
+ #:on (= nvs.nutrient_measurement_id nm.id))
+ (as nutrient_values nv)
+ #:on (= nv.value_set_id nvs.id))
+ (as nutrients n)
+ #:on (= n.id nv.nutrient_id))))
+
(define (get-nutrient-measurements)
(define query (select nm.id nm.measured_on
@@ -155,7 +146,10 @@
(define (get-nutrient-measurement-values nutrient-measurement)
(for/list ([(nutrient-id name formula value_ppm)
(in-query (current-conn)
- (select n.id n.canonical_name n.formula nv.value_ppm
+ (select n.id
+ n.canonical_name
+ n.formula
+ nv.value_ppm
#:from (TableExpr:AST ,joined)
#:where (= nm.id ,(nutrient-measurement-id nutrient-measurement))))])
(cons (nutrient nutrient-id name formula) value_ppm)))
@@ -172,17 +166,15 @@
(select value_ppm
#:from (TableExpr:AST ,joined)
#:where (= nv.nutrient_id ,(nutrient-id nutrient))
- #:order-by nm.measured_on #:desc
+ #:order-by nm.measured_on
+ #:desc
#:limit 1)))
;; UPDATE
-
;; 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))))
+ (query-exec (current-conn) (delete #:from nutrient_measurements #:where (= id ,id))))
Copyright 2019--2026 Marius PETER