Add user entity to model.

Commit
7df7ad070b7a6146ad638294e379d976d363763e
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
db/migrations.rkt
index e0a1ef2c..d6391168 100644..100644
@@ -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
index 924b2f36..2df82ea3 100644..100644
@@ -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
index 00000000..2cbf4fea 000000..100644
@@ -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
index 2e102bb3..6f4834cf 100644..100644
@@ -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