summaryrefslogtreecommitdiff
path: root/pages/shop/cart/add.fnl
diff options
context:
space:
mode:
Diffstat (limited to 'pages/shop/cart/add.fnl')
-rw-r--r--pages/shop/cart/add.fnl53
1 files changed, 24 insertions, 29 deletions
diff --git a/pages/shop/cart/add.fnl b/pages/shop/cart/add.fnl
index 36e3e41..53366b4 100644
--- a/pages/shop/cart/add.fnl
+++ b/pages/shop/cart/add.fnl
@@ -1,38 +1,33 @@
(local lib (require :lib))
-
-(fn create-order [db]
- (let [id (_G.must (luna.crypto.random-string 64))]
- (_G.must
- (luna.db.exec
- db "INSERT INTO orders (id, creation_time) VALUES (?, ?)"
- [id (lib.now)]))
- id))
-
-(fn create-order-line [db order-id name quantity]
- (_G.must
- (luna.db.exec
- db
- "INSERT INTO order_lines (order_id, product_name, quantity) VALUES (?, ?, ?)"
- [order-id name quantity])))
+(local shop (require :shop))
(fn render [request db]
(if (= request.method "POST")
(do
- (var order-id (lib.order-id request))
- (var headers
- (if (not order-id)
- (do
- (set order-id (create-order db))
- {:Set-Cookie (.. "order= " order-id "; HttpOnly; SameSite=strict"
- (if luna.debug? "" "; Secure"))})
- {}))
+ (var order-id (shop.order-id request))
+ (var headers {})
+
+ (when (not order-id)
+ (local next-week
+ (os.date "%a, %d %b %Y %H:%M:%S GMT" (+ (os.time) (* 60 60 24 7))))
+ (set order-id (shop.create-order db))
+ (set headers
+ {:Set-Cookie (.. "order=" order-id "; Path=/; "
+ "Expires=" next-week "; "
+ "HttpOnly; SameSite=strict"
+ (if luna.debug? "" "; Secure"))}))
- (if (and order-id request.body)
- (let [body-values (lib.parse-values request.body)]
- (create-order-line db order-id body-values.name body-values.quantity)
- (tset headers :Location "/shop")
- (values 302 headers ""))
- (values 400 {} "bad body")))
+ (let [body-values (lib.parse-values request.body)]
+ (if (and order-id request.body
+ (< 0 (tonumber body-values.quantity)))
+ (do
+ (shop.create-order-line
+ db order-id body-values.name body-values.quantity)
+ (tset headers :Location (_G.must
+ (luna.http.decode-url
+ body-values.redirect-url)))
+ (values 302 headers ""))
+ (values 400 {} "bad body"))))
(values 404 {} "not found")))
{: render}