From 66c51b0e714fa8a1c80784108191270babc8525e Mon Sep 17 00:00:00 2001 From: unwox Date: Sun, 31 Aug 2025 17:51:57 +0600 Subject: implement shop --- pages/shop/cart/add.fnl | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 pages/shop/cart/add.fnl (limited to 'pages/shop/cart/add.fnl') diff --git a/pages/shop/cart/add.fnl b/pages/shop/cart/add.fnl new file mode 100644 index 0000000..36e3e41 --- /dev/null +++ b/pages/shop/cart/add.fnl @@ -0,0 +1,38 @@ +(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]))) + +(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"))}) + {})) + + (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"))) + (values 404 {} "not found"))) + +{: render} -- cgit v1.2.3