diff options
Diffstat (limited to 'models/crop-requirement.rkt')
| -rw-r--r-- | models/crop-requirement.rkt | 54 |
1 files changed, 25 insertions, 29 deletions
diff --git a/models/crop-requirement.rkt b/models/crop-requirement.rkt index e668c40..4faa6bb 100644 --- a/models/crop-requirement.rkt +++ b/models/crop-requirement.rkt @@ -35,35 +35,31 @@ ;; CREATE (define (create-crop-requirement! profile nutrient-values [crop #f]) - (define existing-crop-requirement (get-crop-requirement #:profile profile)) - (define (new-crop-requirement) - (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 nv - [(cons n v) - (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 existing-crop-requirement - (new-crop-requirement))) + (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)))) ;; READ |