[Racket] Ferti hydroponic nutrient solver, redux.
Apply minor fixes.
Changed files
handlers.rkt
@@ -7,7 +7,6 @@
7
7
web-server/formlets
8
8
"views.rkt"
9
9
"formlets.rkt"
10
Removed:
"models/nutrient.rkt"
11
10
"models/nutrient-measurement.rkt"
12
11
"models/nutrient-target.rkt"
13
12
"models/crop-requirement.rkt")
@@ -62,7 +61,7 @@
62
61
(formlet-process (targets-formlet) req))
63
62
64
63
(define (average-nutrient-values mix)
65
Removed:
(define totals
64
Added:
(define average-values
66
65
(for/fold ([acc (hash)]) ([pair (in-list mix)])
67
66
(define crop-requirement (car pair))
68
67
(define percentage (/ (cdr pair) 100))
@@ -73,11 +72,10 @@
73
72
(hash-update acc n
74
73
(λ (old) (+ old (* v percentage)))
75
74
(λ () (* v percentage))))))
76
Removed:
(for/list ([(k v) (in-hash totals)])
75
Added:
(for/list ([(k v) (in-hash average-values)])
77
76
(cons k v)))
78
77
79
78
(define target-nutrient-values (average-nutrient-values crop-requirement-mix))
80
Removed:
(pretty-display target-nutrient-values)
81
79
(create-nutrient-target! effective-on target-nutrient-values)
82
80
(redirect-to "/"))
83
81
models/fertilizer-product.rkt
@@ -46,7 +46,10 @@
46
46
[else
47
47
(insert #:into fertilizer_products
48
48
#:set [canonical_name ,canonical-name])]))
49
Removed:
(define fp-id (fertilizer-product-id (get-fertilizer-product #:canonical-name canonical-name)))
49
Added:
(define fp-id (query-value (current-conn)
50
Added:
(select id
51
Added:
#:from fertilizer_products
52
Added:
#:where (= canonical_name ,canonical-name))))
50
53
(query-exec (current-conn)
51
54
(insert #:into nutrient_value_sets
52
55
#:set [fertilizer_product_id ,fp-id]))
@@ -87,7 +90,7 @@
87
90
n.id n.canonical_name n.formula
88
91
nv.value_ppm
89
92
#:from (TableExpr:AST ,joined)
90
Removed:
#:order-by canonical_name #:asc))
93
Added:
#:order-by fp.canonical_name #:asc))
91
94
(define rows (query-rows (current-conn) query))
92
95
(define by-id
93
96
(for/fold ([h (hash)]) ([row (in-list rows)])
models/nutrient-measurement.rkt
@@ -21,7 +21,7 @@
21
21
[get-nutrient-measurement-values (-> nutrient-measurement?
22
22
(listof (cons/c nutrient? number?)))]
23
23
[get-nutrient-measurement-value (-> nutrient-measurement? nutrient? number?)]
24
Removed:
[get-latest-nutrient-measurement-value (-> nutrient? number?)]
24
Added:
[get-latest-nutrient-measurement-value (-> nutrient? (or/c number? #f))]
25
25
[delete-nutrient-measurement! (-> nutrient-measurement? void?)]))
26
26
27
27
(require racket/contract
@@ -124,7 +124,7 @@
124
124
(cond
125
125
[(null? rows) #f]
126
126
[else
127
Removed:
;; Fold all nutrient rows belonging to the single measurement into one struct
127
Added:
;; Fold all nutrient value rows belonging to the single nutrient measurement into one struct
128
128
(define the-id #f)
129
129
(define A #f)
130
130
(for ([row (in-list rows)])
@@ -134,7 +134,8 @@
134
134
(set! A (if A
135
135
(acc (acc-measured-on A)
136
136
(cons nv-pair (acc-pairs A)))
137
Removed:
(acc measured-on (list nv-pair)))))
137
Added:
(acc measured-on
138
Added:
(list nv-pair)))))
138
139
(and A
139
140
(nutrient-measurement the-id
140
141
(acc-measured-on A)
models/nutrient-target.rkt
@@ -20,7 +20,6 @@
20
20
(or/c nutrient-target? #f))]
21
21
[get-nutrient-target-values (-> nutrient-target? (listof (cons/c nutrient? number?)))]
22
22
[get-nutrient-target-value (-> nutrient-target? nutrient? number?)]
23
Removed:
;; The "latest" value is false before the first target is created.
24
23
[get-latest-nutrient-target-value (-> nutrient? (or/c number? #f))]
25
24
[delete-nutrient-target! (-> nutrient-target? void?)]))
26
25
@@ -160,7 +159,7 @@
160
159
(select value_ppm
161
160
#:from (TableExpr:AST ,joined)
162
161
#:where (= nv.nutrient_id ,(nutrient-id nutrient))
163
Removed:
#:order-by nm.effective_on #:desc
162
Added:
#:order-by nt.effective_on #:desc
164
163
#:limit 1)))
165
164
166
165