diff options
Diffstat (limited to 'models/nutrient-measurement.rkt')
| -rw-r--r-- | models/nutrient-measurement.rkt | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/models/nutrient-measurement.rkt b/models/nutrient-measurement.rkt index ae0e2ef..1f8bd7b 100644 --- a/models/nutrient-measurement.rkt +++ b/models/nutrient-measurement.rkt @@ -3,14 +3,14 @@ (provide nutrient-measurement nutrient-measurement? nutrient-measurement-id - (rename-out [nutrient-measurement-measured-on nutrient-measurement-date] + (rename-out [nutrient-measurement-measurement-date nutrient-measurement-date] [nutrient-measurement-nutrient-values nutrient-measurement-values]) (contract-out [create-nutrient-measurement! (-> string? nutrient-value-hash/c nutrient-measurement?)] [get-nutrient-measurements (-> (listof nutrient-measurement?))] [get-nutrient-measurement (->* () - (#:id exact-nonnegative-integer? #:measured-on string?) + (#:id exact-nonnegative-integer? #:date string?) (or/c nutrient-measurement? #f))] [get-nutrient-measurement-values (-> nutrient-measurement-or-id/c nutrient-value-hash/c)] [get-nutrient-measurement-value @@ -25,14 +25,14 @@ "../db/conn.rkt" "nutrient.rkt") -(struct nutrient-measurement (id measured-on nutrient-values) +(struct nutrient-measurement (id measurement-date nutrient-values) #:transparent #:property prop:custom-write (λ (v out _) (fprintf out "Measurement #~a on ~a\n" (nutrient-measurement-id v) - (nutrient-measurement-measured-on v)) + (nutrient-measurement-measurement-date v)) (for ([(n v) (in-hash (nutrient-measurement-nutrient-values v))]) (fprintf out "~a ~a\n" @@ -50,14 +50,14 @@ ;; CREATE -(define (create-nutrient-measurement! measured-on nutrient-values) +(define (create-nutrient-measurement! measurement-date nutrient-values) (or - (get-nutrient-measurement #:measured-on measured-on) + (get-nutrient-measurement #:date measurement-date) (with-tx - (query-exec (current-conn) (insert #:into nutrient_measurements #:set [measured_on ,measured-on])) + (query-exec (current-conn) (insert #:into nutrient_measurements #:set [measurement_date ,measurement-date])) (define nm-id (query-value (current-conn) - (select id #:from nutrient_measurements #:where (= measured_on ,measured-on)))) + (select id #:from nutrient_measurements #:where (= measurement_date ,measurement-date)))) (query-exec (current-conn) (insert #:into nutrient_value_sets #:set [nutrient_measurement_id ,nm-id])) (define nvs-id @@ -69,7 +69,7 @@ #:set [value_set_id ,nvs-id] [nutrient_id ,(nutrient-id n)] [value_ppm ,v]))) - (get-nutrient-measurement #:measured-on measured-on)))) + (get-nutrient-measurement #:date measurement-date)))) ;; READ @@ -83,38 +83,38 @@ #:on (= n.id nv.nutrient_id)))) (define (grouped-row->nutrient-measurement row) - (match-define (vector nm-id measured-on residuals) row) - (nutrient-measurement nm-id measured-on (residuals->nutrient-value-hash residuals))) + (match-define (vector nm-id measurement-date residuals) row) + (nutrient-measurement nm-id measurement-date (residuals->nutrient-value-hash residuals))) (define (get-nutrient-measurements) (define grouped-rows (query-rows (current-conn) (select nm.id - nm.measured_on + nm.measurement_date n.id n.canonical_name n.french_name n.formula nv.value_ppm #:from (TableExpr:AST ,joined) - #:order-by nm.measured_on + #:order-by nm.measurement_date #:desc) #:group '#(0 1))) (for/list ([row grouped-rows]) (grouped-row->nutrient-measurement row))) -(define (get-nutrient-measurement #:id [nm-id #f] #:measured-on [measured-on #f]) +(define (get-nutrient-measurement #:id [nm-id #f] #:date [measurement-date #f]) (define where (cond - [(and nm-id measured-on) - (scalar-expr-qq (and (= nm.id ,nm-id) (= nm.measured_on ,measured-on)))] + [(and nm-id measurement-date) + (scalar-expr-qq (and (= nm.id ,nm-id) (= nm.measurement_date ,measurement-date)))] [nm-id (scalar-expr-qq (= nm.id ,nm-id))] - [measured-on (scalar-expr-qq (= nm.measured_on ,measured-on))] - [else (error 'get-nutrient-measurement "either #:id or #:measured-on must be provided")])) + [measurement-date (scalar-expr-qq (= nm.measurement_date ,measurement-date))] + [else (error 'get-nutrient-measurement "either #:id or #:date must be provided")])) (define grouped-rows (query-rows (current-conn) (select nm.id - nm.measured_on + nm.measurement_date n.id n.canonical_name n.french_name @@ -122,7 +122,7 @@ nv.value_ppm #:from (TableExpr:AST ,joined) #:where (ScalarExpr:AST ,where) - #:order-by nm.measured_on + #:order-by nm.measurement_date #:desc) #:group '#(0 1))) (match grouped-rows @@ -154,7 +154,7 @@ (select value_ppm #:from (TableExpr:AST ,joined) #:where (= nv.nutrient_id ,(nutrient-id nutrient)) - #:order-by nm.measured_on + #:order-by nm.measurement_date #:desc #:limit 1))) @@ -165,16 +165,16 @@ n.canonical_name n.french_name n.formula - nm.measured_on + nm.measurement_date nv.value_ppm #:from (TableExpr:AST ,joined) - #:order-by nm.measured_on + #:order-by nm.measurement_date #:desc) #:group '(#(0 1 2 3)))) (for/hash ([row grouped-rows]) (match-define (vector n-id n-canonical-name n-french-name n-formula residual-rows) row) - ;; residual-rows is a non-empty list of vectors: #(measured_on value_ppm) - (match-define (vector _measured-on value-ppm) (first residual-rows)) + ;; residual-rows is a non-empty list of vectors: #(measurement_date value_ppm) + (match-define (vector _ value-ppm) (first residual-rows)) (values (nutrient n-id n-canonical-name n-french-name n-formula) value-ppm))) ;; UPDATE @@ -210,15 +210,15 @@ (define phosphorus (get-nutrient #:name "Phosphorus")) (create-nutrient-measurement! measurement-date (hash nitrogen 12.3 phosphorus 4.5)) (check-equal? (length (get-nutrient-measurements)) 1) - (define nm (get-nutrient-measurement #:measured-on measurement-date)) + (define nm (get-nutrient-measurement #:date measurement-date)) (check-true (nutrient-measurement? nm)) - (check-equal? (nutrient-measurement-measured-on nm) measurement-date)) + (check-equal? (nutrient-measurement-measurement-date nm) measurement-date)) (test-case "Check all measurement values" (define nitrogen (get-nutrient #:name "Nitrogen")) (define phosphorus (get-nutrient #:name "Phosphorus")) - (define nm (get-nutrient-measurement #:measured-on measurement-date)) + (define nm (get-nutrient-measurement #:date measurement-date)) (check-equal? (get-nutrient-measurement-value nm nitrogen) 12.3) (check-equal? (get-nutrient-measurement-value nm phosphorus) 4.5) @@ -241,7 +241,7 @@ (check-equal? (get-latest-nutrient-measurement-value phosphorus) 8.9)) (test-case "Delete measurement and cascade to measurement values" - (define nm (get-nutrient-measurement #:measured-on measurement-date)) + (define nm (get-nutrient-measurement #:date measurement-date)) (delete-nutrient-measurement! nm) (check-false (get-nutrient-measurement #:id (nutrient-measurement-id nm))) (check-equal? (length (get-nutrient-measurements)) |