diff options
| author | Marius Peter <dev@marius-peter.com> | 2025-11-13 16:14:07 +0100 |
|---|---|---|
| committer | Marius Peter <dev@marius-peter.com> | 2025-11-13 16:14:07 +0100 |
| commit | 36b3bd1009e5cbd8545b6abbb5988c00d7274c15 (patch) | |
| tree | 6b7458ae1e00554822ac6a2d459627745fb260a2 | |
| parent | b39788725ef3980711b3206335e44dc67dd27fda (diff) | |
Factor out average-crop-requirement-nutrient-values.
| -rw-r--r-- | handlers.rkt | 19 | ||||
| -rw-r--r-- | models/crop-requirement.rkt | 17 |
2 files changed, 19 insertions, 17 deletions
diff --git a/handlers.rkt b/handlers.rkt index a5c9d6b..a4de123 100644 --- a/handlers.rkt +++ b/handlers.rkt @@ -70,23 +70,8 @@ (define (create-target req) (define-values (effective-on crop-requirement-mix) (formlet-process (targets-formlet) req)) - - (define (average-nutrient-values mix) - (define average-values - (for/fold ([acc (hash)]) ([pair (in-list mix)]) - (define crop-requirement (car pair)) - (define percentage (/ (cdr pair) 100)) - (for/fold ([acc acc]) - ([nv (in-list (get-crop-requirement-values crop-requirement))]) - (define n (car nv)) - (define v (cdr nv)) - (hash-update acc n - (λ (old) (+ old (* v percentage))) - (λ () (* v percentage)))))) - (for/list ([(k v) (in-hash average-values)]) - (cons k v))) - - (define target-nutrient-values (average-nutrient-values crop-requirement-mix)) + (define target-nutrient-values + (average-crop-requirement-nutrient-values crop-requirement-mix)) (create-nutrient-target! effective-on target-nutrient-values) (redirect-to "/")) diff --git a/models/crop-requirement.rkt b/models/crop-requirement.rkt index 4faa6bb..23740e7 100644 --- a/models/crop-requirement.rkt +++ b/models/crop-requirement.rkt @@ -143,3 +143,20 @@ (query-exec (current-conn) (delete #:from crop_requirements #:where (= id ,id)))) + + +;; Helpers + +(define (average-crop-requirement-nutrient-values mix) + (define average-values + (for/fold ([acc (hash)]) ([pair (in-list mix)]) + (define crop-requirement (car pair)) + (define percentage (/ (cdr pair) 100)) + (for/fold ([acc acc]) + ([nv (in-list (get-crop-requirement-values crop-requirement))]) + (match-define (cons n v) nv) + (hash-update acc n + (λ (old) (+ old (* v percentage))) + (λ () (* v percentage)))))) + (for/list ([(n v) (in-hash average-values)]) + (cons n v))) |