summaryrefslogtreecommitdiff
path: root/models/crop-requirement.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'models/crop-requirement.rkt')
-rw-r--r--models/crop-requirement.rkt47
1 files changed, 22 insertions, 25 deletions
diff --git a/models/crop-requirement.rkt b/models/crop-requirement.rkt
index 8d99434..f6193bf 100644
--- a/models/crop-requirement.rkt
+++ b/models/crop-requirement.rkt
@@ -1,6 +1,5 @@
#lang racket
-;; Model struct
(provide crop-requirement
crop-requirement?
crop-requirement-id
@@ -8,7 +7,6 @@
crop-requirement-crop-id
(rename-out [crop-requirement-nutrient-values crop-requirement-values])
(contract-out
- ;; SQL CRUD
[create-crop-requirement!
(->* (string? (listof nutrient-value-pair/c)) ((or/c #f crop?)) crop-requirement?)]
[get-crop-requirements (-> (listof crop-requirement?))]
@@ -18,9 +16,7 @@
(or/c crop-requirement? #f))]
[get-crop-requirement-values (-> crop-requirement? (listof nutrient-value-pair/c))]
[get-crop-requirement-value (-> crop-requirement? nutrient? number?)]
- [get-latest-crop-requirement-value (-> nutrient? number?)]
[delete-crop-requirement! (-> crop-requirement? void?)]
- ;; Helpers
[average-crop-requirement-nutrient-values
(-> (listof (cons/c crop-requirement? (and/c real? (>=/c 0) (<=/c 100))))
(listof nutrient-value-pair/c))]))
@@ -39,27 +35,28 @@
;; CREATE
(define (create-crop-requirement! profile nutrient-values [crop #f])
- (or (get-crop-requirement #:profile profile)
- (with-tx
- (query-exec
- (current-conn)
- (if crop
- (insert #:into crop_requirements #:set [crop_id ,(crop-id crop)] [profile ,profile])
- (insert #:into crop_requirements #:set [profile ,profile])))
- (define cr-id (crop-requirement-id (get-crop-requirement #:profile profile)))
- (query-exec (current-conn)
- (insert #:into nutrient_value_sets #:set [crop_requirement_id ,cr-id]))
- (define nvs-id
- (query-value (current-conn)
- (select id #:from nutrient_value_sets #:where (= crop_requirement_id ,cr-id))))
- (for ([nv nutrient-values])
- (match-define (cons n v) nv)
- (query-exec (current-conn)
- (insert #:into nutrient_values
- #:set [value_set_id ,nvs-id]
- [nutrient_id ,(nutrient-id n)]
- [value_ppm ,v])))
- (get-crop-requirement #:profile profile))))
+ (or
+ (get-crop-requirement #:profile profile)
+ (with-tx
+ (query-exec
+ (current-conn)
+ (if crop
+ (insert #:into crop_requirements #:set [crop_id ,(crop-id crop)] [profile ,profile])
+ (insert #:into crop_requirements #:set [profile ,profile])))
+ (define cr-id
+ (query-value (current-conn) (select id #:from crop_requirements #:where (= profile ,profile))))
+ (query-exec (current-conn) (insert #:into nutrient_value_sets #:set [crop_requirement_id ,cr-id]))
+ (define nvs-id
+ (query-value (current-conn)
+ (select id #:from nutrient_value_sets #:where (= crop_requirement_id ,cr-id))))
+ (for ([nv nutrient-values])
+ (match-define (cons n v) nv)
+ (query-exec (current-conn)
+ (insert #:into nutrient_values
+ #:set [value_set_id ,nvs-id]
+ [nutrient_id ,(nutrient-id n)]
+ [value_ppm ,v])))
+ (get-crop-requirement #:profile profile))))
;; READ
Copyright 2019--2026 Marius PETER