summaryrefslogtreecommitdiff
path: root/models/fertilizer-product.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'models/fertilizer-product.rkt')
-rw-r--r--models/fertilizer-product.rkt28
1 files changed, 18 insertions, 10 deletions
diff --git a/models/fertilizer-product.rkt b/models/fertilizer-product.rkt
index b0ac7de..4481010 100644
--- a/models/fertilizer-product.rkt
+++ b/models/fertilizer-product.rkt
@@ -13,9 +13,9 @@
(->* ()
(#:id (or/c #f exact-nonnegative-integer?) #:canonical-name (or/c #f string?))
(or/c fertilizer-product? #f))]
- [get-fertilizer-product-values (-> fertilizer-product? nutrient-value-hash/c)]
- [get-fertilizer-product-value (-> fertilizer-product? nutrient? (or/c #f number?))]
- [delete-fertilizer-product! (-> fertilizer-product? void?)]))
+ [get-fertilizer-product-values (-> fertilizer-product-or-id/c nutrient-value-hash/c)]
+ [get-fertilizer-product-value (-> fertilizer-product-or-id/c nutrient? (or/c #f number?))]
+ [delete-fertilizer-product! (-> fertilizer-product-or-id/c void?)]))
(require racket/contract
db
@@ -42,6 +42,15 @@
(~a (nutrient-canonical-name n) #:min-width 14)
(~a v #:max-width 6 #:align 'right)))))
+(define fertilizer-product-id? exact-nonnegative-integer?)
+
+(define fertilizer-product-or-id/c (or/c fertilizer-product? fertilizer-product-id?))
+
+(define (->fp-id fp-or-id)
+ (match fp-or-id
+ [(? fertilizer-product-id? id) id]
+ [(fertilizer-product id _ _ _) id]))
+
;; CREATE
(define (create-fertilizer-product! canonical-name brand-name nutrient-values)
@@ -129,7 +138,7 @@
[(list row) (grouped-row->fertilizer-product row)]
[many (error 'get-fertilizer-product "expected 1 fertilizer product, got ~a" (length many))]))
-(define (get-fertilizer-product-values fertilizer-product)
+(define (get-fertilizer-product-values fp-or-id)
(for/hash ([(nutrient-id canonical-name french-name formula value_ppm)
(in-query (current-conn)
(select n.id
@@ -138,20 +147,19 @@
n.formula
nv.value_ppm
#:from (TableExpr:AST ,joined)
- #:where (= fp.id ,(fertilizer-product-id fertilizer-product))))])
+ #:where (= fp.id ,(->fp-id fp-or-id))))])
(values (nutrient nutrient-id canonical-name french-name formula) value_ppm)))
-(define (get-fertilizer-product-value fertilizer-product nutrient)
+(define (get-fertilizer-product-value fp-or-id nutrient)
(query-maybe-value (current-conn)
(select value_ppm
#:from (TableExpr:AST ,joined)
- #:where (and (= fp.id ,(fertilizer-product-id fertilizer-product))
+ #:where (and (= fp.id ,(->fp-id fp-or-id))
(= nv.nutrient_id ,(nutrient-id nutrient))))))
;; UPDATE
;; DELETE
-(define (delete-fertilizer-product! fertilizer-product)
- (define id (fertilizer-product-id fertilizer-product))
- (query-exec (current-conn) (delete #:from fertilizer_products #:where (= id ,id))))
+(define (delete-fertilizer-product! fp-or-id)
+ (query-exec (current-conn) (delete #:from fertilizer_products #:where (= id ,(->fp-id fp-or-id)))))
Copyright 2019--2026 Marius PETER