[Racket] Ferti hydroponic nutrient solver, redux.
Insist on grouped-row naming convention.
Changed files
models/crop-requirement.rkt
@@ -74,8 +74,8 @@
74
74
(as nutrients n)
75
75
#:on (= n.id nv.nutrient_id))))
76
76
77
Removed:
(define (grouped-row->crop-requirement row)
78
Removed:
(match-define (vector cr-id profile crop-id residuals) row)
77
Added:
(define (grouped-row->crop-requirement grouped-row)
78
Added:
(match-define (vector cr-id profile crop-id residuals) grouped-row)
79
79
(crop-requirement cr-id profile crop-id (residuals->nutrient-value-hash residuals)))
80
80
81
81
(define (get-crop-requirements)
@@ -93,8 +93,7 @@
93
93
#:order-by cr.id
94
94
#:asc)
95
95
#:group '#(0 1 2)))
96
Removed:
(for/list ([row grouped-rows])
97
Removed:
(grouped-row->crop-requirement row)))
96
Added:
(map grouped-row->crop-requirement grouped-rows))
98
97
99
98
(define (get-crop-requirement #:id [cr-id #f] #:profile [profile #f] #:crop-id [crop-id #f])
100
99
(define where
@@ -120,7 +119,7 @@
120
119
#:group '#(0 1 2)))
121
120
(match grouped-rows
122
121
['() #f]
123
Removed:
[(list row) (grouped-row->crop-requirement row)]
122
Added:
[(list grouped-row) (grouped-row->crop-requirement grouped-row)]
124
123
[many (error 'get-crop-requirement "expected 1 crop requirement, got ~a" (length many))]))
125
124
126
125
(define (get-crop-requirement-values cr-or-id)
models/fertilizer-product.rkt
@@ -91,8 +91,8 @@
91
91
(as nutrients n)
92
92
#:on (= n.id nv.nutrient_id))))
93
93
94
Removed:
(define (grouped-row->fertilizer-product row)
95
Removed:
(match-define (vector fp-id canonical-name brand-name residuals) row)
94
Added:
(define (grouped-row->fertilizer-product grouped-row)
95
Added:
(match-define (vector fp-id canonical-name brand-name residuals) grouped-row)
96
96
(fertilizer-product fp-id canonical-name (residuals->nutrient-value-hash residuals) brand-name))
97
97
98
98
(define (get-fertilizer-products)
@@ -110,8 +110,7 @@
110
110
#:order-by fp.canonical_name
111
111
#:asc)
112
112
#:group '#(0 1 2)))
113
Removed:
(for/list ([row grouped-rows])
114
Removed:
(grouped-row->fertilizer-product row)))
113
Added:
(map grouped-row->fertilizer-product grouped-rows))
115
114
116
115
(define (get-fertilizer-product #:id [fp-id #f] #:canonical-name [canonical-name #f])
117
116
(define where
@@ -138,7 +137,7 @@
138
137
#:group '#(0 1 2)))
139
138
(match grouped-rows
140
139
['() #f]
141
Removed:
[(list row) (grouped-row->fertilizer-product row)]
140
Added:
[(list grouped-row) (grouped-row->fertilizer-product grouped-row)]
142
141
[many (error 'get-fertilizer-product "expected 1 fertilizer product, got ~a" (length many))]))
143
142
144
143
(define (get-fertilizer-product-values fp-or-id)
models/nutrient-measurement.rkt
@@ -81,8 +81,8 @@
81
81
(as nutrients n)
82
82
#:on (= n.id nv.nutrient_id))))
83
83
84
Removed:
(define (grouped-row->nutrient-measurement row)
85
Removed:
(match-define (vector nm-id measurement-date residuals) row)
84
Added:
(define (grouped-row->nutrient-measurement grouped-row)
85
Added:
(match-define (vector nm-id measurement-date residuals) grouped-row)
86
86
(nutrient-measurement nm-id measurement-date (residuals->nutrient-value-hash residuals)))
87
87
88
88
(define (get-nutrient-measurements)
@@ -99,8 +99,7 @@
99
99
#:order-by nm.measurement_date
100
100
#:desc)
101
101
#:group '#(0 1)))
102
Removed:
(for/list ([row grouped-rows])
103
Removed:
(grouped-row->nutrient-measurement row)))
102
Added:
(map grouped-row->nutrient-measurement grouped-rows))
104
103
105
104
(define (get-nutrient-measurement #:id [nm-id #f] #:date [measurement-date #f])
106
105
(define where
@@ -126,7 +125,7 @@
126
125
#:group '#(0 1)))
127
126
(match grouped-rows
128
127
['() #f]
129
Removed:
[(list row) (grouped-row->nutrient-measurement row)]
128
Added:
[(list grouped-row) (grouped-row->nutrient-measurement grouped-row)]
130
129
[many (error 'get-nutrient-measurement "expected 1 nutrient measurement, got ~a" (length many))]))
131
130
132
131
(define (get-nutrient-measurement-values nm-or-id)
@@ -170,8 +169,8 @@
170
169
#:order-by nm.measurement_date
171
170
#:desc)
172
171
#:group '(#(0 1 2 3))))
173
Removed:
(for/hash ([row grouped-rows])
174
Removed:
(match-define (vector n-id n-canonical-name n-french-name n-formula residual-rows) row)
172
Added:
(for/hash ([grouped-row grouped-rows])
173
Added:
(match-define (vector n-id n-canonical-name n-french-name n-formula residual-rows) grouped-row)
175
174
;; residual-rows is a non-empty list of vectors: #(measurement_date value_ppm)
176
175
(match-define (vector _ value-ppm) (first residual-rows))
177
176
(values (nutrient n-id n-canonical-name n-french-name n-formula) value-ppm)))
models/nutrient-target.rkt
@@ -74,8 +74,8 @@
74
74
(as nutrients n)
75
75
#:on (= n.id nv.nutrient_id))))
76
76
77
Removed:
(define (grouped-row->nutrient-target row)
78
Removed:
(match-define (vector nt-id target-date residuals) row)
77
Added:
(define (grouped-row->nutrient-target grouped-row)
78
Added:
(match-define (vector nt-id target-date residuals) grouped-row)
79
79
(nutrient-target nt-id target-date (residuals->nutrient-value-hash residuals)))
80
80
81
81
(define (get-nutrient-targets)
@@ -92,8 +92,7 @@
92
92
#:order-by nt.target_date
93
93
#:desc)
94
94
#:group '#(0 1)))
95
Removed:
(for/list ([row grouped-rows])
96
Removed:
(grouped-row->nutrient-target row)))
95
Added:
(map grouped-row->nutrient-target grouped-rows))
97
96
98
97
(define (get-nutrient-target #:id [nt-id #f] #:date [target-date #f])
99
98
(define where
@@ -119,7 +118,7 @@
119
118
#:group '#(0 1)))
120
119
(match grouped-rows
121
120
['() #f]
122
Removed:
[(list row) (grouped-row->nutrient-target row)]
121
Added:
[(list grouped-row) (grouped-row->nutrient-target grouped-row)]
123
122
[many (error 'get-nutrient-target "expected 1 nutrient target, got ~a" (length many))]))
124
123
125
124
(define (get-nutrient-target-values nt-or-id)