diff options
Diffstat (limited to 'handlers.rkt')
| -rw-r--r-- | handlers.rkt | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/handlers.rkt b/handlers.rkt new file mode 100644 index 0000000..42e4a76 --- /dev/null +++ b/handlers.rkt @@ -0,0 +1,48 @@ +#lang racket + +(provide app-dispatch) + +(require web-server/dispatch + web-server/http + web-server/formlets + "views.rkt" + "formlets.rkt" + "models/nutrient.rkt" + "models/nutrient-measurement.rkt") + + +(define (index _) + (define measurements (get-nutrient-measurements)) + (response/xexpr + #:preamble #"<!DOCTYPE html>" + (index-page measurements))) + +(define (new-measurement _) + (response/xexpr + #:preamble #"<!DOCTYPE html>" + (new-measurement-page))) + +(define (create-measurement req) + (define-values (measured-on measurements) + (formlet-process (measurements-formlet) req)) + (create-nutrient-measurement! measured-on measurements) + (redirect-to "/")) + +(define (destroy-measurement req) + (define-values (measured-on measurements) + (formlet-process (measurements-formlet) req)) + (create-nutrient-measurement! measured-on measurements) + (redirect-to "/")) + +(define (fallback req) + (response/xexpr + #:preamble #"<!DOCTYPE html>" + (fallback-page 404))) + +(define-values (app-dispatch app-url) + (dispatch-rules + [("measurement" "new") #:method "get" new-measurement] + [("measurement" "create") #:method "post" create-measurement] + [("measurement" "destroy") #:method "post" destroy-measurement] + [("") #:method "get" index] + [else fallback])) |