Added crop accessors for the crop requirement entity.

Commit
8efe7a50f84f1ec5e79cf328c0161337db16410f
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
models/crop-requirement.rkt
index d4eb78be..e668c401 100644..100644
@@ -4,32 +4,22 @@
4 4 ;; Struct definitions
5 5 crop-requirement
6 6 crop-requirement?
7 Removed: crop-requirement-id crop-requirement-profile
7 Added: crop-requirement-id crop-requirement-profile crop-requirement-crop-id
8 8 ;; SQL CRUD
9 9 (contract-out
10 10 [create-crop-requirement! (->* (string?
11 Removed: (listof (cons/c
12 Removed: nutrient?
13 Removed: number?)))
11 Added: (listof (cons/c nutrient? number?)))
14 12 ((or/c #f crop?))
15 13 crop-requirement?)]
16 14 [get-crop-requirements (-> (listof crop-requirement?))]
17 15 [get-crop-requirement (->* ()
18 Removed: (#:id
19 Removed: (or/c #f exact-nonnegative-integer?)
20 Removed: #:profile
21 Removed: (or/c #f string?))
16 Added: (#:id (or/c #f exact-nonnegative-integer?)
17 Added: #:profile (or/c #f string?))
22 18 (or/c crop-requirement? #f))]
23 Removed: [get-crop-requirement-values (-> crop-requirement?
24 Removed: (listof (cons/c
25 Removed: nutrient?
26 Removed: number?)))]
27 Removed: [get-crop-requirement-value (-> crop-requirement?
28 Removed: nutrient?
29 Removed: number?)]
19 Added: [get-crop-requirement-values (-> crop-requirement? (listof (cons/c nutrient? number?)))]
20 Added: [get-crop-requirement-value (-> crop-requirement? nutrient? number?)]
30 21 [get-latest-crop-requirement-value (-> nutrient? number?)]
31 Removed: [delete-crop-requirement! (-> crop-requirement?
32 Removed: void?)]))
22 Added: [delete-crop-requirement! (-> crop-requirement? void?)]))
33 23
34 24 (require racket/contract
35 25 db
@@ -39,7 +29,7 @@
39 29 "crop.rkt")
40 30
41 31 ;; Instances of this struct are persisted in the crop_requirements table.
42 Removed: (struct crop-requirement (id profile) #:transparent)
32 Added: (struct crop-requirement (id profile crop-id) #:transparent)
43 33
44 34
45 35 ;; CREATE
@@ -79,33 +69,35 @@
79 69 ;; READ
80 70
81 71 (define (get-crop-requirements)
82 Removed: (for/list ([(id* profile*)
72 Added: (for/list ([(id* profile* crop-id*)
83 73 (in-query (current-conn)
84 Removed: (select id profile
74 Added: (select id profile crop_id
85 75 #:from crop_requirements
86 76 #:order-by id #:asc))])
87 Removed: (crop-requirement id* profile*)))
77 Added: (crop-requirement id* profile* (if (sql-null? crop-id*) #f crop-id*))))
88 78
89 79 (define (get-crop-requirement #:id [id #f]
90 Removed: #:profile [profile #f])
80 Added: #:profile [profile #f]
81 Added: #:crop [crop #f])
91 82 (define (where-expr)
92 83 (define clauses
93 84 (filter values
94 85 (list
95 86 (and id (format "id = ~e" id))
96 Removed: (and profile (format "profile = ~e" profile)))))
87 Added: (and profile (format "profile = ~e" profile))
88 Added: (and crop (format "crop_id = ~e" (crop-id crop))))))
97 89 (cond
98 90 [(null? clauses) ""]
99 91 [else (format "WHERE ~a" (string-join clauses " AND "))]))
100 92 (define query (string-join
101 Removed: `("SELECT id, profile"
93 Added: `("SELECT id, profile, crop_id"
102 94 "FROM crop_requirements"
103 95 ,(where-expr)
104 96 "ORDER BY id ASC"
105 97 "LIMIT 1")))
106 98 (match (query-maybe-row (current-conn) query)
107 Removed: [(vector id* profile*)
108 Removed: (crop-requirement id* profile*)]
99 Added: [(vector id* profile* crop-id*)
100 Added: (crop-requirement id* profile* crop-id*)]
109 101 [#f #f]))
110 102
111 103 (define (get-crop-requirement-values crop-requirement)