[Racket] Ferti hydroponic nutrient solver, redux.
Measurements and fertilizers can now be persisted 2 ways.
handlers.rkt
@@ -85,8 +85,10 @@
85
85
(render-page (new-measurement-page)))
86
86
87
87
(define (create-measurement req)
88
Removed:
(define-values (measurement-date nutrient-values) (formlet-process (measurements-formlet) req))
89
Removed:
(create-nutrient-measurement! measurement-date nutrient-values)
88
Added:
(define new-measurement (formlet-process (measurements-formlet) req))
89
Added:
(if (get-nutrient-measurement #:date (nutrient-measurement-date new-measurement))
90
Added:
(update-nutrient-measurement! new-measurement)
91
Added:
(create-nutrient-measurement! new-measurement))
90
92
(redirect-to "/ferti/measurements-and-rotations"))
91
93
92
94
(define (show-measurement _ id)
@@ -124,8 +126,8 @@
124
126
(render-page (new-fertilizer-page)))
125
127
126
128
(define (create-fertilizer req)
127
Removed:
(define new-fertilizer-product (formlet-process (fertilizer-formlet) req))
128
Removed:
(create-fertilizer-product! new-fertilizer-product)
129
Added:
(define new-fertilizer (formlet-process (fertilizer-formlet) req))
130
Added:
(create-fertilizer-product! new-fertilizer)
129
131
(redirect-to "/ferti/fertilizers"))
130
132
131
133
(define (show-fertilizer _ id)
models/fertilizer-product.rkt
@@ -7,7 +7,9 @@
7
7
(rename-out [fertilizer-product-canonical-name fertilizer-product-name]
8
8
[fertilizer-product-nutrient-values fertilizer-product-values]
9
9
[fertilizer-product-brand-name fertilizer-brand-name])
10
Removed:
(contract-out [create-fertilizer-product! (-> fertilizer-product? fertilizer-product?)]
10
Added:
(contract-out [create-fertilizer-product!
11
Added:
(case-> (-> fertilizer-product? fertilizer-product?)
12
Added:
(-> string? string? nutrient-value-hash/c fertilizer-product?))]
11
13
[get-fertilizer-products (-> (listof fertilizer-product?))]
12
14
[get-fertilizer-product
13
15
(->* () (#:id db-id? #:canonical-name string?) (or/c fertilizer-product? #f))]
@@ -56,7 +58,14 @@
56
58
57
59
;; CREATE
58
60
59
Removed:
(define (create-fertilizer-product! fp)
61
Added:
(define create-fertilizer-product!
62
Added:
(case-lambda
63
Added:
[(fp) (create-fertilizer-product!/fp fp)]
64
Added:
[(canonical-name brand-name nutrient-values)
65
Added:
(create-fertilizer-product!/fp
66
Added:
(fertilizer-product #f canonical-name brand-name nutrient-values))]))
67
Added:
68
Added:
(define (create-fertilizer-product!/fp fp)
60
69
(define canonical-name (fertilizer-product-canonical-name fp))
61
70
(define brand-name (fertilizer-product-brand-name fp))
62
71
(define nutrient-values (fertilizer-product-nutrient-values fp))
@@ -196,10 +205,9 @@
196
205
(define nitrogen (get-nutrient #:name "Nitrogen"))
197
206
(define phosphorus (get-nutrient #:name "Phosphorus"))
198
207
199
Removed:
(create-fertilizer-product! (fertilizer-product #f
200
Removed:
canonical-product-name
201
Removed:
"MasterBlend"
202
Removed:
(hash nitrogen 40 phosphorus 200)))
208
Added:
(create-fertilizer-product! canonical-product-name
209
Added:
"MasterBlend"
210
Added:
(hash nitrogen 40 phosphorus 200))
203
211
204
212
(check-equal? (length (get-fertilizer-products)) 1)
205
213
@@ -238,9 +246,7 @@
238
246
239
247
(test-case "Custom write property formatting"
240
248
(define nitrogen (get-nutrient #:name "Nitrogen"))
241
Removed:
(define fp
242
Removed:
(create-fertilizer-product!
243
Removed:
(fertilizer-product #f "Test Fertilizer" "TestBrand" (hash nitrogen 50))))
249
Added:
(define fp (create-fertilizer-product! "Test Fertilizer" "TestBrand" (hash nitrogen 50)))
244
250
245
251
(define output (open-output-string))
246
252
(write fp output)
models/nutrient-measurement.rkt
@@ -7,7 +7,9 @@
7
7
(rename-out [nutrient-measurement-measurement-date nutrient-measurement-date]
8
8
[nutrient-measurement-nutrient-values nutrient-measurement-values])
9
9
(contract-out
10
Removed:
[create-nutrient-measurement! (-> string? nutrient-value-hash/c nutrient-measurement?)]
10
Added:
[create-nutrient-measurement!
11
Added:
(case-> (-> nutrient-measurement? nutrient-measurement?)
12
Added:
(-> string? nutrient-value-hash/c nutrient-measurement?))]
11
13
[get-nutrient-measurements (-> (listof nutrient-measurement?))]
12
14
[get-nutrient-measurement
13
15
(->* () (#:id db-id? #:date string?) (or/c nutrient-measurement? #f))]
@@ -51,7 +53,15 @@
51
53
52
54
;; CREATE
53
55
54
Removed:
(define (create-nutrient-measurement! measurement-date nutrient-values)
56
Added:
(define create-nutrient-measurement!
57
Added:
(case-lambda
58
Added:
[(nm) (create-nutrient-measurement!/nm nm)]
59
Added:
[(measurement-date nutrient-values)
60
Added:
(create-nutrient-measurement!/nm (nutrient-measurement #f measurement-date nutrient-values))]))
61
Added:
62
Added:
(define (create-nutrient-measurement!/nm nm)
63
Added:
(define measurement-date (nutrient-measurement-measurement-date nm))
64
Added:
(define nutrient-values (nutrient-measurement-nutrient-values nm))
55
65
(with-tx (define nm-id
56
66
(insert-id (query (current-conn)
57
67
(insert #:into nutrient_measurements