From 36b3bd1009e5cbd8545b6abbb5988c00d7274c15 Mon Sep 17 00:00:00 2001 From: Marius Peter Date: Thu, 13 Nov 2025 16:14:07 +0100 Subject: Factor out average-crop-requirement-nutrient-values. --- handlers.rkt | 19 ++----------------- 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))) -- cgit v1.2.3