[Racket] Ferti hydroponic nutrient solver, redux.
Enforce creation idempotency at the model level.
models/nutrient-measurement.rkt
@@ -37,31 +37,32 @@
37
37
;; CREATE
38
38
39
39
(define (create-nutrient-measurement! measured-on nutrient-values)
40
Removed:
(with-tx
41
Removed:
(query-exec (current-conn)
42
Removed:
(insert #:into nutrient_measurements
43
Removed:
#:set [measured_on ,measured-on]))
44
Removed:
(define nm-id (query-value (current-conn)
45
Removed:
(select id
46
Removed:
#:from nutrient_measurements
47
Removed:
#:where (= measured_on ,measured-on))))
48
Removed:
(query-exec (current-conn)
49
Removed:
(insert #:into nutrient_value_sets
50
Removed:
#:set [nutrient_measurement_id ,nm-id]))
51
Removed:
(define nvs-id (query-value (current-conn)
52
Removed:
(select id
53
Removed:
#:from nutrient_value_sets
54
Removed:
#:where (= nutrient_measurement_id ,nm-id))))
55
Removed:
(for ([nv nutrient-values])
56
Removed:
(match nv
57
Removed:
[(cons n v)
58
Removed:
(query-exec (current-conn)
59
Removed:
(insert #:into nutrient_values
60
Removed:
#:set
61
Removed:
[value_set_id ,nvs-id]
62
Removed:
[nutrient_id ,(nutrient-id n)]
63
Removed:
[value_ppm ,v]))]))
64
Removed:
(get-nutrient-measurement #:measured-on measured-on)))
40
Added:
(or (get-nutrient-measurement #:measured-on measured-on)
41
Added:
(with-tx
42
Added:
(query-exec (current-conn)
43
Added:
(insert #:into nutrient_measurements
44
Added:
#:set [measured_on ,measured-on]))
45
Added:
(define nm-id (query-value (current-conn)
46
Added:
(select id
47
Added:
#:from nutrient_measurements
48
Added:
#:where (= measured_on ,measured-on))))
49
Added:
(query-exec (current-conn)
50
Added:
(insert #:into nutrient_value_sets
51
Added:
#:set [nutrient_measurement_id ,nm-id]))
52
Added:
(define nvs-id (query-value (current-conn)
53
Added:
(select id
54
Added:
#:from nutrient_value_sets
55
Added:
#:where (= nutrient_measurement_id ,nm-id))))
56
Added:
(for ([nv nutrient-values])
57
Added:
(match nv
58
Added:
[(cons n v)
59
Added:
(query-exec (current-conn)
60
Added:
(insert #:into nutrient_values
61
Added:
#:set
62
Added:
[value_set_id ,nvs-id]
63
Added:
[nutrient_id ,(nutrient-id n)]
64
Added:
[value_ppm ,v]))]))
65
Added:
(get-nutrient-measurement #:measured-on measured-on))))
65
66
66
67
67
68
;; READ