1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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 }
|