diff options
| author | Marius Peter <dev@marius-peter.com> | 2025-12-13 22:45:27 +0100 |
|---|---|---|
| committer | Marius Peter <dev@marius-peter.com> | 2025-12-13 22:45:27 +0100 |
| commit | 57933beea0d308588968a6a11ec5a28c0467e224 (patch) | |
| tree | 55d49eca5626c9091462a07d84c272e323e51daf | |
| parent | 21d5ace6a0f90c4e7e6fd6a19cae4cfce7d45c97 (diff) | |
Measurements and fertilizers can now be persisted 2 ways.
| -rw-r--r-- | handlers.rkt | 10 | ||||
| -rw-r--r-- | models/fertilizer-product.rkt | 24 | ||||
| -rw-r--r-- | models/nutrient-measurement.rkt | 14 |
3 files changed, 33 insertions, 15 deletions
diff --git a/handlers.rkt b/handlers.rkt index f1825b9..988789b 100644 --- a/handlers.rkt +++ b/handlers.rkt @@ -85,8 +85,10 @@ (render-page (new-measurement-page))) (define (create-measurement req) - (define-values (measurement-date nutrient-values) (formlet-process (measurements-formlet) req)) - (create-nutrient-measurement! measurement-date nutrient-values) + (define new-measurement (formlet-process (measurements-formlet) req)) + (if (get-nutrient-measurement #:date (nutrient-measurement-date new-measurement)) + (update-nutrient-measurement! new-measurement) + (create-nutrient-measurement! new-measurement)) (redirect-to "/ferti/measurements-and-rotations")) (define (show-measurement _ id) @@ -124,8 +126,8 @@ (render-page (new-fertilizer-page))) (define (create-fertilizer req) - (define new-fertilizer-product (formlet-process (fertilizer-formlet) req)) - (create-fertilizer-product! new-fertilizer-product) + (define new-fertilizer (formlet-process (fertilizer-formlet) req)) + (create-fertilizer-product! new-fertilizer) (redirect-to "/ferti/fertilizers")) (define (show-fertilizer _ id) diff --git a/models/fertilizer-product.rkt b/models/fertilizer-product.rkt index e79a707..652b3c4 100644 --- a/models/fertilizer-product.rkt +++ b/models/fertilizer-product.rkt @@ -7,7 +7,9 @@ (rename-out [fertilizer-product-canonical-name fertilizer-product-name] [fertilizer-product-nutrient-values fertilizer-product-values] [fertilizer-product-brand-name fertilizer-brand-name]) - (contract-out [create-fertilizer-product! (-> fertilizer-product? fertilizer-product?)] + (contract-out [create-fertilizer-product! + (case-> (-> fertilizer-product? fertilizer-product?) + (-> string? string? nutrient-value-hash/c fertilizer-product?))] [get-fertilizer-products (-> (listof fertilizer-product?))] [get-fertilizer-product (->* () (#:id db-id? #:canonical-name string?) (or/c fertilizer-product? #f))] @@ -56,7 +58,14 @@ ;; CREATE -(define (create-fertilizer-product! fp) +(define create-fertilizer-product! + (case-lambda + [(fp) (create-fertilizer-product!/fp fp)] + [(canonical-name brand-name nutrient-values) + (create-fertilizer-product!/fp + (fertilizer-product #f canonical-name brand-name nutrient-values))])) + +(define (create-fertilizer-product!/fp fp) (define canonical-name (fertilizer-product-canonical-name fp)) (define brand-name (fertilizer-product-brand-name fp)) (define nutrient-values (fertilizer-product-nutrient-values fp)) @@ -196,10 +205,9 @@ (define nitrogen (get-nutrient #:name "Nitrogen")) (define phosphorus (get-nutrient #:name "Phosphorus")) - (create-fertilizer-product! (fertilizer-product #f - canonical-product-name - "MasterBlend" - (hash nitrogen 40 phosphorus 200))) + (create-fertilizer-product! canonical-product-name + "MasterBlend" + (hash nitrogen 40 phosphorus 200)) (check-equal? (length (get-fertilizer-products)) 1) @@ -238,9 +246,7 @@ (test-case "Custom write property formatting" (define nitrogen (get-nutrient #:name "Nitrogen")) - (define fp - (create-fertilizer-product! - (fertilizer-product #f "Test Fertilizer" "TestBrand" (hash nitrogen 50)))) + (define fp (create-fertilizer-product! "Test Fertilizer" "TestBrand" (hash nitrogen 50))) (define output (open-output-string)) (write fp output) diff --git a/models/nutrient-measurement.rkt b/models/nutrient-measurement.rkt index f4bfa8e..fea7b89 100644 --- a/models/nutrient-measurement.rkt +++ b/models/nutrient-measurement.rkt @@ -7,7 +7,9 @@ (rename-out [nutrient-measurement-measurement-date nutrient-measurement-date] [nutrient-measurement-nutrient-values nutrient-measurement-values]) (contract-out - [create-nutrient-measurement! (-> string? nutrient-value-hash/c nutrient-measurement?)] + [create-nutrient-measurement! + (case-> (-> nutrient-measurement? nutrient-measurement?) + (-> string? nutrient-value-hash/c nutrient-measurement?))] [get-nutrient-measurements (-> (listof nutrient-measurement?))] [get-nutrient-measurement (->* () (#:id db-id? #:date string?) (or/c nutrient-measurement? #f))] @@ -51,7 +53,15 @@ ;; CREATE -(define (create-nutrient-measurement! measurement-date nutrient-values) +(define create-nutrient-measurement! + (case-lambda + [(nm) (create-nutrient-measurement!/nm nm)] + [(measurement-date nutrient-values) + (create-nutrient-measurement!/nm (nutrient-measurement #f measurement-date nutrient-values))])) + +(define (create-nutrient-measurement!/nm nm) + (define measurement-date (nutrient-measurement-measurement-date nm)) + (define nutrient-values (nutrient-measurement-nutrient-values nm)) (with-tx (define nm-id (insert-id (query (current-conn) (insert #:into nutrient_measurements |