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/_product/edit.fnl | 75 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 pages/shop/_product/edit.fnl (limited to 'pages/shop/_product/edit.fnl') diff --git a/pages/shop/_product/edit.fnl b/pages/shop/_product/edit.fnl new file mode 100644 index 0000000..9465d94 --- /dev/null +++ b/pages/shop/_product/edit.fnl @@ -0,0 +1,75 @@ +(import-macros {:compile-html <>} :macros) +(local templates (require :templates)) +(local {: product-form} (require :pages.shop.add)) +(local forms (require :forms)) +(local lib (require :lib)) + +(fn find-product [db name] + (. + (_G.must + (luna.db.query-assoc + db + "SELECT products.published, + products.name, + products.title, + products.position, + products.short_description, + products.stock, + products.type, + products.packaging, + products.description, + products.price_per, + products.stock, + products.vendor, + products.vendor_article, + products.vendor_description, + products.vendor_price_per, + products.vendor_product_link, + products.image1, + products.image2, + products.image3, + products.image4, + products.image5 + FROM products + WHERE products.name = ?" + [name])) + 1)) + +(fn update-product [tx form data where] + (let [sql-and-args (forms.form-update-sql-statement "products" form data {} where)] + (if sql-and-args + (_G.must (luna.db.exec-tx tx (table.unpack sql-and-args))) + (error "empty data for insert SQL-statement")))) + +(fn content [form data errors authenticated?] + [(<> + [:div {:class "side"} + (templates.header "/shop" authenticated?)]) + (<> + [:div {:class "content"} + [:div {:class "mb-1"} + [:a {:href (.. "/shop/" data.name)} "⟵ Обратно к товару"]] + [:h2 {} "Редактировать товар"] + (forms.render-form form data errors)])]) + +(fn render [request db authenticated?] + (if (not authenticated?) + (values 302 {:Location "/shop"} "") + (if request.form + (let [data (forms.convert-values-from-html product-form request.form db) + errors (forms.validate-form product-form data) + has-errors? (not (lib.empty-table? errors))] + (if has-errors? + (values 400 {} (templates.base (content product-form data errors + authenticated?))) + (do + (lib.with-tx db + (fn [tx] (update-product tx product-form data + {:name request.params._product}))) + (values 302 {:Location (.. "/shop/" data.name)} "")))) + (values 200 {} + (templates.base + (content product-form (find-product db request.params._product) {} + authenticated?)))))) + +{: render } -- cgit v1.2.3