[Racket] Ferti hydroponic nutrient solver, redux.
Add user entity to model.
Changed files
db/migrations.rkt
@@ -27,6 +27,36 @@
27
27
(set-box! migrations-box (append migrations (list (cons name-symbol sql)))))))
28
28
29
29
30
Added:
;;;;;;;;
31
Added:
;; USERS
32
Added:
;;;;;;;;
33
Added:
34
Added:
(define-migration "create table users"
35
Added:
(list
36
Added:
(create-table #:if-not-exists
37
Added:
users
38
Added:
#:columns
39
Added:
[id integer #:not-null]
40
Added:
[name text #:not-null]
41
Added:
[role_id integer]
42
Added:
#:constraints
43
Added:
(primary-key id)
44
Added:
(unique name)
45
Added:
(foreign-key role_id
46
Added:
#:references (user_roles id)))))
47
Added:
48
Added:
(define-migration "create table user_roles"
49
Added:
(list
50
Added:
(create-table #:if-not-exists
51
Added:
user_roles
52
Added:
#:columns
53
Added:
[id integer #:not-null]
54
Added:
[name text #:not-null]
55
Added:
#:constraints
56
Added:
(primary-key id)
57
Added:
(unique name))))
58
Added:
59
Added:
30
60
;;;;;;;;;;;;
31
61
;; NUTRIENTS
32
62
;;;;;;;;;;;;
handlers.rkt
@@ -7,6 +7,7 @@
7
7
web-server/formlets
8
8
"views.rkt"
9
9
"formlets.rkt"
10
Added:
"models/users.rkt"
10
11
"models/nutrient-measurement.rkt"
11
12
"models/nutrient-target.rkt"
12
13
"models/crop-requirement.rkt"
@@ -35,9 +36,10 @@
35
36
(ferti-page measurements ferti-recipe)))
36
37
37
38
(define (index _)
39
Added:
(define user (get-current-user))
38
40
(response/xexpr
39
41
#:preamble #"<!DOCTYPE html>"
40
Removed:
(index-page)))
42
Added:
(index-page user)))
41
43
42
44
43
45
;; Nutrient measurements
models/user.rkt
@@ -0,0 +1,33 @@
1
Added:
#lang racket
2
Added:
3
Added:
(provide
4
Added:
;; Struct definitions
5
Added:
user
6
Added:
user?
7
Added:
user-id
8
Added:
user-name
9
Added:
user-role
10
Added:
;; SQL CRUD
11
Added:
(contract-out
12
Added:
[get-current-user (-> (or/c user? #f))]
13
Added:
#; [delete-user! (-> user? void?)]))
14
Added:
15
Added:
(require racket/contract
16
Added:
db
17
Added:
sql
18
Added:
"../db/conn.rkt")
19
Added:
20
Added:
(struct user (id name role) #:transparent)
21
Added:
22
Added:
(define (get-current-user)
23
Added:
(define current-user-id "foobar")
24
Added:
(define query (select id name role_id
25
Added:
#:from users
26
Added:
#:where (= id ,current-user-id)
27
Added:
#:limit 1))
28
Added:
(define row (query-maybe-row (current-conn) query))
29
Added:
(cond
30
Added:
[(false? row) #f]
31
Added:
[else
32
Added:
(match-define (vector id name role_id) row)
33
Added:
(user id name role_id)]))
views.rkt
@@ -6,8 +6,10 @@
6
6
new-target-page
7
7
fallback-page)
8
8
9
Removed:
(require web-server/formlets
9
Added:
(require gregor
10
Added:
web-server/formlets
10
11
"formlets.rkt"
12
Added:
"models/users.rkt"
11
13
"models/nutrient.rkt"
12
14
"models/nutrient-measurement.rkt"
13
15
"models/nutrient-target.rkt"
@@ -202,11 +204,16 @@
202
204
[method "POST"])
203
205
,@(formlet-display (targets-formlet)))))))
204
206
205
Removed:
(define (index-page)
207
Added:
(define (index-page user)
206
208
(page-template
207
209
"Bienvenue à la FAPG"
208
Removed:
`((a ([class "btn btn-primary mb-3"] [href "/ferti"]) "Accéder à Ferti"))))
209
Removed:
210
Added:
`((h1 ([class "display-1 mb-3"])
211
Added:
,(format "~a, ~a."
212
Added:
(if (<= (->hours (current-time #:tz "Europe/Paris")) 17)
213
Added:
"Bonjour"
214
Added:
"Bonsoir")
215
Added:
(if user (user-name user) "et bienvenue")))
216
Added:
(a ([class "btn btn-primary mb-3"] [href "/ferti"]) "Accéder à Ferti"))))
210
217
211
218
(define (fallback-page request-code)
212
219
(page-template