228 Commits

Author SHA1 Message Date
fdd3644ec5 fix: cart and products 2026-04-16 12:58:49 +02:00
9b525f06cd fix: cart 2026-04-16 09:40:04 +02:00
cf48624d7f Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-16 08:34:33 +02:00
5a0765426a fix: cart 2026-04-15 13:53:05 +02:00
632e3afae3 Merge branch 'front-styles' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-15 13:47:29 +02:00
574e241c8a fix: migrations 2026-04-15 13:42:36 +02:00
b13293572c fix: cart 2026-04-15 13:37:46 +02:00
7bce04e05a Merge pull request 'is_oem' (#72) from is_oem into main
Reviewed-on: #72
Reviewed-by: Wiktor Dudzic <dudzic_wiktor@ma-al.com>
2026-04-15 11:32:43 +00:00
9a90de3f11 Merge pull request 'no-vat-customers' (#71) from no-vat-customers into main
Reviewed-on: #71
2026-04-15 11:32:13 +00:00
Daniel Goc
754bf2fe01 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into is_oem 2026-04-15 13:20:26 +02:00
Daniel Goc
2ca07f03ce expanded by is_oem 2026-04-15 13:19:28 +02:00
6efb39edf7 Merge branch 'no-vat-customers' of ssh://git.ma-al.com:8822/goc_daniel/b2b into no-vat-customers 2026-04-15 12:58:37 +02:00
e9af4bf311 feat: add no vat customers logic 2026-04-15 12:58:23 +02:00
cc570cc6a8 Merge branch 'main' into no-vat-customers 2026-04-15 10:57:16 +00:00
1bf706dcd0 feat: add no vat customers logic 2026-04-15 12:55:14 +02:00
be0687f4a9 Merge branch 'front-styles' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-15 12:53:00 +02:00
bfcfbb36c8 Merge remote-tracking branch 'origin/translate' into front-styles 2026-04-15 12:50:11 +02:00
19e3f6f0ed Merge remote-tracking branch 'origin/translate' into front-styles 2026-04-15 12:48:21 +02:00
46f4618301 fix: migrations 2026-04-15 12:47:10 +02:00
e335c3aa6f fix: cart 2026-04-15 12:42:20 +02:00
5ebf21c559 Merge remote-tracking branch 'origin/main' into front-styles 2026-04-15 12:08:59 +02:00
84b4c70ffb Merge pull request 'bugfix' (#70) from countries_bugfix into main
Reviewed-on: #70
Reviewed-by: Wiktor Dudzic <dudzic_wiktor@ma-al.com>
2026-04-15 10:00:41 +00:00
Daniel Goc
2fd9472db1 bugfix 2026-04-15 11:48:29 +02:00
66df535317 Merge pull request 'expand_carts' (#69) from expand_carts into main
Reviewed-on: #69
Reviewed-by: Wiktor Dudzic <dudzic_wiktor@ma-al.com>
2026-04-15 09:19:16 +00:00
e31ecda582 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into no-vat-customers 2026-04-15 11:14:40 +02:00
c97251c15b Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-15 08:18:08 +02:00
5663c4e126 fix: addresses 2026-04-14 15:57:45 +02:00
fa85c34794 fix: cart 2026-04-14 15:56:48 +02:00
Daniel Goc
e0a86febc4 add missing permission 2026-04-14 15:52:45 +02:00
1d257d82d3 Merge remote-tracking branch 'origin/main' into front-styles 2026-04-14 15:45:36 +02:00
Daniel Goc
40154ec861 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into expand_carts 2026-04-14 15:43:44 +02:00
Daniel Goc
bb507036db change add-product endpoint + remove-product 2026-04-14 15:42:30 +02:00
80a1314dc0 Merge pull request 'some small fixes' (#68) from small_fixes into main
Reviewed-on: #68
2026-04-14 13:16:17 +00:00
Daniel Goc
100a9f57d4 some small fixes 2026-04-14 14:08:57 +02:00
773e7d3c20 Merge pull request 'feat: lookup by id in customer search' (#61) from cust-search into main
Reviewed-on: #61
2026-04-14 11:42:56 +00:00
8e063978a8 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into no-vat-customers 2026-04-14 13:40:37 +02:00
03a0e5ea64 Merge branch 'main' into cust-search 2026-04-14 11:39:18 +00:00
ce8c19f715 Merge pull request 'feat: make routing per role, add unlogged role' (#67) from routing-per-role into main
Reviewed-on: #67
Reviewed-by: goc_daniel <goc_daniel@ma-al.com>
2026-04-14 11:39:13 +00:00
31a2744131 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into no-vat-customers 2026-04-14 13:36:11 +02:00
4edcb0a852 Merge branch 'main' into cust-search 2026-04-14 11:22:00 +00:00
a4120dafa2 Merge branch 'main' into routing-per-role 2026-04-14 11:21:53 +00:00
5e1a8e898c Merge pull request 'orders' (#58) from orders into main
Reviewed-on: #58
Reviewed-by: Wiktor Dudzic <dudzic_wiktor@ma-al.com>
2026-04-14 11:20:05 +00:00
Daniel Goc
c610ce38cc fixes after merging with main 2026-04-14 13:19:48 +02:00
8e3e41d6fe Merge branch 'main' into cust-search 2026-04-14 11:16:42 +00:00
b33da9d072 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into routing-per-role 2026-04-14 13:15:51 +02:00
Daniel Goc
604247b7c8 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into orders 2026-04-14 13:14:52 +02:00
f55d59a0fd feat: add no vat property to customers 2026-04-14 13:12:21 +02:00
e5988a85f3 Merge pull request 'update_categories' (#62) from update_categories into main
Reviewed-on: #62
Reviewed-by: Wiktor Dudzic <dudzic_wiktor@ma-al.com>
2026-04-14 10:35:28 +00:00
Daniel Goc
0cb5cc47bb Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into update_categories 2026-04-14 12:33:11 +02:00
Daniel Goc
1efc5417be permissions strings change 2026-04-14 12:32:24 +02:00
Daniel Goc
a0c3dd8ec8 added filtering on is_new and is_favorite 2026-04-14 12:28:39 +02:00
ab783b599d chore: add favorite field to base product query 2026-04-14 11:07:55 +02:00
d173af29fe fix: actually add the unlogged role to migration 2026-04-14 10:18:12 +02:00
f14d60d67b chore: swap permission string in handler to consts 2026-04-14 10:17:05 +02:00
967b101f9b feat: make routing per role, add unlogged role 2026-04-14 09:54:37 +02:00
059808665f Merge remote-tracking branch 'origin/translate' into front-styles 2026-04-14 08:58:32 +02:00
c59428adaa Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-14 08:56:05 +02:00
b54645830f fix: store customer-product 2026-04-14 08:55:53 +02:00
97ca510b99 Merge branch 'main' into cust-search 2026-04-14 06:26:47 +00:00
1973189525 Merge remote-tracking branch 'origin/main' into front-styles 2026-04-14 08:18:19 +02:00
26cbdeec0a Merge pull request 'product-procedures' (#59) from product-procedures into main
Reviewed-on: #59
Reviewed-by: goc_daniel <goc_daniel@ma-al.com>
2026-04-13 13:32:28 +00:00
Daniel Goc
ce4cadaa16 most importantly: new category and filter on is_new 2026-04-13 15:29:21 +02:00
Daniel Goc
7f05d39b38 Merge branch 'product-procedures' of ssh://git.ma-al.com:8822/goc_daniel/b2b into update_categories 2026-04-13 14:48:28 +02:00
83b7cd49dd feat: lookup by id in customer search 2026-04-13 14:43:18 +02:00
Daniel Goc
88255776f3 fixes 2026-04-13 14:29:36 +02:00
38cb07f3d4 chore: address pull request review issues 2026-04-13 14:22:14 +02:00
Daniel Goc
1f6d5ecb72 go routine and removing cart 2026-04-13 09:21:33 +02:00
5d97d537cd Merge remote-tracking branch 'origin/main' into front-styles 2026-04-13 08:22:35 +02:00
2e61cde742 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into product-procedures 2026-04-10 15:26:36 +02:00
Daniel Goc
d4d55e2757 send email when creating new order 2026-04-10 15:17:29 +02:00
54608410ea feat: create specific price system and adapt product queries 2026-04-10 15:04:34 +02:00
Daniel Goc
80d26bba12 GET -> POST 2026-04-10 14:57:24 +02:00
Daniel Goc
33e9d016e9 basic orders are ready 2026-04-10 14:53:40 +02:00
Daniel Goc
a03a2b461f small fix 2026-04-10 13:25:00 +02:00
Daniel Goc
134bc4ea53 code ready, time for testing... 2026-04-10 13:23:51 +02:00
Daniel Goc
8595969c6e Find is done 2026-04-10 12:17:52 +02:00
f1a2f4c0b2 fix: fix storage file 2026-04-10 11:38:36 +02:00
Daniel Goc
a6aa06faa0 basic setup 2026-04-10 11:17:58 +02:00
Daniel Goc
4f4b32b131 order struct 2026-04-10 11:06:43 +02:00
Daniel Goc
dfdf8b4db9 orders handler init 2026-04-10 11:01:39 +02:00
bfd20aaa7b Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-10 10:44:47 +02:00
Daniel Goc
438a13c04c orders tables 2026-04-10 10:34:44 +02:00
8024d9f739 Merge pull request 'favorites' (#57) from favorites into main
Reviewed-on: #57
Reviewed-by: Wiktor Dudzic <dudzic_wiktor@ma-al.com>
2026-04-10 08:09:13 +00:00
Daniel Goc
c5832c0cf5 minor change 2026-04-10 09:57:07 +02:00
Daniel Goc
61ccd32c4a catching errors again 2026-04-10 09:43:49 +02:00
Daniel Goc
f7f56c2928 catching errors 2026-04-10 09:33:44 +02:00
Daniel Goc
0a5ce5d9c2 ... 2026-04-10 09:13:13 +02:00
1fb2a33cfd fix: create component StorageFileBrowser 2026-04-09 16:00:36 +02:00
Daniel Goc
f1f5daa82b and add filtering by is_favorite 2026-04-09 14:53:56 +02:00
Daniel Goc
393de36cb2 favorites 2026-04-09 14:49:50 +02:00
9fb8e034fc Merge pull request 'added addresses endpoints' (#55) from addresses into main
Reviewed-on: #55
Reviewed-by: Wiktor Dudzic <dudzic_wiktor@ma-al.com>
2026-04-09 10:37:36 +00:00
Daniel Goc
1083ab7a61 added addresses endpoints 2026-04-09 12:21:56 +02:00
75af44b0df feat: product_attribute list with prices 2026-04-09 09:51:06 +02:00
0d2bf3a27f Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-09 08:28:47 +02:00
75997ab15b Merge pull request 'storage' (#46) from storage into main
Reviewed-on: #46
Reviewed-by: Wiktor Dudzic <dudzic_wiktor@ma-al.com>
2026-04-08 13:58:22 +00:00
c7692bc817 fix: page serchUsers 2026-04-08 13:51:10 +02:00
Daniel Goc
569a805a13 small fix 2026-04-08 13:23:05 +02:00
Daniel Goc
578d8c6cac merged with current main 2026-04-08 13:20:07 +02:00
Daniel Goc
cbd0baaa50 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into storage 2026-04-08 13:19:45 +02:00
Daniel Goc
7eee0bd032 rebuilt storage 2026-04-08 13:09:19 +02:00
8824796846 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-08 10:09:40 +02:00
92ba9c5f07 Merge pull request 'feat: searching on customer list' (#54) from product-procedures into main
Reviewed-on: #54
2026-04-08 07:58:55 +00:00
9eb8fc6625 fix: page usersList 2026-04-07 16:06:36 +02:00
a121ddc246 Merge branch 'main' into product-procedures 2026-04-07 14:00:27 +00:00
d56650ae5d feat: searching on customer list 2026-04-07 14:42:56 +02:00
a290a72d1d fix: style 2026-04-07 13:54:08 +02:00
b0d0338d23 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-07 13:40:51 +02:00
1a6311dc3d Merge pull request 'fix: google provider auth' (#53) from product-procedures into main
Reviewed-on: #53
2026-04-07 11:39:08 +00:00
2e645f3368 fix: google provider auth 2026-04-07 13:36:43 +02:00
849b18c4db Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-07 12:55:50 +02:00
de3f2d1777 Merge pull request 'product-procedures' (#52) from product-procedures into main
Reviewed-on: #52
Reviewed-by: Marek Goc <goc_marek@ma-al.com>
2026-04-07 08:45:15 +00:00
9187297367 refactor: move lists to their representative repos 2026-04-07 10:32:30 +02:00
a874a063d8 fix: page usersList 2026-04-07 10:06:36 +02:00
813d1f4879 feat: add customer list, modify pagination utils 2026-04-07 09:28:39 +02:00
11dab263fa Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-07 08:03:23 +02:00
5bda48b94a Merge branch 'front-styles' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-07 08:02:32 +02:00
2f4ccbaf92 fix: import 2026-04-07 08:01:21 +02:00
fb910b9ac6 Merge remote-tracking branch 'origin/main' into front-styles 2026-04-03 16:33:32 +02:00
c5cc4f7a48 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into product-procedures 2026-04-03 15:58:40 +02:00
76ca2a2eed chore: adapt code to new teleport feature 2026-04-03 15:58:35 +02:00
4c505c0520 Merge branch 'front-styles' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-03 15:54:23 +02:00
2f7e313c95 fix: user info 2026-04-03 15:53:31 +02:00
84388792f0 Merge pull request 'sanitize and save URL slugs' (#51) from translate_new_field into main
Reviewed-on: #51
Reviewed-by: Arina Yakovenko <yakovenko_arina@ma-al.com>
2026-04-03 13:15:32 +00:00
Daniel Goc
7264a11ba6 sanitize and save URL slugs 2026-04-03 14:58:50 +02:00
61dc240c38 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into product-procedures 2026-04-03 14:37:58 +02:00
110946a924 Merge remote-tracking branch 'origin/main' into front-styles 2026-04-03 14:35:29 +02:00
Daniel Goc
f6b321b602 a few fixes for user teleportation 2026-04-03 13:55:57 +02:00
Daniel Goc
af91842b14 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into storage 2026-04-03 13:29:06 +02:00
04e238fd66 Merge pull request 'user_teleport' (#50) from user_teleport into main
Reviewed-on: #50
Reviewed-by: Wiktor Dudzic <dudzic_wiktor@ma-al.com>
2026-04-03 11:27:11 +00:00
Daniel Goc
e0c53c97ba Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into user_teleport 2026-04-03 13:01:37 +02:00
09a77c14c9 Merge pull request 'add image link (large_default) to product description' (#49) from add_image_link into main
Reviewed-on: #49
Reviewed-by: Wiktor Dudzic <dudzic_wiktor@ma-al.com>
2026-04-03 10:58:21 +00:00
Daniel Goc
c7533a8deb add image link (large_default) to product description 2026-04-03 12:24:05 +02:00
Daniel Goc
1bab7f642f typo 2026-04-03 11:44:15 +02:00
3083330fcd Merge branch 'front-styles' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-03 11:32:10 +02:00
b7c4b6e3fd fix: store 2026-04-03 11:32:04 +02:00
e9016baf5b Merge remote-tracking branch 'origin/product-procedures' into front-styles 2026-04-03 11:31:35 +02:00
Daniel Goc
a988bbbc33 added copying and moving 2026-04-03 11:25:16 +02:00
68f31952da Merge branch 'front-styles' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-03 10:56:21 +02:00
c1efcf1b86 fix: style 2026-04-03 10:55:12 +02:00
5cab7573a8 Merge remote-tracking branch 'origin/product-procedures' into front-styles 2026-04-03 10:54:35 +02:00
701004d005 chore: add bruno endpoints 2026-04-03 09:40:30 +02:00
5f5c3641f9 Merge remote-tracking branch 'origin/product-procedures' into front-styles 2026-04-03 09:23:51 +02:00
d655e22173 chore: add bruno endpoints 2026-04-03 09:22:58 +02:00
5255ece1b4 Merge remote-tracking branch 'origin/translate' into front-styles 2026-04-03 08:57:10 +02:00
e82279926f erditor on product 2026-04-03 08:56:13 +02:00
855721b4b1 fix: tabs 2026-04-03 08:51:45 +02:00
c31964c41b Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into product-procedures 2026-04-03 08:42:56 +02:00
9fcecfb209 Merge branch 'front-styles' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-03 08:24:31 +02:00
ee375b7cbd Merge remote-tracking branch 'origin/translate' into front-styles 2026-04-02 16:15:00 +02:00
f58abda5cd fix: style 2026-04-02 16:07:15 +02:00
c20cdf2b63 fix: editor 2026-04-02 15:55:00 +02:00
2ce2556685 fix: tabs 2026-04-02 15:53:27 +02:00
e961967a49 Merge remote-tracking branch 'refs/remotes/origin/front-styles' into front-styles 2026-04-02 15:28:00 +02:00
Daniel Goc
a4eb3b52cf change incoming HTML to HTML4 2026-04-02 15:24:34 +02:00
0ed9d792b6 feat: roles, permissions 2026-04-02 15:06:00 +02:00
7c69d56a48 fix: style 2026-04-02 14:24:00 +02:00
Daniel Goc
395d670298 add storage to .gitignore 2026-04-02 14:00:58 +02:00
Daniel Goc
7d4242abb1 move path to params 2026-04-02 13:52:50 +02:00
1494af985a Merge branch 'front-styles' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-02 11:42:43 +02:00
9513feba37 fix: style 2026-04-02 11:42:12 +02:00
551b5ef77d fix: translations 2026-04-02 11:41:44 +02:00
a7f69c854a Merge remote-tracking branch 'refs/remotes/origin/front-styles' into front-styles 2026-04-02 11:32:26 +02:00
Daniel Goc
9c7eb5ee4e Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into storage 2026-04-02 11:31:39 +02:00
Daniel Goc
833f4a5a07 deleting and uploading files 2026-04-02 11:26:58 +02:00
Daniel Goc
2bfe97f6fe bugfix 2026-04-02 10:38:19 +02:00
Daniel Goc
b9bc121d43 getting to upload 2026-04-02 10:27:14 +02:00
7e8e9897e1 fix: button showProduct 2026-04-02 09:01:26 +02:00
9c8ce43998 Merge branch 'front-styles' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-02 08:56:55 +02:00
3652a78783 fix: button showProduct 2026-04-02 08:56:31 +02:00
ecf51e92e8 fix: button showProduct 2026-04-02 08:56:05 +02:00
d0c055a819 fix: select for languages 2026-04-02 08:52:29 +02:00
272c6066fb Merge branch 'front-styles' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-01 16:19:36 +02:00
79730eb826 fix: save product descriptions 2026-04-01 16:19:02 +02:00
6846ffc0dc fix: sidebar 2026-04-01 16:16:03 +02:00
d8f71bd8ff Merge remote-tracking branch 'origin/translate' into front-styles 2026-04-01 13:42:00 +02:00
aa57d38bd6 fix: selects 2026-04-01 13:41:21 +02:00
f9ae1e491e fix: translate 2026-04-01 13:40:56 +02:00
Daniel Goc
b2acb8c922 storage 2026-04-01 13:30:54 +02:00
8bf5a1cf8b Merge branch 'front-styles' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-01 10:53:49 +02:00
b48a143b40 fix: default lang 2026-04-01 10:52:34 +02:00
729b54ca1a fix: currency/county 2026-04-01 10:52:08 +02:00
980fb1543b Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-04-01 09:36:56 +02:00
b829bf2185 fix: translate 2026-04-01 09:36:01 +02:00
cf4d14a3cb Merge pull request 'front-styles' (#44) from front-styles into main
Reviewed-on: #44
2026-04-01 07:32:26 +00:00
30eb82ba53 fix: categories 2026-04-01 09:10:38 +02:00
a2a2c35ab3 Merge remote-tracking branch 'origin' into front-styles 2026-04-01 09:10:18 +02:00
Daniel Goc
03f04b2f53 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into user_teleport 2026-03-31 16:57:44 +02:00
Daniel Goc
55da953f32 add teleporting 2026-03-31 16:56:05 +02:00
684f910090 Merge pull request 'expand_get_menu' (#42) from expand_get_menu into main
Reviewed-on: #42
Reviewed-by: Marek Goc <goc_marek@ma-al.com>
2026-03-31 14:55:35 +00:00
5feaa9e15c Merge remote-tracking branch 'origin/expand_get_menu' into front-styles 2026-03-31 14:34:14 +02:00
Daniel Goc
04e2549a66 missing / in ImageLink 2026-03-31 14:30:47 +02:00
6428ddb527 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into product-procedures 2026-03-31 13:42:27 +02:00
d6066e39ce Merge branch 'front-styles' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate 2026-03-31 12:49:25 +02:00
fb4f7048ab fix: requests 2026-03-31 12:44:02 +02:00
Daniel Goc
a3f01eca7c misspell fix 2026-03-31 12:27:31 +02:00
12f6249721 fix: requests 2026-03-31 12:22:21 +02:00
Daniel Goc
1fa6206b75 update openapi and add the exists_in_database flag to get-product 2026-03-31 12:00:30 +02:00
Daniel Goc
fa89723eb6 add get-breadcrumb endpoint 2026-03-31 11:40:57 +02:00
Daniel Goc
8665c566ee added new category error, and some fixes 2026-03-31 10:52:36 +02:00
ec5ff123ac Merge pull request 'front-styles' (#38) from front-styles into main
Reviewed-on: #38
2026-03-31 07:30:33 +00:00
17317e778c Merge remote-tracking branch 'origin' into front-styles 2026-03-31 09:19:06 +02:00
94291ccc03 Merge pull request 'improved JWTToken update, added list-users endpoint, debug of getCountries' (#37) from list_users into main
Reviewed-on: #37
Reviewed-by: Marek Goc <goc_marek@ma-al.com>
2026-03-31 07:08:15 +00:00
91c5de1f67 fix: menu and routing 2026-03-30 16:39:14 +02:00
Daniel Goc
d0ce65c287 improved JWTToken update, added list-users endpoint, debug of getCountries 2026-03-30 16:19:26 +02:00
05bfa6e8b8 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into product-procedures 2026-03-30 15:17:53 +02:00
68f4850445 'routing, searching, fixes' 2026-03-30 01:04:25 +02:00
9ec329b1d6 fix products listing 2026-03-30 01:02:02 +02:00
f4ad8e02b4 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into product-procedures 2026-03-27 08:47:41 +01:00
ec05101037 fix meilisearch 2026-03-27 02:03:26 +01:00
29260080c2 Merge pull request 'fix top menu embeding struct' (#34) from routing into main
Reviewed-on: #34
2026-03-26 17:44:08 +00:00
9336cdfa28 fix top menu embeding struct 2026-03-26 18:43:23 +01:00
bd97ed1a3b feat: creat main products query 2026-03-26 15:59:13 +01:00
396e25b750 Merge pull request 'fix: routing/data table' (#33) from front-styles into main
Reviewed-on: #33
Reviewed-by: Marek Goc <goc_marek@ma-al.com>
2026-03-26 14:57:40 +00:00
df14eb5ae4 Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into product-procedures 2026-03-26 15:57:21 +01:00
3246ef4fb7 fix: routing/data table 2026-03-26 15:55:35 +01:00
21bea39e46 Merge pull request 'fix top menu' (#31) from routing into main
Reviewed-on: #31
Reviewed-by: Wiktor Dudzic <dudzic_wiktor@ma-al.com>
2026-03-26 12:53:41 +00:00
94cb8123d5 fix top menu 2026-03-26 13:51:38 +01:00
30c1278254 Merge pull request 'routing' (#30) from routing into main
Reviewed-on: #30
Reviewed-by: Wiktor Dudzic <dudzic_wiktor@ma-al.com>
2026-03-26 12:25:55 +00:00
c09e525736 add top menu 2026-03-26 13:22:10 +01:00
f5d524d45b Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into product-procedures 2026-03-26 11:46:37 +01:00
78bdac8ff0 Merge branch 'product-procedures' of ssh://git.ma-al.com:8822/goc_daniel/b2b into product-procedures 2026-03-26 10:07:15 +01:00
ca27cbea1c Merge branch 'routing' 2026-03-26 02:25:22 +01:00
af2b276599 add models generation and josn print 2026-03-26 02:22:14 +01:00
7c5a993623 presta models 2026-03-25 19:09:53 +01:00
2c128a4b36 feat: create procedure for retrieving products 2026-03-25 08:38:05 +01:00
9ed1106ff4 filters 2026-03-25 02:23:12 +01:00
fb2bc94a42 filters 2026-03-24 19:16:02 +01:00
dd806bbb1e feat: create procedure for retrieving products 2026-03-19 15:44:42 +01:00
593 changed files with 27993 additions and 9851 deletions

View File

@@ -28,7 +28,7 @@ tmp_dir = "tmp"
rerun = false
rerun_delay = 500
send_interrupt = false
stop_on_error = false
stop_on_error = true
[color]
app = ""

6
.env
View File

@@ -48,6 +48,10 @@ EMAIL_FROM=test@ma-al.com
EMAIL_FROM_NAME=Gitea Manager
EMAIL_ADMIN=goc_marek@ma-al.pl
# STORAGE
STORAGE_ROOT=./storage
I18N_LANGS=en,pl,cs
PDF_SERVER_URL=http://localhost:8000
@@ -58,3 +62,5 @@ FILE_MAAL_PL_PASSWORD=1FnwqcEgIUjQHjt1
IMAGE_PREFIX=https://www.naluconcept.com # remove prefix to serv them from same host as presta
CORS_ORGIN=https://www.naluconcept.com
DSN=root:Maal12345678@tcp(localhost:3306)/nalu

2
.gitignore vendored
View File

@@ -6,3 +6,5 @@ i18n/*.json
*_templ.go
tmp/main
test.go
storage/*
!storage/.gitkeep

14
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,14 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "./app/cmd/main.go",
"cwd": "${workspaceFolder}",
"envFile": "${workspaceFolder}/.env"
}
]
}

View File

@@ -2,7 +2,7 @@
"openapi": "3.0.3",
"info": {
"title": "b2b API",
"description": "Authentication, user management, and repository time tracking API\n\n## Filter Operators\nAll filter parameters support the following operators by adding a suffix to the parameter name:\n\n| Suffix | Operator | Example |\n|--------|----------|---------|\n| `_eq` | equals | `product_id_eq=12` |\n| `_neq` | not equals | `active_neq=0` |\n| `_gt` | greater than | `price_gt=100` |\n| `_gte` | greater than or equal | `price_gte=10` |\n| `_lt` | less than | `price_lt=500` |\n| `_lte` | less than or equal | `price_lte=500` |\n| `_in` | IN (comma-separated) | `product_id_in=1,2,3,4` |\n\n## Special Filters\n\n| Parameter | Example | Description |\n|-----------|---------|-------------|\n| `name=~text` | `name=~gold` | LIKE search (case-insensitive partial match) |\n| `price=[min,max]` | `price=[100,500]` | BETWEEN range (inclusive) |\n| `sort=field,direction` | `sort=price,desc` | ORDER BY clause (direction: asc/desc, default: desc) |\n| `p` | `p=1` | Page number (1-based, default: 1) |\n| `elems` | `elems=30` | Elements per page (max: 100, default: 30) |",
"description": "Authentication, user management, and repository time tracking API\n\n## Filtering\nAll filter parameters support the following operators by adding a suffix to the parameter name:\n\n### Comparison Operators\n\n| Suffix | Operator | Example | Description |\n|--------|----------|---------|-------------|\n| `_eq` | = | `product_id_eq=12` | Equals |\n| `_neq` | != | `active_neq=0` | Not equals |\n| `_gt` | > | `price_gt=100` | Greater than |\n| `_gte` | >= | `price_gte=10` | Greater than or equal |\n| `_lt` | < | `price_lt=500` | Less than |\n| `_lte` | <= | `price_lte=500` | Less than or equal |\n| `_in` | IN | `product_id_in=1,2,3,4` | IN clause (comma-separated values) |\n\n### Special Filters\n\n| Filter | Example | Description |\n|--------|---------|-------------|\n| `~` prefix | `name=~gold` | LIKE search - case-insensitive partial match on string values |\n| `[min,max]` | `price=[100,500]` | BETWEEN range - filters values between min and max (inclusive) |\n| `sort` | `sort=price,desc` | ORDER BY clause - field name and direction (asc/desc, default: desc) |\n| `p` | `p=1` | Page number - 1-based pagination (default: 1) |\n| `elems` | `elems=30` | Elements per page - results per page (max: 100, default: 30) |\n\n### Available Fields for Filtering\n\n**Products (`/api/v1/restricted/list-products/get-listing`):**\n\n| Field | Type | Example |\n|-------|------|---------|\n| `product_id` | integer | `product_id_eq=12`, `product_id_in=1,2,3` |\n| `name` | string | `name=~gold` (LIKE search) |\n| `reference` | string | `reference=ABC123` |\n| `category_name` | string | `category_name=~electronics` |\n| `id_category` | integer | `id_category_eq=5`, `id_category_in=1,2,3` |\n| `quantity` | integer | `quantity_gt=0` |\n| `variants_number` | integer | `variants_number_gte=1` |",
"version": "1.0.0",
"contact": {
"name": "API Support",
@@ -42,7 +42,7 @@
},
{
"name": "Search",
"description": "MeiliSearch endpoints (under /api/v1/restricted/meili-search, requires authentication)"
"description": "MeiliSearch endpoints (under /api/v1/restricted/search, requires authentication)"
},
{
"name": "Locale",
@@ -585,6 +585,35 @@
}
}
},
"/api/v1/restricted/search/settings": {
"post": {
"tags": ["Search"],
"summary": "Get MeiliSearch settings",
"description": "Returns MeiliSearch index configuration and settings. Requires authentication.",
"operationId": "getMeiliSearchSettings",
"security": [
{
"CookieAuth": [],
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "Settings retrieved successfully"
},
"401": {
"description": "Not authenticated",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
},
"/api/v1/public/auth/me": {
"get": {
"tags": ["Auth"],
@@ -593,7 +622,8 @@
"operationId": "getMe",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"responses": {
@@ -633,7 +663,8 @@
"operationId": "updateChoice",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"responses": {
@@ -788,18 +819,19 @@
"get": {
"tags": ["Products"],
"summary": "Get product listing",
"description": "Returns a paginated list of products with their basic information. Supports filtering via query parameters with operators (e.g., product_id_eq=12, name=~wałek). Use sort parameter for ordering. Requires authentication.",
"description": "Returns a paginated list of products with their basic information. Supports filtering via query parameters with operators (e.g., product_id_eq=12, name=~wałek, quantity_gt=0). Use sort parameter for ordering. Requires authentication.\n\n### Filterable Fields\n- `product_id` - Product ID (integer)\n- `name` - Product name (string, supports LIKE with ~ prefix)\n- `reference` - Product reference (string)\n- `category_name` - Category name (string, supports LIKE with ~ prefix)\n- `id_category` - Category ID (integer)\n- `quantity` - Stock quantity (integer)\n- `variants_number` - Number of variants (integer)\n\n### Example Requests\n```\nGET /api/v1/restricted/list-products/get-listing?product_id_eq=12\nGET /api/v1/restricted/list-products/get-listing?name=~wałek&sort=price,asc\nGET /api/v1/restricted/list-products/get-listing?quantity_gt=0&elems=50&p=2\n```",
"operationId": "getProductListing",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"parameters": [
{
"name": "p",
"in": "query",
"description": "Page number (1-based)",
"description": "Page number (1-based, default: 1)",
"required": false,
"schema": {
"type": "integer",
@@ -819,66 +851,12 @@
{
"name": "sort",
"in": "query",
"description": "Sort field and direction. Format: field,direction (e.g., 'product_id,desc' or 'name,asc')",
"description": "Sort order: field,direction (direction: asc/desc, default: desc). Sortable fields: product_id, name, reference, category_name, id_category, quantity, variants_number",
"required": false,
"schema": {
"type": "string",
"example": "product_id,desc"
}
},
{
"name": "product_id",
"in": "query",
"description": "Filter by product ID. Use suffix _eq, _gt, _gte, _lt, _lte, _neq, _in for operators.",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "name",
"in": "query",
"description": "Filter by product name using LIKE (case-insensitive). Use ~ prefix for partial match (e.g., '~wałek')",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "reference",
"in": "query",
"description": "Filter by product reference using LIKE (case-insensitive)",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "id_category",
"in": "query",
"description": "Filter by category ID. Use suffix _eq, _gt, _gte, _lt, _lte, _neq, _in for operators.",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "category_name",
"in": "query",
"description": "Filter by category name using LIKE (case-insensitive)",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "quantity",
"in": "query",
"description": "Filter by quantity. Use suffix _eq, _gt, _gte, _lt, _lte for operators.",
"required": false,
"schema": {
"type": "integer"
}
}
],
"responses": {
@@ -923,7 +901,8 @@
"operationId": "getProductDescription",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"parameters": [
@@ -990,7 +969,8 @@
"operationId": "saveProductDescription",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"parameters": [
@@ -1067,7 +1047,8 @@
"operationId": "translateProductDescription",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"parameters": [
@@ -1146,20 +1127,32 @@
}
}
},
"/api/v1/restricted/menu/get-menu": {
"/api/v1/restricted/menu/get-category-tree": {
"get": {
"tags": ["Menu"],
"summary": "Get menu structure",
"description": "Returns the menu structure for the current language. Requires authentication.",
"operationId": "getMenu",
"summary": "Get category tree",
"description": "Returns the category tree rooted at the given category ID for the current language. Requires authentication.",
"operationId": "getCategoryTree",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"parameters": [
{
"name": "root_category_id",
"in": "query",
"description": "Root category ID to build the tree from",
"required": true,
"schema": {
"type": "integer"
}
}
],
"responses": {
"200": {
"description": "Menu retrieved successfully",
"description": "Category tree retrieved successfully",
"content": {
"application/json": {
"schema": {
@@ -1169,7 +1162,7 @@
}
},
"400": {
"description": "Invalid request",
"description": "Invalid request or root category not found",
"content": {
"application/json": {
"schema": {
@@ -1191,17 +1184,78 @@
}
}
},
"/api/v1/restricted/menu/get-routes": {
"/api/v1/restricted/menu/get-breadcrumb": {
"get": {
"tags": ["Menu"],
"summary": "Get breadcrumb",
"description": "Returns the breadcrumb path from the root category to the specified category for the current language. Requires authentication.",
"operationId": "getBreadcrumb",
"security": [
{
"CookieAuth": [],
"BearerAuth": []
}
],
"parameters": [
{
"name": "root_category_id",
"in": "query",
"description": "Root category ID (breadcrumb starting point)",
"required": true,
"schema": {
"type": "integer"
}
},
{
"name": "category_id",
"in": "query",
"description": "Target category ID (breadcrumb destination)",
"required": true,
"schema": {
"type": "integer"
}
}
],
"responses": {
"200": {
"description": "Breadcrumb retrieved successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiResponse"
}
}
}
},
"400": {
"description": "Invalid request, category not found, or root never reached",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"401": {
"description": "Not authenticated",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
},
"/api/v1/public/menu/get-routes": {
"get": {
"tags": ["Menu"],
"summary": "Get routes",
"description": "Returns the routing structure for the current language. Requires authentication.",
"description": "Returns the routing structure for the current language.",
"operationId": "getRoutes",
"security": [
{
"CookieAuth": []
}
],
"responses": {
"200": {
"description": "Routes retrieved successfully",
@@ -1222,134 +1276,45 @@
}
}
}
},
"401": {
"description": "Not authenticated",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
},
"/api/v1/restricted/meili-search/search": {
"/api/v1/restricted/menu/get-top-menu": {
"get": {
"tags": ["Search"],
"summary": "Search products",
"description": "Searches products using MeiliSearch. Requires authentication.",
"operationId": "searchProducts",
"tags": ["Menu"],
"summary": "Get top menu",
"description": "Returns the top-level menu items for the current language. Requires authentication.",
"operationId": "getTopMenu",
"security": [
{
"CookieAuth": []
}
],
"parameters": [
{
"name": "query",
"in": "query",
"description": "Search query string",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "limit",
"in": "query",
"description": "Maximum number of results",
"required": true,
"schema": {
"type": "integer",
"format": "uint"
}
},
{
"name": "id_category",
"in": "query",
"description": "Filter by category ID",
"required": false,
"schema": {
"type": "integer",
"format": "uint"
}
},
{
"name": "price_lower_bound",
"in": "query",
"description": "Lower price bound",
"required": false,
"schema": {
"type": "number",
"format": "double"
}
},
{
"name": "price_upper_bound",
"in": "query",
"description": "Upper price bound",
"required": false,
"schema": {
"type": "number",
"format": "double"
}
"CookieAuth": [],
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "Search results retrieved successfully",
"description": "Top menu retrieved successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiResponse"
}
}
}
},
"400": {
"description": "Invalid request parameters",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"401": {
"description": "Not authenticated",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
},
"/api/v1/restricted/meili-search/create-index": {
"get": {
"tags": ["Search"],
"summary": "Create search index",
"description": "Creates a MeiliSearch index for products. Must be removed before proper release.",
"operationId": "createSearchIndex",
"security": [
{
"CookieAuth": []
}
],
"responses": {
"200": {
"description": "Index created successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiResponse"
"type": "object",
"properties": {
"message": {
"type": "string"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/B2BTopMenu"
},
"description": "Root menu items with nested children"
},
"count": {
"type": "integer",
"description": "Number of root menu items"
}
}
}
}
}
@@ -1377,20 +1342,71 @@
}
}
},
"/api/v1/restricted/meili-search/test": {
"get": {
"/api/v1/restricted/search/search": {
"post": {
"tags": ["Search"],
"summary": "Test MeiliSearch",
"description": "Tests the MeiliSearch search. Must be removed before proper release.",
"operationId": "testMeiliSearch",
"summary": "Search products",
"description": "Searches products using MeiliSearch. Requires authentication. Request body should contain MeiliSearch search parameters.",
"operationId": "searchProducts",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"description": "MeiliSearch search parameters (query, limit, filter, etc.)"
}
}
}
},
"responses": {
"200": {
"description": "Search results retrieved successfully"
},
"400": {
"description": "Invalid request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"401": {
"description": "Not authenticated",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
},
"/api/v1/restricted/search/create-index": {
"get": {
"tags": ["Search"],
"summary": "Create search index",
"description": "Creates a MeiliSearch index for products. Must be removed before proper release.",
"operationId": "createSearchIndex",
"security": [
{
"CookieAuth": [],
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "MeiliSearch test successful",
"description": "Index created successfully",
"content": {
"application/json": {
"schema": {
@@ -1430,7 +1446,8 @@
"operationId": "getAvailableLanguages",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"responses": {
@@ -1475,7 +1492,8 @@
"operationId": "getCountriesAndCurrencies",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"responses": {
@@ -1520,7 +1538,8 @@
"operationId": "addNewCart",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"responses": {
@@ -1555,7 +1574,8 @@
"operationId": "changeCartName",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"parameters": [
@@ -1620,7 +1640,8 @@
"operationId": "retrieveCartsInfo",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"responses": {
@@ -1655,7 +1676,8 @@
"operationId": "retrieveCart",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"parameters": [
@@ -1711,7 +1733,8 @@
"operationId": "addProductToCart",
"security": [
{
"CookieAuth": []
"CookieAuth": [],
"BearerAuth": []
}
],
"parameters": [
@@ -2065,46 +2088,6 @@
}
}
},
"MenuItem": {
"type": "object",
"description": "Menu item structure",
"properties": {
"category_id": {
"type": "integer",
"format": "uint",
"description": "Category ID"
},
"label": {
"type": "string",
"description": "Menu item label"
},
"params": {
"$ref": "#/components/schemas/MenuItemParams"
},
"children": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MenuItem"
},
"description": "Child menu items"
}
}
},
"MenuItemParams": {
"type": "object",
"properties": {
"category_id": {
"type": "integer",
"format": "uint"
},
"link_rewrite": {
"type": "string"
},
"locale": {
"type": "string"
}
}
},
"Route": {
"type": "object",
"description": "Application route",
@@ -2408,6 +2391,58 @@
"description": "Build date in RFC3339 format"
}
}
},
"CategoryInBreadcrumb": {
"type": "object",
"description": "A single item in a category breadcrumb path",
"properties": {
"category_id": {
"type": "integer",
"format": "uint",
"description": "Category ID"
},
"name": {
"type": "string",
"description": "Category name"
}
}
},
"B2BTopMenu": {
"type": "object",
"description": "Top-level menu item for B2B back-office",
"properties": {
"menu_id": {
"type": "integer",
"description": "Menu item ID"
},
"label": {
"type": "object",
"description": "Menu label as JSON (multilingual, e.g. {\"en\": \"Dashboard\", \"pl\": \"Panel\"})"
},
"parent_id": {
"type": "integer",
"description": "Parent menu ID (null for root items)"
},
"params": {
"type": "object",
"description": "Menu item parameters as JSON"
},
"active": {
"type": "integer",
"description": "Active status (1 = active, 0 = inactive)"
},
"position": {
"type": "integer",
"description": "Sort position"
},
"children": {
"type": "array",
"items": {
"$ref": "#/components/schemas/B2BTopMenu"
},
"description": "Child menu items"
}
}
}
},
"securitySchemes": {

25
app/cmd/cmds/genModels.go Normal file
View File

@@ -0,0 +1,25 @@
package cmds
import (
"context"
"log/slog"
"time"
"git.ma-al.com/goc_daniel/b2b/app/db"
genmodels "git.ma-al.com/goc_daniel/b2b/app/utils/genModels"
"github.com/spf13/cobra"
)
var generateModelsCmd = &cobra.Command{
Use: "genmodels",
Short: "generate input database models",
Run: func(cmd *cobra.Command, args []string) {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute*5)
defer cancel()
err := genmodels.New(db.Get()).GormGenModels(ctx)
if err != nil {
slog.Error("Error performing work: " + err.Error())
}
},
}

View File

@@ -0,0 +1,60 @@
package cmds
import (
"log"
"os"
"git.ma-al.com/goc_daniel/b2b/app/delivery/web"
"git.ma-al.com/goc_daniel/b2b/app/service/langsService"
"git.ma-al.com/goc_daniel/b2b/app/utils/version"
"github.com/spf13/cobra"
)
var (
rootCmd = &cobra.Command{
Use: "b2b",
Short: "This is set of tools for b2b application",
Run: func(cmd *cobra.Command, args []string) {
if versionFlag, _ := cmd.Flags().GetBool("version"); versionFlag {
log.Println(version.String())
return
}
// Create and setup the server
server := web.New()
// Configure routes
if err := server.Setup(); err != nil {
log.Fatalf("Failed to setup server: %v", err)
}
// Load translations on startup
if err := langsService.LangSrv.LoadTranslations(); err != nil {
log.Printf("Warning: Failed to load translations on startup: %v", err)
} else {
log.Println("Translations loaded successfully on startup")
}
// Start the server
if err := server.Run(); err != nil {
log.Fatalf("Failed to start server: %v", err)
}
},
}
)
func Execute() error {
err := rootCmd.Execute()
if err != nil {
os.Exit(1)
}
return nil
}
func init() {
rootCmd.Flags().BoolP("version", "v", false, "show version and exit")
rootCmd.AddCommand(generateModelsCmd)
}

View File

@@ -1,41 +1,9 @@
package main
import (
"flag"
"log"
"git.ma-al.com/goc_daniel/b2b/app/delivery/web"
"git.ma-al.com/goc_daniel/b2b/app/service/langsService"
"git.ma-al.com/goc_daniel/b2b/app/utils/version"
"git.ma-al.com/goc_daniel/b2b/app/cmd/cmds"
)
func main() {
// Check for version subcommand
versionFlag := flag.Bool("version", false, "Show version information")
flag.Parse()
if *versionFlag {
log.Println(version.String())
return
}
// Create and setup the server
server := web.New()
// Configure routes
if err := server.Setup(); err != nil {
log.Fatalf("Failed to setup server: %v", err)
}
// Load translations on startup
if err := langsService.LangSrv.LoadTranslations(); err != nil {
log.Printf("Warning: Failed to load translations on startup: %v", err)
} else {
log.Println("Translations loaded successfully on startup")
}
// Start the server
if err := server.Run(); err != nil {
log.Fatalf("Failed to start server: %v", err)
}
cmds.Execute()
}

View File

@@ -2,8 +2,10 @@ package config
import (
"fmt"
"log"
"log/slog"
"os"
"path/filepath"
"reflect"
"strconv"
"strings"
@@ -24,6 +26,8 @@ type Config struct {
GoogleTranslate GoogleTranslateConfig
Image ImageConfig
Cors CorsConfig
MeiliSearch MeiliSearchConfig
Storage StorageConfig
}
type I18n struct {
@@ -38,6 +42,11 @@ type CorsConfig struct {
Origins []string `env:"CORS_ORGIN"`
}
type MeiliSearchConfig struct {
ServerURL string `env:"MEILISEARCH_URL"`
ApiKey string `env:"MEILISEARCH_API_KEY"`
}
type ImageConfig struct {
ImagePrefix string `env:"IMAGE_PREFIX"`
}
@@ -89,6 +98,10 @@ type EmailConfig struct {
Enabled bool `env:"EMAIL_ENABLED,false"`
}
type StorageConfig struct {
RootFolder string `env:"STORAGE_ROOT"`
}
type PdfPrinter struct {
ServerUrl string `env:"PDF_SERVER_URL,http://localhost:8000"`
}
@@ -149,7 +162,7 @@ func load() *Config {
err = loadEnv(&cfg.OAuth.Google)
if err != nil {
slog.Error("not possible to load env variables for outh google : ", err.Error(), "")
slog.Error("not possible to load env variables for oauth google : ", err.Error(), "")
}
err = loadEnv(&cfg.App)
@@ -164,12 +177,12 @@ func load() *Config {
err = loadEnv(&cfg.I18n)
if err != nil {
slog.Error("not possible to load env variables for email : ", err.Error(), "")
slog.Error("not possible to load env variables for i18n : ", err.Error(), "")
}
err = loadEnv(&cfg.Pdf)
if err != nil {
slog.Error("not possible to load env variables for email : ", err.Error(), "")
slog.Error("not possible to load env variables for pdf : ", err.Error(), "")
}
err = loadEnv(&cfg.GoogleTranslate)
@@ -179,13 +192,25 @@ func load() *Config {
err = loadEnv(&cfg.Image)
if err != nil {
slog.Error("not possible to load env variables for google translate : ", err.Error(), "")
slog.Error("not possible to load env variables for image : ", err.Error(), "")
}
err = loadEnv(&cfg.Cors)
if err != nil {
slog.Error("not possible to load env variables for google translate : ", err.Error(), "")
slog.Error("not possible to load env variables for cors : ", err.Error(), "")
}
err = loadEnv(&cfg.MeiliSearch)
if err != nil {
slog.Error("not possible to load env variables for meili search : ", err.Error(), "")
}
err = loadEnv(&cfg.Storage)
if err != nil {
slog.Error("not possible to load env variables for storage : ", err.Error(), "")
}
cfg.Storage.RootFolder = ResolveRelativePath(cfg.Storage.RootFolder)
return cfg
}
@@ -296,6 +321,22 @@ func setValue(field reflect.Value, val string, key string) error {
return nil
}
func ResolveRelativePath(relativePath string) string {
// get working directory (where program was started)
wd, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
// convert to absolute path
absPath := relativePath
if !filepath.IsAbs(absPath) {
absPath = filepath.Join(wd, absPath)
}
return filepath.Clean(absPath)
}
func parseEnvTag(tag string) (key string, def *string) {
if tag == "" {
return "", nil

View File

@@ -7,6 +7,7 @@ import (
"git.ma-al.com/goc_daniel/b2b/app/config"
extraClausePlugin "github.com/WinterYukky/gorm-extra-clause-plugin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
@@ -52,7 +53,10 @@ func newMySQLDB(cfg *config.DatabaseConfig) (*gorm.DB, error) {
sqlDB.SetConnMaxLifetime(cfg.ConnMaxLifetime)
log.Println("✓ Database connection established successfully")
err = db.Use(extraClausePlugin.New())
if err != nil {
panic(err)
}
return db, nil
}

View File

@@ -1,19 +1,24 @@
package middleware
import (
"encoding/base64"
"strconv"
"strings"
"time"
"git.ma-al.com/goc_daniel/b2b/app/config"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware/perms"
"git.ma-al.com/goc_daniel/b2b/app/model"
"git.ma-al.com/goc_daniel/b2b/app/service/authService"
constdata "git.ma-al.com/goc_daniel/b2b/app/utils/const_data"
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
"github.com/gofiber/fiber/v3"
)
// AuthMiddleware creates authentication middleware
func AuthMiddleware() fiber.Handler {
func Authenticate() fiber.Handler {
authService := authService.NewAuthService()
return func(c fiber.Ctx) error {
// Get token from Authorization header
authHeader := c.Get("Authorization")
@@ -21,17 +26,13 @@ func AuthMiddleware() fiber.Handler {
// Try to get from cookie
authHeader = c.Cookies("access_token")
if authHeader == "" {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": "authorization token required",
})
return c.Next()
}
} else {
// Extract token from "Bearer <token>"
parts := strings.Split(authHeader, " ")
if len(parts) != 2 || parts[0] != "Bearer" {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": "invalid authorization header format",
})
return c.Next()
}
authHeader = parts[1]
}
@@ -39,79 +40,147 @@ func AuthMiddleware() fiber.Handler {
// Validate token
claims, err := authService.ValidateToken(authHeader)
if err != nil {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": "invalid or expired token",
})
return c.Next()
}
// Get user from database
user, err := authService.GetUserByID(claims.UserID)
if err != nil {
return c.Next()
}
// Check if user is active
if !user.IsActive {
return c.Next()
}
// Create locale. LangID is overwritten by auth Token
var userLocale model.UserLocale
userLocale.OriginalUser = user
// Check if target user is present
targetUserIDAttribute := c.Query("target_user_id")
if targetUserIDAttribute == "" {
userLocale.User = user
c.Locals(constdata.USER_LOCALE, &userLocale)
return c.Next()
}
// We now populate the target user
if !userLocale.OriginalUser.HasPermission(perms.Teleport) {
return c.Next()
}
targetUserID, err := strconv.Atoi(targetUserIDAttribute)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"error": "invalid target user id attribute",
})
}
// to verify target user, we use the same functionality as for verifying original user
// Get target user from database
user, err = authService.GetUserByID(uint(targetUserID))
if err != nil {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": "target user not found",
})
}
// Check if target user is active
if !user.IsActive {
return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
"error": "target user account is inactive",
})
}
userLocale.User = user
c.Locals(constdata.USER_LOCALE, &userLocale)
return c.Next()
}
}
func Authorize() fiber.Handler {
return func(c fiber.Ctx) error {
_, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": "not authenticated",
})
}
return c.Next()
}
}
// Webdav
func Webdav() fiber.Handler {
authService := authService.NewAuthService()
return func(c fiber.Ctx) error {
authHeader := c.Get("Authorization")
if authHeader == "" {
c.Set("WWW-Authenticate", `Basic realm="webdav"`)
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": "authorization token required",
})
}
if !strings.HasPrefix(authHeader, "Basic ") {
c.Set("WWW-Authenticate", `Basic realm="webdav"`)
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": "invalid authorization token",
})
}
encoded := strings.TrimPrefix(authHeader, "Basic ")
decoded, err := base64.StdEncoding.DecodeString(encoded)
if err != nil {
c.Set("WWW-Authenticate", `Basic realm="webdav"`)
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": "invalid authorization token",
})
}
credentials := strings.SplitN(string(decoded), ":", 2)
rawToken := ""
if len(credentials) == 1 {
rawToken = credentials[0]
} else if len(credentials) == 2 {
rawToken = credentials[1]
}
if len(rawToken) != constdata.NBYTES_IN_WEBDAV_TOKEN*2 {
c.Set("WWW-Authenticate", `Basic realm="webdav"`)
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": "invalid authorization token",
})
}
// we identify user based on this token.
user, err := authService.GetUserByWebdavToken(rawToken)
if err != nil {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": "user not found",
})
}
// Check if user is active
if !user.IsActive {
return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
"error": "user account is inactive",
})
}
// Set user in context
c.Locals("user", user.ToSession())
c.Locals("userID", user.ID)
return c.Next()
}
}
// RequireAdmin creates admin-only middleware
func RequireAdmin() fiber.Handler {
return func(c fiber.Ctx) error {
user := c.Locals("user")
if user == nil {
if user.WebdavExpires != nil && user.WebdavExpires.Before(time.Now()) {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": "not authenticated",
"error": "invalid or expired token",
})
}
userSession, ok := user.(*model.UserSession)
if !ok {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"error": "invalid user session",
})
}
if userSession.Role != model.RoleAdmin {
return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
"error": "admin access required",
})
}
var userLocale model.UserLocale
userLocale.OriginalUser = user
userLocale.User = user
c.Locals(constdata.USER_LOCALE, &userLocale)
return c.Next()
}
}
// GetUserID extracts user ID from context
func GetUserID(c fiber.Ctx) uint {
userID, ok := c.Locals("userID").(uint)
if !ok {
return 0
}
return userID
}
// GetUser extracts user from context
func GetUser(c fiber.Ctx) *model.UserSession {
user, ok := c.Locals("user").(*model.UserSession)
if !ok {
return nil
}
return user
}
// GetConfig returns the app config
func GetConfig() *config.Config {
return config.Get()

View File

@@ -4,7 +4,9 @@ import (
"strconv"
"strings"
"git.ma-al.com/goc_daniel/b2b/app/model"
"git.ma-al.com/goc_daniel/b2b/app/service/langsService"
constdata "git.ma-al.com/goc_daniel/b2b/app/utils/const_data"
"github.com/gofiber/fiber/v3"
)
@@ -22,12 +24,8 @@ func LanguageMiddleware() fiber.Handler {
if id, err := strconv.ParseUint(langIDStr, 10, 32); err == nil {
langID = uint(id)
if langID > 0 {
lang, err := langService.GetLanguageById(langID)
if err == nil {
c.Locals("langID", langID)
c.Locals("lang", lang)
return c.Next()
}
c.Locals(constdata.USER_LOCALE, returnNewLocale(langID))
return c.Next()
}
}
}
@@ -38,12 +36,8 @@ func LanguageMiddleware() fiber.Handler {
if id, err := strconv.ParseUint(cookieLang, 10, 32); err == nil {
langID = uint(id)
if langID > 0 {
lang, err := langService.GetLanguageById(langID)
if err == nil {
c.Locals("langID", langID)
c.Locals("lang", lang)
return c.Next()
}
c.Locals(constdata.USER_LOCALE, returnNewLocale(langID))
return c.Next()
}
}
}
@@ -57,8 +51,7 @@ func LanguageMiddleware() fiber.Handler {
lang, err := langService.GetLanguageByISOCode(isoCode)
if err == nil && lang != nil {
langID = uint(lang.ID)
c.Locals("langID", langID)
c.Locals("lang", lang)
c.Locals(constdata.USER_LOCALE, returnNewLocale(langID))
return c.Next()
}
}
@@ -68,8 +61,7 @@ func LanguageMiddleware() fiber.Handler {
defaultLang, err := langService.GetDefaultLanguage()
if err == nil && defaultLang != nil {
langID = uint(defaultLang.ID)
c.Locals("langID", langID)
c.Locals("lang", defaultLang)
c.Locals(constdata.USER_LOCALE, returnNewLocale(langID))
}
return c.Next()
@@ -104,11 +96,9 @@ func parseAcceptLanguage(header string) string {
return strings.ToLower(first)
}
// GetLanguageID extracts language ID from context
func GetLanguageID(c fiber.Ctx) uint {
langID, ok := c.Locals("langID").(uint)
if !ok {
return 0
}
return langID
func returnNewLocale(lang_id uint) *model.UserLocale {
newLocale := model.UserLocale{}
newLocale.OriginalUser = &model.Customer{}
newLocale.OriginalUser.LangID = lang_id
return &newLocale
}

View File

@@ -0,0 +1,28 @@
package middleware
import (
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware/perms"
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
func Require(p perms.Permission) fiber.Handler {
return func(c fiber.Ctx) error {
user, ok := localeExtractor.GetCustomer(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
for _, perm := range user.Role.Permissions {
if perm.Name == p {
return c.Next()
}
}
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrForbidden)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrForbidden)))
}
}

View File

@@ -0,0 +1,18 @@
package perms
type Permission string
const (
UserReadAny Permission = "user.read.any"
UserWriteAny Permission = "user.write.any"
UserDeleteAny Permission = "user.delete.any"
CurrencyWrite Permission = "currency.write"
SpecificPriceManage Permission = "specific_price.manage"
WebdavCreateToken Permission = "webdav.create_token"
ProductTranslationSave Permission = "product_translation.save"
ProductTranslationTranslate Permission = "product_translation.translate"
SearchCreateIndex Permission = "search.create_index"
OrdersViewAll Permission = "orders.view_all"
OrdersModifyAll Permission = "orders.modify_all"
Teleport Permission = "teleport"
)

View File

@@ -2,13 +2,17 @@ package public
import (
"log"
"strconv"
"time"
"git.ma-al.com/goc_daniel/b2b/app/config"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware"
"git.ma-al.com/goc_daniel/b2b/app/model"
"git.ma-al.com/goc_daniel/b2b/app/service/authService"
constdata "git.ma-al.com/goc_daniel/b2b/app/utils/const_data"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
@@ -45,7 +49,7 @@ func AuthHandlerRoutes(r fiber.Router) fiber.Router {
r.Get("/google", handler.GoogleLogin)
r.Get("/google/callback", handler.GoogleCallback)
authProtected := r.Group("", middleware.AuthMiddleware())
authProtected := r.Group("", middleware.Authorize())
authProtected.Get("/me", handler.Me)
authProtected.Post("/update-choice", handler.UpdateJWTToken)
@@ -264,15 +268,15 @@ func (h *AuthHandler) RefreshToken(c fiber.Ctx) error {
// Me returns the current user info
func (h *AuthHandler) Me(c fiber.Ctx) error {
user := c.Locals("user")
if user == nil {
userLocale := c.Locals(constdata.USER_LOCALE).(*model.UserLocale)
if userLocale.OriginalUser == nil {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrNotAuthenticated),
})
}
return c.JSON(fiber.Map{
"user": user,
"user": *userLocale.OriginalUser,
})
}
@@ -345,9 +349,49 @@ func (h *AuthHandler) CompleteRegistration(c fiber.Ctx) error {
return c.Status(fiber.StatusCreated).JSON(response)
}
// Updates JWT Tokens
// Updates JWT Tokens. Requires authentication and updates access token only
func (h *AuthHandler) UpdateJWTToken(c fiber.Ctx) error {
return h.authService.UpdateJWTToken(c)
userLocale, ok := c.Locals(constdata.USER_LOCALE).(*model.UserLocale)
if !ok {
return c.Status(fiber.StatusUnauthorized).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrNotAuthenticated)))
}
// Parse language and country_id from query params
langIDStr := c.Query("lang_id")
if langIDStr != "" {
parsedID, err := strconv.ParseUint(langIDStr, 10, 32)
if err != nil {
return c.Status(fiber.StatusBadRequest).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadLangID)))
}
userLocale.OriginalUser.LangID = uint(parsedID)
}
countryIDStr := c.Query("country_id")
if countryIDStr != "" {
parsedID, err := strconv.ParseUint(countryIDStr, 10, 32)
if err != nil {
return c.Status(fiber.StatusBadRequest).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadCountryID)))
}
userLocale.OriginalUser.CountryID = uint(parsedID)
}
newAccessToken, err := h.authService.UpdateJWTToken(userLocale.OriginalUser)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, err),
})
}
// does not reset refresh token
h.setAuthCookies(c, newAccessToken, "")
return c.JSON(response.Make(&fiber.Map{"token": newAccessToken}, 0, i18n.T_(c, response.Message_OK)))
}
// GoogleLogin redirects the user to Google's OAuth2 consent page
@@ -414,12 +458,12 @@ func (h *AuthHandler) GoogleCallback(c fiber.Ctx) error {
// Redirect to the locale-prefixed charts page after successful Google login.
// The user's preferred language is stored in the auth response; fall back to "en".
lang, err := h.authService.GetLangISOCode(response.User.LangID)
lang_iso_code, err := h.authService.GetLangISOCode(response.User.LangID)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadLangID)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrBadLangID),
return c.Status(responseErrors.GetErrorStatus(err)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, err),
})
}
return c.Redirect().To(h.config.App.BaseURL + "/" + lang)
return c.Redirect().To(h.config.App.BaseURL + "/" + lang_iso_code)
}

View File

@@ -0,0 +1,56 @@
package public
import (
"git.ma-al.com/goc_daniel/b2b/app/service/menuService"
constdata "git.ma-al.com/goc_daniel/b2b/app/utils/const_data"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
type RoutingHandler struct {
menuService *menuService.MenuService
}
func NewRoutingHandler() *RoutingHandler {
menuService := menuService.New()
return &RoutingHandler{
menuService: menuService,
}
}
// AuthHandlerRoutes registers all auth routes
func RoutingHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewRoutingHandler()
r.Get("/get-routes", handler.GetRouting)
return r
}
func (h *RoutingHandler) GetRouting(c fiber.Ctx) error {
langId, ok := localeExtractor.GetLangID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
var roleId uint
customer, ok := localeExtractor.GetCustomer(c)
if !ok {
roleId = constdata.UNLOGGED_USER_ROLE_ID
} else {
roleId = customer.RoleID
}
menu, err := h.menuService.GetRoutes(langId, roleId)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&menu, 0, i18n.T_(c, response.Message_OK)))
}

View File

@@ -0,0 +1,157 @@
package restricted
import (
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/service/addressesService"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
type AddressesHandler struct {
addressesService *addressesService.AddressesService
}
func NewAddressesHandler() *AddressesHandler {
addressesService := addressesService.New()
return &AddressesHandler{
addressesService: addressesService,
}
}
func AddressesHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewAddressesHandler()
r.Get("/get-template", handler.GetTemplate)
r.Post("/add-new-address", handler.AddNewAddress)
r.Post("/modify-address", handler.ModifyAddress)
r.Get("/retrieve-addresses", handler.RetrieveAddressesInfo)
r.Delete("/delete-address", handler.DeleteAddress)
return r
}
func (h *AddressesHandler) GetTemplate(c fiber.Ctx) error {
country_id_attribute := c.Query("country_id")
country_id, err := strconv.Atoi(country_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
template, err := h.addressesService.GetTemplate(uint(country_id))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&template, 0, i18n.T_(c, response.Message_OK)))
}
func (h *AddressesHandler) AddNewAddress(c fiber.Ctx) error {
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
address_info := string(c.Body())
if address_info == "" {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
country_id_attribute := c.Query("country_id")
country_id, err := strconv.Atoi(country_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
err = h.addressesService.AddNewAddress(userID, address_info, uint(country_id))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}
func (h *AddressesHandler) ModifyAddress(c fiber.Ctx) error {
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
address_id_attribute := c.Query("address_id")
address_id, err := strconv.Atoi(address_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
address_info := string(c.Body())
if address_info == "" {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
country_id_attribute := c.Query("country_id")
country_id, err := strconv.Atoi(country_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
err = h.addressesService.ModifyAddress(userID, uint(address_id), address_info, uint(country_id))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}
func (h *AddressesHandler) RetrieveAddressesInfo(c fiber.Ctx) error {
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
addresses, err := h.addressesService.RetrieveAddresses(userID)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(addresses, 0, i18n.T_(c, response.Message_OK)))
}
func (h *AddressesHandler) DeleteAddress(c fiber.Ctx) error {
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
address_id_attribute := c.Query("address_id")
address_id, err := strconv.Atoi(address_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
err = h.addressesService.DeleteAddress(userID, uint(address_id))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}

View File

@@ -5,6 +5,7 @@ import (
"git.ma-al.com/goc_daniel/b2b/app/service/cartsService"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
@@ -28,22 +29,25 @@ func CartsHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewCartsHandler()
r.Get("/add-new-cart", handler.AddNewCart)
r.Delete("/remove-cart", handler.RemoveCart)
r.Get("/change-cart-name", handler.ChangeCartName)
r.Get("/retrieve-carts-info", handler.RetrieveCartsInfo)
r.Get("/retrieve-cart", handler.RetrieveCart)
r.Get("/add-product-to-cart", handler.AddProduct)
r.Delete("/remove-product-from-cart", handler.RemoveProduct)
return r
}
func (h *CartsHandler) AddNewCart(c fiber.Ctx) error {
userID, ok := c.Locals("userID").(uint)
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
new_cart, err := h.cartsService.CreateNewCart(userID)
name := c.Query("name")
new_cart, err := h.cartsService.CreateNewCart(userID, name)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
@@ -52,8 +56,31 @@ func (h *CartsHandler) AddNewCart(c fiber.Ctx) error {
return c.JSON(response.Make(&new_cart, 0, i18n.T_(c, response.Message_OK)))
}
func (h *CartsHandler) RemoveCart(c fiber.Ctx) error {
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
cart_id_attribute := c.Query("cart_id")
cart_id, err := strconv.Atoi(cart_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
err = h.cartsService.RemoveCart(userID, uint(cart_id))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}
func (h *CartsHandler) ChangeCartName(c fiber.Ctx) error {
userID, ok := c.Locals("userID").(uint)
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
@@ -78,7 +105,7 @@ func (h *CartsHandler) ChangeCartName(c fiber.Ctx) error {
}
func (h *CartsHandler) RetrieveCartsInfo(c fiber.Ctx) error {
userID, ok := c.Locals("userID").(uint)
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
@@ -94,7 +121,7 @@ func (h *CartsHandler) RetrieveCartsInfo(c fiber.Ctx) error {
}
func (h *CartsHandler) RetrieveCart(c fiber.Ctx) error {
userID, ok := c.Locals("userID").(uint)
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
@@ -116,8 +143,9 @@ func (h *CartsHandler) RetrieveCart(c fiber.Ctx) error {
return c.JSON(response.Make(cart, 0, i18n.T_(c, response.Message_OK)))
}
// adds or sets given amount of products to the cart
func (h *CartsHandler) AddProduct(c fiber.Ctx) error {
userID, ok := c.Locals("userID").(uint)
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
@@ -158,7 +186,59 @@ func (h *CartsHandler) AddProduct(c fiber.Ctx) error {
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
err = h.cartsService.AddProduct(userID, uint(cart_id), uint(product_id), product_attribute_id, uint(amount))
set_amount_attribute := c.Query("set_amount")
set_amount, err := strconv.ParseBool(set_amount_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
err = h.cartsService.AddProduct(userID, uint(cart_id), uint(product_id), product_attribute_id, amount, set_amount)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}
// removes product from the cart.
func (h *CartsHandler) RemoveProduct(c fiber.Ctx) error {
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
cart_id_attribute := c.Query("cart_id")
cart_id, err := strconv.Atoi(cart_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
product_id_attribute := c.Query("product_id")
product_id, err := strconv.Atoi(product_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
product_attribute_id_attribute := c.Query("product_attribute_id")
var product_attribute_id *uint
if product_attribute_id_attribute == "" {
product_attribute_id = nil
} else {
val, err := strconv.Atoi(product_attribute_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
uval := uint(val)
product_attribute_id = &uval
}
err = h.cartsService.RemoveProduct(userID, uint(cart_id), uint(product_id), product_attribute_id)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))

View File

@@ -0,0 +1,70 @@
package restricted
import (
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/config"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware/perms"
"git.ma-al.com/goc_daniel/b2b/app/model"
"git.ma-al.com/goc_daniel/b2b/app/service/currencyService"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
type CurrencyHandler struct {
CurrencyService *currencyService.CurrencyService
config *config.Config
}
func NewCurrencyHandler() *CurrencyHandler {
currencyService := currencyService.New()
return &CurrencyHandler{
CurrencyService: currencyService,
config: config.Get(),
}
}
func CurrencyHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewCurrencyHandler()
r.Post("/currency-rate", middleware.Require(perms.CurrencyWrite), handler.PostCurrencyRate)
r.Get("/currency-rate/:id", handler.GetCurrencyRate)
return r
}
func (h *CurrencyHandler) PostCurrencyRate(c fiber.Ctx) error {
var currencyRate model.CurrencyRate
if err := c.Bind().Body(&currencyRate); err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrJSONBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrJSONBody)))
}
err := h.CurrencyService.CreateCurrencyRate(&currencyRate)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 1, i18n.T_(c, response.Message_OK)))
}
func (h *CurrencyHandler) GetCurrencyRate(c fiber.Ctx) error {
idStr := c.Params("id")
id, err := strconv.Atoi(idStr)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
currency, err := h.CurrencyService.GetCurrency(uint(id))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(currency, 0, i18n.T_(c, response.Message_OK)))
}

View File

@@ -0,0 +1,128 @@
package restricted
import (
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware/perms"
"git.ma-al.com/goc_daniel/b2b/app/model"
"git.ma-al.com/goc_daniel/b2b/app/service/customerService"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/query/query_params"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
type customerHandler struct {
service *customerService.CustomerService
}
func NewCustomerHandler() *customerHandler {
customerService := customerService.New()
return &customerHandler{
service: customerService,
}
}
func CustomerHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewCustomerHandler()
r.Get("", handler.customerData)
r.Get("/list", middleware.Require(perms.UserReadAny), handler.listCustomers)
r.Patch("/no-vat", middleware.Require(perms.UserWriteAny), handler.setCustomerNoVatStatus)
return r
}
func (h *customerHandler) customerData(fc fiber.Ctx) error {
var customerId uint
user, ok := localeExtractor.GetCustomer(fc)
if !ok || user == nil {
return fc.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, responseErrors.ErrBadAttribute)))
}
customerIdStr := fc.Query("id")
if customerIdStr != "" {
id, err := strconv.ParseUint(customerIdStr, 10, 64)
if err != nil {
return fiber.ErrBadRequest
}
if user.ID != uint(id) && !user.HasPermission(perms.UserReadAny) {
return fc.Status(fiber.StatusForbidden).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, responseErrors.ErrForbidden)))
}
customerId = uint(id)
} else {
customerId = user.ID
}
customer, err := h.service.GetById(customerId)
if err != nil {
return fc.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, err)))
}
return fc.JSON(response.Make(&customer, 0, i18n.T_(fc, response.Message_OK)))
}
func (h *customerHandler) listCustomers(fc fiber.Ctx) error {
user, ok := localeExtractor.GetCustomer(fc)
if !ok || user == nil {
return fc.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, responseErrors.ErrBadAttribute)))
}
p, filt, err := query_params.ParseFilters[model.Customer](fc, columnMappingListUsers)
if err != nil {
return fc.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, err)))
}
search := fc.Query("search")
customer, err := h.service.Find(user.LangID, p, filt, search)
if err != nil {
return fc.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, err)))
}
return fc.JSON(response.Make(&customer, 0, i18n.T_(fc, response.Message_OK)))
}
var columnMappingListUsers map[string]string = map[string]string{
"user_id": "users.id",
"email": "users.email",
"first_name": "users.first_name",
"last_name": "users.last_name",
}
func (h *customerHandler) setCustomerNoVatStatus(fc fiber.Ctx) error {
user, ok := localeExtractor.GetCustomer(fc)
if !ok || user == nil {
return fc.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, responseErrors.ErrInvalidBody)))
}
var req struct {
CustomerID uint `json:"customer_id"`
IsNoVat bool `json:"is_no_vat"`
}
if err := fc.Bind().Body(&req); err != nil {
return fc.Status(responseErrors.GetErrorStatus(responseErrors.ErrJSONBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, responseErrors.ErrJSONBody)))
}
if err := h.service.SetCustomerNoVatStatus(req.CustomerID, req.IsNoVat); err != nil {
return fc.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, err)))
}
return fc.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(fc, response.Message_OK)))
}

View File

@@ -1,67 +0,0 @@
package restricted
import (
"git.ma-al.com/goc_daniel/b2b/app/config"
"git.ma-al.com/goc_daniel/b2b/app/model"
"git.ma-al.com/goc_daniel/b2b/app/service/listProductsService"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/query/query_params"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
// ListProductsHandler handles endpoints that receive, save and translate product descriptions.
type ListProductsHandler struct {
listProductsService *listProductsService.ListProductsService
config *config.Config
}
// NewListProductsHandler creates a new ListProductsHandler instance
func NewListProductsHandler() *ListProductsHandler {
listProductsService := listProductsService.New()
return &ListProductsHandler{
listProductsService: listProductsService,
config: config.Get(),
}
}
func ListProductsHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewListProductsHandler()
r.Get("/get-listing", handler.GetListing)
return r
}
func (h *ListProductsHandler) GetListing(c fiber.Ctx) error {
paging, filters, err := query_params.ParseFilters[model.Product](c, columnMappingGetListing)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
id_lang, ok := c.Locals("langID").(uint)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
listing, err := h.listProductsService.GetListing(id_lang, paging, filters)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&listing.Items, int(listing.Count), i18n.T_(c, response.Message_OK)))
}
var columnMappingGetListing map[string]string = map[string]string{
"product_id": "ps.id_product",
"name": "pl.name",
"reference": "ps.reference",
"category_name": "cl.name",
"id_category": "cp.id_category",
"quantity": "sa.quantity",
}

View File

@@ -1,115 +0,0 @@
package restricted
import (
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/service/meiliService"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
type MeiliSearchHandler struct {
meiliService *meiliService.MeiliService
}
func NewMeiliSearchHandler() *MeiliSearchHandler {
meiliService := meiliService.New()
return &MeiliSearchHandler{
meiliService: meiliService,
}
}
func MeiliSearchHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewMeiliSearchHandler()
// for testing purposes only. Must be removed before proper release.
r.Get("/create-index", handler.CreateIndex)
r.Get("/test", handler.Test)
// for all users
r.Get("/search", handler.Search)
return r
}
func (h *MeiliSearchHandler) CreateIndex(c fiber.Ctx) error {
id_lang, ok := c.Locals("langID").(uint)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
err := h.meiliService.CreateIndex(id_lang)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
nothing := ""
return c.JSON(response.Make(&nothing, 0, i18n.T_(c, response.Message_OK)))
}
func (h *MeiliSearchHandler) Test(c fiber.Ctx) error {
id_lang, ok := c.Locals("langID").(uint)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
test, err := h.meiliService.Test(id_lang)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&test, 0, i18n.T_(c, response.Message_OK)))
}
func (h *MeiliSearchHandler) Search(c fiber.Ctx) error {
id_lang, ok := c.Locals("langID").(uint)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
query := c.Query("query")
limit_attribute := c.Query("limit")
limit, err := strconv.Atoi(limit_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
id_category_attribute := c.Query("id_category", "0")
id_category, err := strconv.Atoi(id_category_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
price_lower_bound_attribute := c.Query("price_lower_bound", "-1.0")
price_lower_bound, err := strconv.ParseFloat(price_lower_bound_attribute, 64)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
price_upper_bound_attribute := c.Query("price_upper_bound", "-1.0")
price_upper_bound, err := strconv.ParseFloat(price_upper_bound_attribute, 64)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
meili_response, err := h.meiliService.Search(id_lang, query, uint(limit), uint(id_category), price_lower_bound, price_upper_bound)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&meili_response, 0, i18n.T_(c, response.Message_OK)))
}

View File

@@ -1,8 +1,11 @@
package restricted
import (
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/service/menuService"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
@@ -23,38 +26,77 @@ func NewMenuHandler() *MenuHandler {
func MenuHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewMenuHandler()
r.Get("/get-menu", handler.GetMenu)
r.Get("/get-routes", handler.GetRouting)
r.Get("/get-category-tree", handler.GetCategoryTree)
r.Get("/get-breadcrumb", handler.GetBreadcrumb)
r.Get("/get-top-menu", handler.GetTopMenu)
return r
}
func (h *MenuHandler) GetMenu(c fiber.Ctx) error {
lang_id, ok := c.Locals("langID").(uint)
func (h *MenuHandler) GetCategoryTree(c fiber.Ctx) error {
lang_id, ok := localeExtractor.GetLangID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
menu, err := h.menuService.GetMenu(lang_id)
root_category_id_attribute := c.Query("root_category_id")
root_category_id, err := strconv.Atoi(root_category_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
category_tree, err := h.menuService.GetCategoryTree(uint(root_category_id), lang_id)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&menu, 0, i18n.T_(c, response.Message_OK)))
return c.JSON(response.Make(&category_tree, 0, i18n.T_(c, response.Message_OK)))
}
func (h *MenuHandler) GetRouting(c fiber.Ctx) error {
lang_id, ok := c.Locals("langID").(uint)
func (h *MenuHandler) GetBreadcrumb(c fiber.Ctx) error {
lang_id, ok := localeExtractor.GetLangID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
menu, err := h.menuService.GetRoutes(lang_id)
root_category_id_attribute := c.Query("root_category_id")
root_category_id, err := strconv.Atoi(root_category_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
category_id_attribute := c.Query("category_id")
category_id, err := strconv.Atoi(category_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
breadcrumb, err := h.menuService.GetBreadcrumb(uint(root_category_id), uint(category_id), lang_id)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&menu, 0, i18n.T_(c, response.Message_OK)))
return c.JSON(response.Make(&breadcrumb, 0, i18n.T_(c, response.Message_OK)))
}
func (h *MenuHandler) GetTopMenu(c fiber.Ctx) error {
customer, ok := localeExtractor.GetCustomer(c)
if !ok || customer == nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
menu, err := h.menuService.GetTopMenu(customer.LangID, customer.RoleID)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&menu, len(menu), i18n.T_(c, response.Message_OK)))
}

View File

@@ -0,0 +1,171 @@
package restricted
import (
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/model"
"git.ma-al.com/goc_daniel/b2b/app/service/orderService"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/query/query_params"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
type OrdersHandler struct {
ordersService *orderService.OrderService
}
func NewOrdersHandler() *OrdersHandler {
ordersService := orderService.New()
return &OrdersHandler{
ordersService: ordersService,
}
}
func OrdersHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewOrdersHandler()
r.Get("/list", handler.ListOrders)
r.Post("/place-new-order", handler.PlaceNewOrder)
r.Post("/change-order-address", handler.ChangeOrderAddress)
r.Get("/change-order-status", handler.ChangeOrderStatus)
return r
}
// when a user (not admin) wants to list orders, we automatically append filter to only view his orders.
// we base permissions and user based on target user only.
func (h *OrdersHandler) ListOrders(c fiber.Ctx) error {
user, ok := localeExtractor.GetCustomer(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
paging, filters, err := query_params.ParseFilters[model.CustomerOrder](c, columnMappingListOrders)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
list, err := h.ordersService.Find(user, paging, filters)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&list.Items, int(list.Count), i18n.T_(c, response.Message_OK)))
}
var columnMappingListOrders map[string]string = map[string]string{
"order_id": "b2b_customer_orders.order_id",
"user_id": "b2b_customer_orders.user_id",
"name": "b2b_customer_orders.name",
"country_id": "b2b_customer_orders.country_id",
"status": "b2b_customer_orders.status",
}
func (h *OrdersHandler) PlaceNewOrder(c fiber.Ctx) error {
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
cart_id_attribute := c.Query("cart_id")
cart_id, err := strconv.Atoi(cart_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
country_id_attribute := c.Query("country_id")
country_id, err := strconv.Atoi(country_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
address_info := string(c.Body())
if address_info == "" {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
name := c.Query("name")
err = h.ordersService.PlaceNewOrder(userID, uint(cart_id), name, uint(country_id), address_info)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}
// we base permissions and user based on target user only.
func (h *OrdersHandler) ChangeOrderAddress(c fiber.Ctx) error {
user, ok := localeExtractor.GetCustomer(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
order_id_attribute := c.Query("order_id")
order_id, err := strconv.Atoi(order_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
country_id_attribute := c.Query("country_id")
country_id, err := strconv.Atoi(country_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
address_info := string(c.Body())
if address_info == "" {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
err = h.ordersService.ChangeOrderAddress(user, uint(order_id), uint(country_id), address_info)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}
// we base permissions and user based on target user only.
// TODO: well, permissions and all that.
func (h *OrdersHandler) ChangeOrderStatus(c fiber.Ctx) error {
user, ok := localeExtractor.GetCustomer(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
order_id_attribute := c.Query("order_id")
order_id, err := strconv.Atoi(order_id_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
status := c.Query("status")
err = h.ordersService.ChangeOrderStatus(user, uint(order_id), status)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}

View File

@@ -0,0 +1,188 @@
package restricted
import (
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/config"
"git.ma-al.com/goc_daniel/b2b/app/model/dbmodel"
"git.ma-al.com/goc_daniel/b2b/app/service/productService"
constdata "git.ma-al.com/goc_daniel/b2b/app/utils/const_data"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/query/query_params"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
type ProductsHandler struct {
productService *productService.ProductService
config *config.Config
}
// NewListProductsHandler creates a new ListProductsHandler instance
func NewProductsHandler() *ProductsHandler {
productService := productService.New()
return &ProductsHandler{
productService: productService,
config: config.Get(),
}
}
func ProductsHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewProductsHandler()
r.Get("/:id/:country_id/:quantity", handler.GetProductJson)
r.Get("/list", handler.ListProducts)
r.Get("/list-variants/:product_id", handler.ListProductVariants)
r.Post("/favorite/:product_id", handler.AddToFavorites)
r.Delete("/favorite/:product_id", handler.RemoveFromFavorites)
return r
}
func (h *ProductsHandler) GetProductJson(c fiber.Ctx) error {
idStr := c.Params("id")
p_id_product, err := strconv.Atoi(idStr)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
country_idStr := c.Params("country_id")
b2b_id_country, err := strconv.Atoi(country_idStr)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
quantityStr := c.Params("quantity")
p_quantity, err := strconv.Atoi(quantityStr)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
customer, ok := localeExtractor.GetCustomer(c)
if !ok || customer == nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
productJson, err := h.productService.Get(uint(p_id_product), customer.LangID, customer.ID, uint(b2b_id_country), uint(p_quantity))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&productJson, 1, i18n.T_(c, response.Message_OK)))
}
func (h *ProductsHandler) ListProducts(c fiber.Ctx) error {
paging, filters, err := query_params.ParseFilters[dbmodel.PsProduct](c, columnMappingListProducts)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
customer, ok := localeExtractor.GetCustomer(c)
if !ok || customer == nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
list, err := h.productService.Find(customer.LangID, customer.ID, paging, filters, customer, constdata.DEFAULT_PRODUCT_QUANTITY, constdata.SHOP_ID)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&list.Items, int(list.Count), i18n.T_(c, response.Message_OK)))
}
// These are all the filterable fields
var columnMappingListProducts map[string]string = map[string]string{
"product_id": "bp.product_id",
"name": "bp.name",
"reference": "bp.reference",
"category_id": "bp.category_id",
"quantity": "bp.quantity",
"is_favorite": "bp.is_favorite",
"is_new": "bp.is_new",
"is_oem": "bp.is_oem",
}
func (h *ProductsHandler) AddToFavorites(c fiber.Ctx) error {
productIDStr := c.Params("product_id")
productID, err := strconv.Atoi(productIDStr)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
err = h.productService.AddToFavorites(userID, uint(productID))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}
func (h *ProductsHandler) RemoveFromFavorites(c fiber.Ctx) error {
productIDStr := c.Params("product_id")
productID, err := strconv.Atoi(productIDStr)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
err = h.productService.RemoveFromFavorites(userID, uint(productID))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}
func (h *ProductsHandler) ListProductVariants(c fiber.Ctx) error {
productIDStr := c.Params("product_id")
productID, err := strconv.Atoi(productIDStr)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
customer, ok := localeExtractor.GetCustomer(c)
if !ok || customer == nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
list, err := h.productService.GetProductAttributes(customer.LangID, uint(productID), constdata.SHOP_ID, customer.ID, customer.CountryID, constdata.DEFAULT_PRODUCT_QUANTITY)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&list, len(list), i18n.T_(c, response.Message_OK)))
}

View File

@@ -4,8 +4,11 @@ import (
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/config"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware/perms"
"git.ma-al.com/goc_daniel/b2b/app/service/productTranslationService"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
@@ -33,15 +36,15 @@ func ProductTranslationHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewProductTranslationHandler()
r.Get("/get-product-description", handler.GetProductDescription)
r.Post("/save-product-description", handler.SaveProductDescription)
r.Get("/translate-product-description", handler.TranslateProductDescription)
r.Post("/save-product-description", middleware.Require(perms.ProductTranslationSave), handler.SaveProductDescription)
r.Get("/translate-product-description", middleware.Require(perms.ProductTranslationTranslate), handler.TranslateProductDescription)
return r
}
// GetProductDescription returns the product description for a given product ID
func (h *ProductTranslationHandler) GetProductDescription(c fiber.Ctx) error {
userID, ok := c.Locals("userID").(uint)
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
@@ -72,7 +75,7 @@ func (h *ProductTranslationHandler) GetProductDescription(c fiber.Ctx) error {
// SaveProductDescription saves the description for a given product ID, in given language
func (h *ProductTranslationHandler) SaveProductDescription(c fiber.Ctx) error {
userID, ok := c.Locals("userID").(uint)
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
@@ -109,7 +112,7 @@ func (h *ProductTranslationHandler) SaveProductDescription(c fiber.Ctx) error {
// TranslateProductDescription returns translated product description
func (h *ProductTranslationHandler) TranslateProductDescription(c fiber.Ctx) error {
userID, ok := c.Locals("userID").(uint)
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))

View File

@@ -0,0 +1,108 @@
package restricted
import (
"encoding/json"
"fmt"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware/perms"
"git.ma-al.com/goc_daniel/b2b/app/service/meiliService"
searchservice "git.ma-al.com/goc_daniel/b2b/app/service/searchService"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
type MeiliSearchHandler struct {
meiliService *meiliService.MeiliService
searchService *searchservice.SearchService
}
func NewMeiliSearchHandler() *MeiliSearchHandler {
return &MeiliSearchHandler{
meiliService: meiliService.New(),
searchService: searchservice.New(),
}
}
func MeiliSearchHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewMeiliSearchHandler()
r.Get("/create-index", middleware.Require(perms.SearchCreateIndex), handler.CreateIndex)
r.Post("/search", handler.Search)
r.Post("/settings", handler.GetSettings)
return r
}
func (h *MeiliSearchHandler) CreateIndex(c fiber.Ctx) error {
id_lang, ok := localeExtractor.GetLangID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
err := h.meiliService.CreateIndex(id_lang)
if err != nil {
fmt.Printf("CreateIndex error: %v\n", err)
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}
func (h *MeiliSearchHandler) Search(c fiber.Ctx) error {
id_lang, ok := localeExtractor.GetLangID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
index := meiliService.GetIndexName(id_lang)
var body map[string]interface{}
if err := json.Unmarshal(c.Body(), &body); err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
result, err := h.searchService.Search(index, c.Body(), id_lang)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
if h.searchService.IsIndexNotFound(result.Body) {
if createErr := h.meiliService.CreateIndex(id_lang); createErr == nil {
result, err = h.searchService.Search(index, c.Body(), id_lang)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
}
}
return c.Status(result.StatusCode).Send(result.Body)
}
func (h *MeiliSearchHandler) GetSettings(c fiber.Ctx) error {
id_lang, ok := localeExtractor.GetLangID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
index := meiliService.GetIndexName(id_lang)
result, err := h.searchService.GetIndexSettings(index)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.Status(result.StatusCode).Send(result.Body)
}

View File

@@ -0,0 +1,160 @@
package restricted
import (
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/config"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware/perms"
"git.ma-al.com/goc_daniel/b2b/app/model"
"git.ma-al.com/goc_daniel/b2b/app/service/specificPriceService"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
type SpecificPriceHandler struct {
SpecificPriceService *specificPriceService.SpecificPriceService
config *config.Config
}
func NewSpecificPriceHandler() *SpecificPriceHandler {
SpecificPriceService := specificPriceService.New()
return &SpecificPriceHandler{
SpecificPriceService: SpecificPriceService,
config: config.Get(),
}
}
func SpecificPriceHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewSpecificPriceHandler()
r.Post("/", middleware.Require(perms.SpecificPriceManage), handler.Create)
r.Put("/:id", middleware.Require(perms.SpecificPriceManage), handler.Update)
r.Delete("/:id", middleware.Require(perms.SpecificPriceManage), handler.Delete)
r.Get("/", middleware.Require(perms.SpecificPriceManage), handler.List)
r.Get("/:id", middleware.Require(perms.SpecificPriceManage), handler.GetByID)
r.Patch("/:id/activate", middleware.Require(perms.SpecificPriceManage), handler.Activate)
r.Patch("/:id/deactivate", middleware.Require(perms.SpecificPriceManage), handler.Deactivate)
return r
}
func (h *SpecificPriceHandler) Create(c fiber.Ctx) error {
var pr model.SpecificPrice
if err := c.Bind().Body(&pr); err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
result, err := h.SpecificPriceService.Create(c.Context(), &pr)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&result, 1, i18n.T_(c, response.Message_OK)))
}
func (h *SpecificPriceHandler) Update(c fiber.Ctx) error {
idStr := c.Params("id")
id, err := strconv.ParseUint(idStr, 10, 64)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
var pr model.SpecificPrice
if err := c.Bind().Body(&pr); err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
result, err := h.SpecificPriceService.Update(c.Context(), id, &pr)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&result, 1, i18n.T_(c, response.Message_OK)))
}
func (h *SpecificPriceHandler) List(c fiber.Ctx) error {
result, err := h.SpecificPriceService.List(c.Context())
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&result, 1, i18n.T_(c, response.Message_OK)))
}
func (h *SpecificPriceHandler) GetByID(c fiber.Ctx) error {
idStr := c.Params("id")
id, err := strconv.ParseUint(idStr, 10, 64)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
result, err := h.SpecificPriceService.GetByID(c.Context(), id)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&result, 1, i18n.T_(c, response.Message_OK)))
}
func (h *SpecificPriceHandler) Activate(c fiber.Ctx) error {
idStr := c.Params("id")
id, err := strconv.ParseUint(idStr, 10, 64)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
err = h.SpecificPriceService.SetActive(c.Context(), id, true)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}
func (h *SpecificPriceHandler) Deactivate(c fiber.Ctx) error {
idStr := c.Params("id")
id, err := strconv.ParseUint(idStr, 10, 64)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
err = h.SpecificPriceService.SetActive(c.Context(), id, false)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}
func (h *SpecificPriceHandler) Delete(c fiber.Ctx) error {
idStr := c.Params("id")
id, err := strconv.ParseUint(idStr, 10, 64)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
}
err = h.SpecificPriceService.Delete(c.Context(), id)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK)))
}

View File

@@ -0,0 +1,95 @@
package restricted
import (
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/config"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware/perms"
"git.ma-al.com/goc_daniel/b2b/app/service/storageService"
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
type StorageHandler struct {
storageService *storageService.StorageService
config *config.Config
}
func NewStorageHandler() *StorageHandler {
return &StorageHandler{
storageService: storageService.New(),
config: config.Get(),
}
}
func StorageHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewStorageHandler()
// for all users
r.Get("/list-content/*", handler.ListContent)
r.Get("/download-file/*", handler.DownloadFile)
// for admins only
r.Get("/create-new-webdav-token", middleware.Require(perms.WebdavCreateToken), handler.CreateNewWebdavToken)
return r
}
// accepted path looks like e.g. "/folder1/" or "folder1"
func (h *StorageHandler) ListContent(c fiber.Ctx) error {
// relative path defaults to root directory
abs_path, err := h.storageService.AbsPath(h.config.Storage.RootFolder, c.Params("*"))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
entries_in_list, err := h.storageService.ListContent(abs_path)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(entries_in_list, 0, i18n.T_(c, response.Message_OK)))
}
func (h *StorageHandler) DownloadFile(c fiber.Ctx) error {
abs_path, err := h.storageService.AbsPath(h.config.Storage.RootFolder, c.Params("*"))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
f, filename, filesize, err := h.storageService.DownloadFilePrep(abs_path)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
c.Attachment(filename)
c.Set("Content-Length", strconv.FormatInt(filesize, 10))
c.Set("Content-Type", "application/octet-stream")
return c.SendStream(f, int(filesize))
}
func (h *StorageHandler) CreateNewWebdavToken(c fiber.Ctx) error {
userID, ok := localeExtractor.GetUserID(c)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody)))
}
new_token, err := h.storageService.NewWebdavToken(userID)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
}
return c.JSON(response.Make(&new_token, 0, i18n.T_(c, response.Message_OK)))
}

View File

@@ -21,10 +21,12 @@ type SettingsResponse struct {
// AppSettings represents app configuration
type AppSettings struct {
Name string `json:"name"`
Environment string `json:"environment"`
BaseURL string `json:"base_url"`
PasswordRegex string `json:"password_regex"`
Name string `json:"name"`
Environment string `json:"environment"`
BaseURL string `json:"base_url"`
PasswordRegex string `json:"password_regex"`
CategoryTreeRootID uint `json:"category_tree_root_id"`
ShopDefaultLanguage uint `json:"shop_default_language"`
// Config config.Config `json:"config"`
}
@@ -65,10 +67,12 @@ func (h *SettingsHandler) GetSettings(cfg *config.Config) fiber.Handler {
return func(c fiber.Ctx) error {
settings := SettingsResponse{
App: AppSettings{
Name: cfg.App.Name,
Environment: cfg.App.Environment,
BaseURL: cfg.App.BaseURL,
PasswordRegex: constdata.PASSWORD_VALIDATION_REGEX,
Name: cfg.App.Name,
Environment: cfg.App.Environment,
BaseURL: cfg.App.BaseURL,
PasswordRegex: constdata.PASSWORD_VALIDATION_REGEX,
CategoryTreeRootID: constdata.CATEGORY_TREE_ROOT_ID,
ShopDefaultLanguage: constdata.SHOP_DEFAULT_LANGUAGE,
// Config: *config.Get(),
},
Server: ServerSettings{

View File

@@ -0,0 +1,198 @@
package webdav
import (
"bytes"
"io"
"net/http"
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/config"
"git.ma-al.com/goc_daniel/b2b/app/service/storageService"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
type StorageHandler struct {
storageService *storageService.StorageService
config *config.Config
}
func NewStorageHandler() *StorageHandler {
return &StorageHandler{
storageService: storageService.New(),
config: config.Get(),
}
}
func StorageHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewStorageHandler()
// for webdav use only
r.Get("/*", handler.Get)
r.Head("/*", handler.Get)
r.Put("/*", handler.Put)
r.Delete("/*", handler.Delete)
r.Add([]string{"MKCOL"}, "/*", handler.Mkcol)
r.Add([]string{"PROPFIND"}, "/*", handler.Propfind)
r.Add([]string{"PROPPATCH"}, "/*", handler.Proppatch)
r.Add([]string{"MOVE"}, "/*", handler.Move)
r.Add([]string{"COPY"}, "/*", handler.Copy)
return r
}
func (h *StorageHandler) Get(c fiber.Ctx) error {
// fmt.Println("GET")
absPath, err := h.storageService.AbsPath(h.config.Storage.RootFolder, c.Params("*"))
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
info, err := h.storageService.EntryInfo(absPath)
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
if info.IsDir() {
xml, err := h.storageService.Propfind(h.config.Storage.RootFolder, absPath, "1")
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
c.Set("Content-Type", `application/xml; charset="utf-8"`)
return c.Status(http.StatusMultiStatus).SendString(xml)
} else {
f, filename, filesize, err := h.storageService.DownloadFilePrep(absPath)
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
c.Attachment(filename)
c.Set("Content-Length", strconv.FormatInt(filesize, 10))
c.Set("Content-Type", "application/octet-stream")
return c.SendStream(f, int(filesize))
}
}
func (h *StorageHandler) Put(c fiber.Ctx) error {
// fmt.Println("PUT")
absPath, err := h.storageService.AbsPath(h.config.Storage.RootFolder, c.Params("*"))
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
var src io.Reader
if bodyStream := c.Request().BodyStream(); bodyStream != nil {
defer c.Request().CloseBodyStream()
src = bodyStream
} else {
src = bytes.NewReader(c.Body())
}
err = h.storageService.Put(absPath, src)
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
return c.SendStatus(http.StatusCreated)
}
func (h *StorageHandler) Delete(c fiber.Ctx) error {
// fmt.Println("DELETE")
absPath, err := h.storageService.AbsPath(h.config.Storage.RootFolder, c.Params("*"))
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
if absPath == h.config.Storage.RootFolder {
return c.SendStatus(responseErrors.GetErrorStatus(responseErrors.ErrAccessDenied))
}
err = h.storageService.Delete(absPath)
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
return c.SendStatus(http.StatusNoContent)
}
func (h *StorageHandler) Mkcol(c fiber.Ctx) error {
// fmt.Println("Mkcol")
absPath, err := h.storageService.AbsPath(h.config.Storage.RootFolder, c.Params("*"))
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
err = h.storageService.Mkcol(absPath)
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
return c.SendStatus(http.StatusCreated)
}
func (h *StorageHandler) Propfind(c fiber.Ctx) error {
// fmt.Println("PROPFIND")
absPath, err := h.storageService.AbsPath(h.config.Storage.RootFolder, c.Params("*"))
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
xml, err := h.storageService.Propfind(h.config.Storage.RootFolder, absPath, "1")
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
c.Set("Content-Type", `application/xml; charset="utf-8"`)
return c.Status(http.StatusMultiStatus).SendString(xml)
}
func (h *StorageHandler) Proppatch(c fiber.Ctx) error {
return c.SendStatus(http.StatusNotImplemented) // 501
}
func (h *StorageHandler) Move(c fiber.Ctx) error {
// fmt.Println("MOVE")
srcAbsPath, err := h.storageService.AbsPath(h.config.Storage.RootFolder, c.Params("*"))
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
dest := c.Get("Destination")
if dest == "" {
return c.SendStatus(http.StatusBadRequest)
}
destAbsPath, err := h.storageService.ObtainDestPath(h.config.Storage.RootFolder, dest)
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
err = h.storageService.Move(srcAbsPath, destAbsPath)
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
return c.SendStatus(http.StatusCreated)
}
func (h *StorageHandler) Copy(c fiber.Ctx) error {
// fmt.Println("COPY")
srcAbsPath, err := h.storageService.AbsPath(h.config.Storage.RootFolder, c.Params("*"))
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
dest := c.Get("Destination")
if dest == "" {
return c.SendStatus(http.StatusBadRequest)
}
destAbsPath, err := h.storageService.ObtainDestPath(h.config.Storage.RootFolder, dest)
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
err = h.storageService.Copy(srcAbsPath, destAbsPath)
if err != nil {
return c.SendStatus(responseErrors.GetErrorStatus(err))
}
return c.SendStatus(http.StatusCreated)
}

View File

@@ -14,11 +14,10 @@ import (
"git.ma-al.com/goc_daniel/b2b/app/delivery/web/api"
"git.ma-al.com/goc_daniel/b2b/app/delivery/web/api/public"
"git.ma-al.com/goc_daniel/b2b/app/delivery/web/api/restricted"
"git.ma-al.com/goc_daniel/b2b/app/delivery/web/api/webdav"
"git.ma-al.com/goc_daniel/b2b/app/delivery/web/general"
// "github.com/gofiber/fiber/v2/middleware/filesystem"
"github.com/gofiber/fiber/v3"
// "github.com/gofiber/fiber/v3/middleware/filesystem"
"github.com/gofiber/fiber/v3/middleware/logger"
"github.com/gofiber/fiber/v3/middleware/recover"
)
@@ -27,6 +26,7 @@ import (
type Server struct {
app *fiber.App
cfg *config.Config
webdav fiber.Router
api fiber.Router
public fiber.Router
restricted fiber.Router
@@ -44,12 +44,23 @@ func (s *Server) Cfg() *config.Config {
// New creates a new server instance
func New() *Server {
return &Server{
app: fiber.New(fiber.Config{
ErrorHandler: customErrorHandler,
}),
cfg: config.Get(),
}
var s Server
app :=
fiber.New(fiber.Config{
ErrorHandler: customErrorHandler,
BodyLimit: 50 * 1024 * 1024, // 50 MB
StreamRequestBody: true,
RequestMethods: []string{
fiber.MethodGet, fiber.MethodHead, fiber.MethodPost, fiber.MethodPut,
fiber.MethodDelete, fiber.MethodConnect, fiber.MethodOptions,
fiber.MethodTrace, fiber.MethodPatch, "MKCOL", "PROPFIND", "PROPPATCH", "MOVE", "COPY",
},
})
s.app = app
s.cfg = config.Get()
return &s
}
// Setup configures the server with routes and middleware
@@ -75,9 +86,12 @@ func (s *Server) Setup() error {
// API routes
s.api = s.app.Group("/api/v1")
s.api.Use(middleware.Authenticate())
s.public = s.api.Group("/public")
s.restricted = s.api.Group("/restricted")
s.restricted.Use(middleware.AuthMiddleware())
s.restricted.Use(middleware.Authorize())
s.webdav = s.api.Group("/webdav")
s.webdav.Use(middleware.Webdav())
// initialize language endpoints (general)
api.NewLangHandler().InitLanguage(s.api, s.cfg)
@@ -89,13 +103,18 @@ func (s *Server) Setup() error {
auth := s.public.Group("/auth")
public.AuthHandlerRoutes(auth)
menuRouting := s.public.Group("/menu")
public.RoutingHandlerRoutes(menuRouting)
pCustomer := s.restricted.Group("/customer")
restricted.CustomerHandlerRoutes(pCustomer)
// product translation routes (restricted)
productTranslation := s.restricted.Group("/product-translation")
restricted.ProductTranslationHandlerRoutes(productTranslation)
// listing products routes (restricted)
listProducts := s.restricted.Group("/list-products")
restricted.ListProductsHandlerRoutes(listProducts)
product := s.restricted.Group("/product")
restricted.ProductsHandlerRoutes(product)
// locale selector (restricted)
// this is basically for changing user's selected language and country
@@ -107,13 +126,32 @@ func (s *Server) Setup() error {
restricted.MenuHandlerRoutes(menu)
// meili search (restricted)
meiliSearch := s.restricted.Group("/meili-search")
meiliSearch := s.restricted.Group("/search")
restricted.MeiliSearchHandlerRoutes(meiliSearch)
// carts (restricted)
carts := s.restricted.Group("/carts")
restricted.CartsHandlerRoutes(carts)
// orders (restricted)
orders := s.restricted.Group("/orders")
restricted.OrdersHandlerRoutes(orders)
specificPrice := s.restricted.Group("/specific-price")
restricted.SpecificPriceHandlerRoutes(specificPrice)
// addresses (restricted)
addresses := s.restricted.Group("/addresses")
restricted.AddressesHandlerRoutes(addresses)
// storage (uses various authorization means)
restrictedStorage := s.restricted.Group("/storage")
webdavStorage := s.webdav.Group("/storage")
restricted.StorageHandlerRoutes(restrictedStorage)
webdav.StorageHandlerRoutes(webdavStorage)
restricted.CurrencyHandlerRoutes(s.restricted)
s.api.All("*", func(c fiber.Ctx) error {
return c.SendStatus(fiber.StatusNotFound)
})
@@ -129,16 +167,6 @@ func (s *Server) Setup() error {
// })
// })
// // Admin routes example
// admin := s.api.Group("/admin")
// admin.Use(middleware.AuthMiddleware())
// admin.Use(middleware.RequireAdmin())
// admin.Get("/users", func(c fiber.Ctx) error {
// return c.JSON(fiber.Map{
// "message": "Admin area - user management",
// })
// })
// keep this at the end because its wilderange
general.InitBo(s.App())

72
app/model/address.go Normal file
View File

@@ -0,0 +1,72 @@
package model
type Address struct {
ID uint `gorm:"column:id;primaryKey;autoIncrement" json:"id"`
CustomerID uint `gorm:"column:b2b_customer_id;not null;index" json:"customer_id"`
AddressString string `gorm:"column:address_string;not null" json:"address_string"`
AddressUnparsed *AddressUnparsed `gorm:"-" json:"address_unparsed"`
CountryID uint `gorm:"column:b2b_country_id;not null" json:"country_id"`
}
func (Address) TableName() string {
return "b2b_addresses"
}
type AddressUnparsed interface{}
// Address template in Poland
type AddressPL struct {
PostalCode string `json:"postal_code"` // format: 00-000
City string `json:"city"` // e.g. Kraków
Voivodeship string `json:"voivodeship"` // e.g. małopolskie (optional but useful)
Street string `json:"street"` // e.g. Marszałkowska
BuildingNo string `json:"building_no"` // e.g. 10, 221B, 12A
ApartmentNo string `json:"apartment_no"` // e.g. 5, 12B
AddressLine2 string `json:"address_line2"` // optional extra info
Recipient string `json:"recipient"` // name/company
}
// Address template in Great Britain
type AddressGB struct {
PostalCode string `json:"postal_code"` // e.g. SW1A 1AA
PostTown string `json:"post_town"` // e.g. London
County string `json:"county"` // optional
Thoroughfare string `json:"thoroughfare"` // street name, e.g. Baker Street
BuildingNo string `json:"building_no"` // e.g. 221B
BuildingName string `json:"building_name"` // e.g. Flatiron House
SubBuilding string `json:"sub_building"` // e.g. Flat 5, Apt 2
AddressLine2 string `json:"address_line2"`
Recipient string `json:"recipient"`
}
// Address template in Czech Republic
type AddressCZ struct {
PostalCode string `json:"postal_code"` // usually 110 00 or 11000
City string `json:"city"` // e.g. Praha
Region string `json:"region"`
Street string `json:"street"` // may be omitted in some village-style addresses
HouseNumber string `json:"house_number"` // descriptive / conscription no.
OrientationNumber string `json:"orientation_number"` // optional, often after slash
AddressLine2 string `json:"address_line2"`
Recipient string `json:"recipient"`
}
// Address template in Germany
type AddressDE struct {
PostalCode string `json:"postal_code"` // e.g. 10115
City string `json:"city"` // e.g. Berlin
State string `json:"state"` // Bundesland, optional
Street string `json:"street"` // e.g. Unter den Linden
HouseNumber string `json:"house_number"` // e.g. 77, 12a
AddressLine2 string `json:"address_line2"` // extra details
Recipient string `json:"recipient"`
}

35
app/model/category.go Normal file
View File

@@ -0,0 +1,35 @@
package model
type ScannedCategory struct {
CategoryID uint `gorm:"column:category_id;primaryKey"`
Name string `gorm:"column:name"`
Active uint `gorm:"column:active"`
Position uint `gorm:"column:position"`
ParentID uint `gorm:"column:id_parent"`
IsRoot uint `gorm:"column:is_root_category"`
LinkRewrite string `gorm:"column:link_rewrite"`
IsoCode string `gorm:"column:iso_code"`
Visited bool // this is for internal backend use only
Filter string // filter applicable to this category
}
type Category struct {
CategoryID uint `json:"category_id" form:"category_id"`
Label string `json:"label" form:"label"`
// Active bool `json:"active" form:"active"`
Params CategoryParams `json:"params" form:"params"`
Children []Category `json:"children" form:"children"`
}
type CategoryParams struct {
CategoryID uint `json:"category_id" form:"category_id"`
LinkRewrite string `json:"link_rewrite" form:"link_rewrite"`
Locale string `json:"locale" form:"locale"`
Filter string `json:"filter" form:"filter"`
}
type CategoryInBreadcrumb struct {
CategoryID uint `json:"category_id" form:"category_id"`
Name string `json:"name" form:"name"`
}

View File

@@ -2,23 +2,14 @@ package model
// Represents a country together with its associated currency
type Country struct {
ID uint `gorm:"primaryKey;column:id" json:"id"`
Name string `gorm:"column:name" json:"name"`
Flag string `gorm:"size:16;not null;column:flag" json:"flag"`
CurrencyID uint `gorm:"column:id_currency" json:"currency_id"`
CurrencyISOCode string `gorm:"column:currency_iso_code" json:"currency_iso_code"`
CurrencyName string `gorm:"column:currency_name" json:"currency_name"`
ID uint `gorm:"primaryKey;column:id" json:"id"`
Name string `gorm:"column:name" json:"name"`
Flag string `gorm:"size:16;not null;column:flag" json:"flag"`
CurrencyID uint `gorm:"column:b2b_id_currency" json:"currency_id"`
Currency *Currency `gorm:"foreignKey:CurrencyID" json:"currency,omitempty"`
}
func (Country) TableName() string {
return "b2b_countries"
}
type PSCountry struct {
ID uint `gorm:"primaryKey;column:id_country" json:"id"`
CurrencyID uint `gorm:"column:id_currency" json:"currency_id"`
}
func (PSCountry) TableName() string {
return "ps_country"
}

25
app/model/currency.go Normal file
View File

@@ -0,0 +1,25 @@
package model
import "time"
type Currency struct {
ID int `json:"id"`
PsIDCurrency uint `json:"ps_id_currency"`
IsDefault bool `json:"is_default"`
IsActive bool `json:"is_active"`
ConversionRate *float64 `json:"conversion_rate,omitempty"`
}
func (Currency) TableName() string {
return "b2b_currencies"
}
type CurrencyRate struct {
B2bIdCurrency uint `json:"b2b_id_currency"`
CreatedAt time.Time `json:"created_at"`
ConversionRate *float64 `json:"conversion_rate,omitempty"`
}
func (CurrencyRate) TableName() string {
return "b2b_currency_rates"
}

View File

@@ -3,6 +3,7 @@ package model
import (
"time"
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware/perms"
"gorm.io/gorm"
)
@@ -13,7 +14,8 @@ type Customer struct {
Password string `gorm:"size:255" json:"-"` // Hashed password, not exposed in JSON
FirstName string `gorm:"size:100" json:"first_name"`
LastName string `gorm:"size:100" json:"last_name"`
Role CustomerRole `gorm:"type:varchar(20);default:'user'" json:"role"`
RoleID uint `gorm:"column:role_id;not null;default:1" json:"-"`
Role *Role `gorm:"foreignKey:RoleID" json:"role,omitempty"`
Provider AuthProvider `gorm:"type:varchar(20);default:'local'" json:"provider"`
ProviderID string `gorm:"size:255" json:"provider_id,omitempty"` // ID from OAuth provider
AvatarURL string `gorm:"size:500" json:"avatar_url,omitempty"`
@@ -23,22 +25,27 @@ type Customer struct {
EmailVerificationExpires *time.Time `json:"-"`
PasswordResetToken string `gorm:"size:255" json:"-"`
PasswordResetExpires *time.Time `json:"-"`
WebdavToken string `gorm:"size:255" json:"-"`
WebdavExpires *time.Time `json:"-"`
LastPasswordResetRequest *time.Time `json:"-"`
LastLoginAt *time.Time `json:"last_login_at,omitempty"`
LangID uint `gorm:"default:2" json:"lang_id"` // User's preferred language
CountryID uint `gorm:"default:2" json:"country_id"` // User's selected country
Country *Country `gorm:"foreignKey:CountryID" json:"country,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
IsNoVat bool `gorm:"default:false" json:"is_no_vat"`
}
// CustomerRole represents the role of a user
type CustomerRole string
const (
RoleUser CustomerRole = "user"
RoleAdmin CustomerRole = "admin"
)
func (u *Customer) HasPermission(permission perms.Permission) bool {
for _, p := range u.Role.Permissions {
if p.Name == permission {
return true
}
}
return false
}
// AuthProvider represents the authentication provider
type AuthProvider string
@@ -53,16 +60,6 @@ func (Customer) TableName() string {
return "b2b_customers"
}
// IsAdmin checks if the user has admin role
func (u *Customer) IsAdmin() bool {
return u.Role == RoleAdmin
}
// CanManageUsers checks if the user can manage other users
func (u *Customer) CanManageUsers() bool {
return u.Role == RoleAdmin
}
// FullName returns the user's full name
func (u *Customer) FullName() string {
if u.FirstName == "" && u.LastName == "" {
@@ -73,29 +70,65 @@ func (u *Customer) FullName() string {
// UserSession represents a user session for JWT claims
type UserSession struct {
UserID uint `json:"user_id"`
Email string `json:"email"`
Username string `json:"username"`
Role CustomerRole `json:"role"`
LangID uint `json:"lang_id"`
CountryID uint `json:"country_id"`
UserID uint `json:"user_id"`
Email string `json:"email"`
Username string `json:"username"`
RoleID uint `json:"role_id"`
RoleName string `json:"role_name"`
LangID uint `json:"lang_id"`
CountryID uint `json:"country_id"`
IsActive bool `json:"is_active"`
Permissions []perms.Permission `json:"permissions"`
}
func (us *UserSession) HasPermission(permission perms.Permission) bool {
for _, p := range us.Permissions {
if p == permission {
return true
}
}
return false
}
type UserLocale struct {
// User is the Target user if present, otherwise same as Original.
// User ought to be used in applications
User *Customer
// Original user is the one associated with auth token
OriginalUser *Customer
// Importantly, lang_id used in application is stored as OriginalUser.LangID
}
// ToSession converts User to UserSession
func (u *Customer) ToSession() *UserSession {
return &UserSession{
UserID: u.ID,
Email: u.Email,
Role: u.Role,
LangID: u.LangID,
CountryID: u.CountryID,
UserID: u.ID,
Email: u.Email,
RoleID: u.Role.ID,
RoleName: u.Role.Name,
Permissions: BuildPermissionSlice(u),
LangID: u.LangID,
CountryID: u.CountryID,
IsActive: u.IsActive,
}
}
func BuildPermissionSlice(user *Customer) []perms.Permission {
var perms []perms.Permission
for _, p := range user.Role.Permissions {
perms = append(perms, p.Name)
}
return perms
}
// LoginRequest represents the login form data
type LoginRequest struct {
Email string `json:"email" form:"email"`
Password string `json:"password" form:"password"`
LangID *uint `json:"lang_id" form:"lang_id"`
}
// RegisterRequest represents the initial registration form data
@@ -142,3 +175,10 @@ type RefreshToken struct {
func (RefreshToken) TableName() string {
return "b2b_refresh_tokens"
}
type UserInList struct {
UserID uint `gorm:"primaryKey;column:id" json:"user_id"`
Email string `gorm:"column:email" json:"email"`
FirstName string `gorm:"column:first_name" json:"first_name"`
LastName string `gorm:"column:last_name" json:"last_name"`
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAccess = "ps_access"
// PsAccess mapped from table <ps_access>
type PsAccess struct {
IDProfile int32 `gorm:"column:id_profile;primaryKey" json:"id_profile"`
IDAuthorizationRole int32 `gorm:"column:id_authorization_role;primaryKey" json:"id_authorization_role"`
}
// TableName PsAccess's table name
func (*PsAccess) TableName() string {
return TableNamePsAccess
}
var PsAccessCols = struct {
IDProfile gormcol.Field
IDAuthorizationRole gormcol.Field
}{
IDProfile: gormcol.Field{}.Set((&PsAccess{}).TableName(), "id_profile"),
IDAuthorizationRole: gormcol.Field{}.Set((&PsAccess{}).TableName(), "id_authorization_role"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAccessory = "ps_accessory"
// PsAccessory mapped from table <ps_accessory>
type PsAccessory struct {
IDProduct1 int32 `gorm:"column:id_product_1;not null;index:accessory_product,priority:1" json:"id_product_1"`
IDProduct2 int32 `gorm:"column:id_product_2;not null;index:accessory_product,priority:2" json:"id_product_2"`
}
// TableName PsAccessory's table name
func (*PsAccessory) TableName() string {
return TableNamePsAccessory
}
var PsAccessoryCols = struct {
IDProduct1 gormcol.Field
IDProduct2 gormcol.Field
}{
IDProduct1: gormcol.Field{}.Set((&PsAccessory{}).TableName(), "id_product_1"),
IDProduct2: gormcol.Field{}.Set((&PsAccessory{}).TableName(), "id_product_2"),
}

View File

@@ -0,0 +1,98 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsAddress = "ps_address"
// PsAddress mapped from table <ps_address>
type PsAddress struct {
IDAddress int32 `gorm:"column:id_address;primaryKey;autoIncrement:true" json:"id_address"`
IDCountry int32 `gorm:"column:id_country;not null;index:id_country,priority:1" json:"id_country"`
IDState *int32 `gorm:"column:id_state;index:id_state,priority:1" json:"id_state"`
IDCustomer int32 `gorm:"column:id_customer;not null;index:address_customer,priority:1" json:"id_customer"`
IDManufacturer int32 `gorm:"column:id_manufacturer;not null;index:id_manufacturer,priority:1" json:"id_manufacturer"`
IDSupplier int32 `gorm:"column:id_supplier;not null;index:id_supplier,priority:1" json:"id_supplier"`
IDWarehouse int32 `gorm:"column:id_warehouse;not null;index:id_warehouse,priority:1" json:"id_warehouse"`
Alias string `gorm:"column:alias;not null" json:"alias"`
Company *string `gorm:"column:company" json:"company"`
Lastname string `gorm:"column:lastname;not null" json:"lastname"`
Firstname string `gorm:"column:firstname;not null" json:"firstname"`
Address1 string `gorm:"column:address1;not null" json:"address1"`
Address2 *string `gorm:"column:address2" json:"address2"`
Postcode *string `gorm:"column:postcode" json:"postcode"`
City string `gorm:"column:city;not null" json:"city"`
Other *string `gorm:"column:other" json:"other"`
Phone *string `gorm:"column:phone" json:"phone"`
PhoneMobile *string `gorm:"column:phone_mobile" json:"phone_mobile"`
VatNumber *string `gorm:"column:vat_number" json:"vat_number"`
Dni *string `gorm:"column:dni" json:"dni"`
DateAdd time.Time `gorm:"column:date_add;not null" json:"date_add"`
DateUpd time.Time `gorm:"column:date_upd;not null" json:"date_upd"`
Active bool `gorm:"column:active;not null;default:1" json:"active"`
Deleted bool `gorm:"column:deleted;not null" json:"deleted"`
IsNovat int32 `gorm:"column:is_novat;not null" json:"is_novat"`
}
// TableName PsAddress's table name
func (*PsAddress) TableName() string {
return TableNamePsAddress
}
var PsAddressCols = struct {
IDAddress gormcol.Field
IDCountry gormcol.Field
IDState gormcol.Field
IDCustomer gormcol.Field
IDManufacturer gormcol.Field
IDSupplier gormcol.Field
IDWarehouse gormcol.Field
Alias gormcol.Field
Company gormcol.Field
Lastname gormcol.Field
Firstname gormcol.Field
Address1 gormcol.Field
Address2 gormcol.Field
Postcode gormcol.Field
City gormcol.Field
Other gormcol.Field
Phone gormcol.Field
PhoneMobile gormcol.Field
VatNumber gormcol.Field
Dni gormcol.Field
DateAdd gormcol.Field
DateUpd gormcol.Field
Active gormcol.Field
Deleted gormcol.Field
IsNovat gormcol.Field
}{
IDAddress: gormcol.Field{}.Set((&PsAddress{}).TableName(), "id_address"),
IDCountry: gormcol.Field{}.Set((&PsAddress{}).TableName(), "id_country"),
IDState: gormcol.Field{}.Set((&PsAddress{}).TableName(), "id_state"),
IDCustomer: gormcol.Field{}.Set((&PsAddress{}).TableName(), "id_customer"),
IDManufacturer: gormcol.Field{}.Set((&PsAddress{}).TableName(), "id_manufacturer"),
IDSupplier: gormcol.Field{}.Set((&PsAddress{}).TableName(), "id_supplier"),
IDWarehouse: gormcol.Field{}.Set((&PsAddress{}).TableName(), "id_warehouse"),
Alias: gormcol.Field{}.Set((&PsAddress{}).TableName(), "alias"),
Company: gormcol.Field{}.Set((&PsAddress{}).TableName(), "company"),
Lastname: gormcol.Field{}.Set((&PsAddress{}).TableName(), "lastname"),
Firstname: gormcol.Field{}.Set((&PsAddress{}).TableName(), "firstname"),
Address1: gormcol.Field{}.Set((&PsAddress{}).TableName(), "address1"),
Address2: gormcol.Field{}.Set((&PsAddress{}).TableName(), "address2"),
Postcode: gormcol.Field{}.Set((&PsAddress{}).TableName(), "postcode"),
City: gormcol.Field{}.Set((&PsAddress{}).TableName(), "city"),
Other: gormcol.Field{}.Set((&PsAddress{}).TableName(), "other"),
Phone: gormcol.Field{}.Set((&PsAddress{}).TableName(), "phone"),
PhoneMobile: gormcol.Field{}.Set((&PsAddress{}).TableName(), "phone_mobile"),
VatNumber: gormcol.Field{}.Set((&PsAddress{}).TableName(), "vat_number"),
Dni: gormcol.Field{}.Set((&PsAddress{}).TableName(), "dni"),
DateAdd: gormcol.Field{}.Set((&PsAddress{}).TableName(), "date_add"),
DateUpd: gormcol.Field{}.Set((&PsAddress{}).TableName(), "date_upd"),
Active: gormcol.Field{}.Set((&PsAddress{}).TableName(), "active"),
Deleted: gormcol.Field{}.Set((&PsAddress{}).TableName(), "deleted"),
IsNovat: gormcol.Field{}.Set((&PsAddress{}).TableName(), "is_novat"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAddressFormat = "ps_address_format"
// PsAddressFormat mapped from table <ps_address_format>
type PsAddressFormat struct {
IDCountry int32 `gorm:"column:id_country;primaryKey" json:"id_country"`
Format string `gorm:"column:format;not null" json:"format"`
}
// TableName PsAddressFormat's table name
func (*PsAddressFormat) TableName() string {
return TableNamePsAddressFormat
}
var PsAddressFormatCols = struct {
IDCountry gormcol.Field
Format gormcol.Field
}{
IDCountry: gormcol.Field{}.Set((&PsAddressFormat{}).TableName(), "id_country"),
Format: gormcol.Field{}.Set((&PsAddressFormat{}).TableName(), "format"),
}

View File

@@ -0,0 +1,41 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAdminFilter = "ps_admin_filter"
// PsAdminFilter mapped from table <ps_admin_filter>
type PsAdminFilter struct {
ID int32 `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
Employee int32 `gorm:"column:employee;not null;uniqueIndex:admin_filter_search_id_idx,priority:1" json:"employee"`
Shop int32 `gorm:"column:shop;not null;uniqueIndex:admin_filter_search_id_idx,priority:2" json:"shop"`
Controller string `gorm:"column:controller;not null;uniqueIndex:admin_filter_search_id_idx,priority:3" json:"controller"`
Action string `gorm:"column:action;not null;uniqueIndex:admin_filter_search_id_idx,priority:4" json:"action"`
Filter string `gorm:"column:filter;not null" json:"filter"`
FilterID string `gorm:"column:filter_id;not null;uniqueIndex:admin_filter_search_id_idx,priority:5" json:"filter_id"`
}
// TableName PsAdminFilter's table name
func (*PsAdminFilter) TableName() string {
return TableNamePsAdminFilter
}
var PsAdminFilterCols = struct {
ID gormcol.Field
Employee gormcol.Field
Shop gormcol.Field
Controller gormcol.Field
Action gormcol.Field
Filter gormcol.Field
FilterID gormcol.Field
}{
ID: gormcol.Field{}.Set((&PsAdminFilter{}).TableName(), "id"),
Employee: gormcol.Field{}.Set((&PsAdminFilter{}).TableName(), "employee"),
Shop: gormcol.Field{}.Set((&PsAdminFilter{}).TableName(), "shop"),
Controller: gormcol.Field{}.Set((&PsAdminFilter{}).TableName(), "controller"),
Action: gormcol.Field{}.Set((&PsAdminFilter{}).TableName(), "action"),
Filter: gormcol.Field{}.Set((&PsAdminFilter{}).TableName(), "filter"),
FilterID: gormcol.Field{}.Set((&PsAdminFilter{}).TableName(), "filter_id"),
}

View File

@@ -0,0 +1,53 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAdvice = "ps_advice"
// PsAdvice mapped from table <ps_advice>
type PsAdvice struct {
IDAdvice int32 `gorm:"column:id_advice;primaryKey;autoIncrement:true" json:"id_advice"`
IDPsAdvice int32 `gorm:"column:id_ps_advice;not null" json:"id_ps_advice"`
IDTab int32 `gorm:"column:id_tab;not null" json:"id_tab"`
IdsTab *string `gorm:"column:ids_tab" json:"ids_tab"`
Validated bool `gorm:"column:validated;not null" json:"validated"`
Hide bool `gorm:"column:hide;not null" json:"hide"`
Location string `gorm:"column:location;not null" json:"location"`
Selector *string `gorm:"column:selector" json:"selector"`
StartDay int32 `gorm:"column:start_day;not null" json:"start_day"`
StopDay int32 `gorm:"column:stop_day;not null" json:"stop_day"`
Weight *int32 `gorm:"column:weight;default:1" json:"weight"`
}
// TableName PsAdvice's table name
func (*PsAdvice) TableName() string {
return TableNamePsAdvice
}
var PsAdviceCols = struct {
IDAdvice gormcol.Field
IDPsAdvice gormcol.Field
IDTab gormcol.Field
IdsTab gormcol.Field
Validated gormcol.Field
Hide gormcol.Field
Location gormcol.Field
Selector gormcol.Field
StartDay gormcol.Field
StopDay gormcol.Field
Weight gormcol.Field
}{
IDAdvice: gormcol.Field{}.Set((&PsAdvice{}).TableName(), "id_advice"),
IDPsAdvice: gormcol.Field{}.Set((&PsAdvice{}).TableName(), "id_ps_advice"),
IDTab: gormcol.Field{}.Set((&PsAdvice{}).TableName(), "id_tab"),
IdsTab: gormcol.Field{}.Set((&PsAdvice{}).TableName(), "ids_tab"),
Validated: gormcol.Field{}.Set((&PsAdvice{}).TableName(), "validated"),
Hide: gormcol.Field{}.Set((&PsAdvice{}).TableName(), "hide"),
Location: gormcol.Field{}.Set((&PsAdvice{}).TableName(), "location"),
Selector: gormcol.Field{}.Set((&PsAdvice{}).TableName(), "selector"),
StartDay: gormcol.Field{}.Set((&PsAdvice{}).TableName(), "start_day"),
StopDay: gormcol.Field{}.Set((&PsAdvice{}).TableName(), "stop_day"),
Weight: gormcol.Field{}.Set((&PsAdvice{}).TableName(), "weight"),
}

View File

@@ -0,0 +1,29 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAdviceLang = "ps_advice_lang"
// PsAdviceLang mapped from table <ps_advice_lang>
type PsAdviceLang struct {
IDAdvice int32 `gorm:"column:id_advice;primaryKey" json:"id_advice"`
IDLang int32 `gorm:"column:id_lang;primaryKey" json:"id_lang"`
HTML *string `gorm:"column:html" json:"html"`
}
// TableName PsAdviceLang's table name
func (*PsAdviceLang) TableName() string {
return TableNamePsAdviceLang
}
var PsAdviceLangCols = struct {
IDAdvice gormcol.Field
IDLang gormcol.Field
HTML gormcol.Field
}{
IDAdvice: gormcol.Field{}.Set((&PsAdviceLang{}).TableName(), "id_advice"),
IDLang: gormcol.Field{}.Set((&PsAdviceLang{}).TableName(), "id_lang"),
HTML: gormcol.Field{}.Set((&PsAdviceLang{}).TableName(), "html"),
}

View File

@@ -0,0 +1,32 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAlias = "ps_alias"
// PsAlias mapped from table <ps_alias>
type PsAlias struct {
IDAlias int32 `gorm:"column:id_alias;primaryKey;autoIncrement:true" json:"id_alias"`
Alias string `gorm:"column:alias;not null;uniqueIndex:alias,priority:1" json:"alias"`
Search string `gorm:"column:search;not null" json:"search"`
Active bool `gorm:"column:active;not null;default:1" json:"active"`
}
// TableName PsAlias's table name
func (*PsAlias) TableName() string {
return TableNamePsAlias
}
var PsAliasCols = struct {
IDAlias gormcol.Field
Alias gormcol.Field
Search gormcol.Field
Active gormcol.Field
}{
IDAlias: gormcol.Field{}.Set((&PsAlias{}).TableName(), "id_alias"),
Alias: gormcol.Field{}.Set((&PsAlias{}).TableName(), "alias"),
Search: gormcol.Field{}.Set((&PsAlias{}).TableName(), "search"),
Active: gormcol.Field{}.Set((&PsAlias{}).TableName(), "active"),
}

View File

@@ -0,0 +1,35 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAttachment = "ps_attachment"
// PsAttachment mapped from table <ps_attachment>
type PsAttachment struct {
IDAttachment int32 `gorm:"column:id_attachment;primaryKey;autoIncrement:true" json:"id_attachment"`
File string `gorm:"column:file;not null" json:"file"`
FileName string `gorm:"column:file_name;not null" json:"file_name"`
FileSize int64 `gorm:"column:file_size;not null" json:"file_size"`
Mime string `gorm:"column:mime;not null" json:"mime"`
}
// TableName PsAttachment's table name
func (*PsAttachment) TableName() string {
return TableNamePsAttachment
}
var PsAttachmentCols = struct {
IDAttachment gormcol.Field
File gormcol.Field
FileName gormcol.Field
FileSize gormcol.Field
Mime gormcol.Field
}{
IDAttachment: gormcol.Field{}.Set((&PsAttachment{}).TableName(), "id_attachment"),
File: gormcol.Field{}.Set((&PsAttachment{}).TableName(), "file"),
FileName: gormcol.Field{}.Set((&PsAttachment{}).TableName(), "file_name"),
FileSize: gormcol.Field{}.Set((&PsAttachment{}).TableName(), "file_size"),
Mime: gormcol.Field{}.Set((&PsAttachment{}).TableName(), "mime"),
}

View File

@@ -0,0 +1,32 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAttachmentLang = "ps_attachment_lang"
// PsAttachmentLang mapped from table <ps_attachment_lang>
type PsAttachmentLang struct {
IDAttachment int32 `gorm:"column:id_attachment;primaryKey;autoIncrement:true" json:"id_attachment"`
IDLang int32 `gorm:"column:id_lang;primaryKey" json:"id_lang"`
Name *string `gorm:"column:name" json:"name"`
Description *string `gorm:"column:description" json:"description"`
}
// TableName PsAttachmentLang's table name
func (*PsAttachmentLang) TableName() string {
return TableNamePsAttachmentLang
}
var PsAttachmentLangCols = struct {
IDAttachment gormcol.Field
IDLang gormcol.Field
Name gormcol.Field
Description gormcol.Field
}{
IDAttachment: gormcol.Field{}.Set((&PsAttachmentLang{}).TableName(), "id_attachment"),
IDLang: gormcol.Field{}.Set((&PsAttachmentLang{}).TableName(), "id_lang"),
Name: gormcol.Field{}.Set((&PsAttachmentLang{}).TableName(), "name"),
Description: gormcol.Field{}.Set((&PsAttachmentLang{}).TableName(), "description"),
}

View File

@@ -0,0 +1,32 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAttribute = "ps_attribute"
// PsAttribute mapped from table <ps_attribute>
type PsAttribute struct {
IDAttribute int32 `gorm:"column:id_attribute;primaryKey;autoIncrement:true" json:"id_attribute"`
IDAttributeGroup int32 `gorm:"column:id_attribute_group;not null;index:attribute_group,priority:1" json:"id_attribute_group"`
Color string `gorm:"column:color;not null" json:"color"`
Position int32 `gorm:"column:position;not null" json:"position"`
}
// TableName PsAttribute's table name
func (*PsAttribute) TableName() string {
return TableNamePsAttribute
}
var PsAttributeCols = struct {
IDAttribute gormcol.Field
IDAttributeGroup gormcol.Field
Color gormcol.Field
Position gormcol.Field
}{
IDAttribute: gormcol.Field{}.Set((&PsAttribute{}).TableName(), "id_attribute"),
IDAttributeGroup: gormcol.Field{}.Set((&PsAttribute{}).TableName(), "id_attribute_group"),
Color: gormcol.Field{}.Set((&PsAttribute{}).TableName(), "color"),
Position: gormcol.Field{}.Set((&PsAttribute{}).TableName(), "position"),
}

View File

@@ -0,0 +1,32 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAttributeGroup = "ps_attribute_group"
// PsAttributeGroup mapped from table <ps_attribute_group>
type PsAttributeGroup struct {
IDAttributeGroup int32 `gorm:"column:id_attribute_group;primaryKey;autoIncrement:true" json:"id_attribute_group"`
IsColorGroup bool `gorm:"column:is_color_group;not null" json:"is_color_group"`
GroupType string `gorm:"column:group_type;not null" json:"group_type"`
Position int32 `gorm:"column:position;not null" json:"position"`
}
// TableName PsAttributeGroup's table name
func (*PsAttributeGroup) TableName() string {
return TableNamePsAttributeGroup
}
var PsAttributeGroupCols = struct {
IDAttributeGroup gormcol.Field
IsColorGroup gormcol.Field
GroupType gormcol.Field
Position gormcol.Field
}{
IDAttributeGroup: gormcol.Field{}.Set((&PsAttributeGroup{}).TableName(), "id_attribute_group"),
IsColorGroup: gormcol.Field{}.Set((&PsAttributeGroup{}).TableName(), "is_color_group"),
GroupType: gormcol.Field{}.Set((&PsAttributeGroup{}).TableName(), "group_type"),
Position: gormcol.Field{}.Set((&PsAttributeGroup{}).TableName(), "position"),
}

View File

@@ -0,0 +1,32 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAttributeGroupLang = "ps_attribute_group_lang"
// PsAttributeGroupLang mapped from table <ps_attribute_group_lang>
type PsAttributeGroupLang struct {
IDAttributeGroup int32 `gorm:"column:id_attribute_group;primaryKey;index:IDX_4653726C67A664FB,priority:1" json:"id_attribute_group"`
IDLang int32 `gorm:"column:id_lang;primaryKey;index:IDX_4653726CBA299860,priority:1" json:"id_lang"`
Name string `gorm:"column:name;not null" json:"name"`
PublicName string `gorm:"column:public_name;not null" json:"public_name"`
}
// TableName PsAttributeGroupLang's table name
func (*PsAttributeGroupLang) TableName() string {
return TableNamePsAttributeGroupLang
}
var PsAttributeGroupLangCols = struct {
IDAttributeGroup gormcol.Field
IDLang gormcol.Field
Name gormcol.Field
PublicName gormcol.Field
}{
IDAttributeGroup: gormcol.Field{}.Set((&PsAttributeGroupLang{}).TableName(), "id_attribute_group"),
IDLang: gormcol.Field{}.Set((&PsAttributeGroupLang{}).TableName(), "id_lang"),
Name: gormcol.Field{}.Set((&PsAttributeGroupLang{}).TableName(), "name"),
PublicName: gormcol.Field{}.Set((&PsAttributeGroupLang{}).TableName(), "public_name"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAttributeGroupShop = "ps_attribute_group_shop"
// PsAttributeGroupShop mapped from table <ps_attribute_group_shop>
type PsAttributeGroupShop struct {
IDAttributeGroup int32 `gorm:"column:id_attribute_group;primaryKey;index:IDX_DB30BAAC67A664FB,priority:1" json:"id_attribute_group"`
IDShop int32 `gorm:"column:id_shop;primaryKey;index:IDX_DB30BAAC274A50A0,priority:1" json:"id_shop"`
}
// TableName PsAttributeGroupShop's table name
func (*PsAttributeGroupShop) TableName() string {
return TableNamePsAttributeGroupShop
}
var PsAttributeGroupShopCols = struct {
IDAttributeGroup gormcol.Field
IDShop gormcol.Field
}{
IDAttributeGroup: gormcol.Field{}.Set((&PsAttributeGroupShop{}).TableName(), "id_attribute_group"),
IDShop: gormcol.Field{}.Set((&PsAttributeGroupShop{}).TableName(), "id_shop"),
}

View File

@@ -0,0 +1,35 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAttributeImpact = "ps_attribute_impact"
// PsAttributeImpact mapped from table <ps_attribute_impact>
type PsAttributeImpact struct {
IDAttributeImpact int32 `gorm:"column:id_attribute_impact;primaryKey;autoIncrement:true" json:"id_attribute_impact"`
IDProduct int32 `gorm:"column:id_product;not null;uniqueIndex:id_product,priority:1" json:"id_product"`
IDAttribute int32 `gorm:"column:id_attribute;not null;uniqueIndex:id_product,priority:2" json:"id_attribute"`
Weight float64 `gorm:"column:weight;not null" json:"weight"`
Price float64 `gorm:"column:price;not null" json:"price"`
}
// TableName PsAttributeImpact's table name
func (*PsAttributeImpact) TableName() string {
return TableNamePsAttributeImpact
}
var PsAttributeImpactCols = struct {
IDAttributeImpact gormcol.Field
IDProduct gormcol.Field
IDAttribute gormcol.Field
Weight gormcol.Field
Price gormcol.Field
}{
IDAttributeImpact: gormcol.Field{}.Set((&PsAttributeImpact{}).TableName(), "id_attribute_impact"),
IDProduct: gormcol.Field{}.Set((&PsAttributeImpact{}).TableName(), "id_product"),
IDAttribute: gormcol.Field{}.Set((&PsAttributeImpact{}).TableName(), "id_attribute"),
Weight: gormcol.Field{}.Set((&PsAttributeImpact{}).TableName(), "weight"),
Price: gormcol.Field{}.Set((&PsAttributeImpact{}).TableName(), "price"),
}

View File

@@ -0,0 +1,29 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAttributeLang = "ps_attribute_lang"
// PsAttributeLang mapped from table <ps_attribute_lang>
type PsAttributeLang struct {
IDAttribute int32 `gorm:"column:id_attribute;primaryKey;index:IDX_3ABE46A77A4F53DC,priority:1" json:"id_attribute"`
IDLang int32 `gorm:"column:id_lang;primaryKey;index:IDX_3ABE46A7BA299860,priority:1" json:"id_lang"`
Name string `gorm:"column:name;not null" json:"name"`
}
// TableName PsAttributeLang's table name
func (*PsAttributeLang) TableName() string {
return TableNamePsAttributeLang
}
var PsAttributeLangCols = struct {
IDAttribute gormcol.Field
IDLang gormcol.Field
Name gormcol.Field
}{
IDAttribute: gormcol.Field{}.Set((&PsAttributeLang{}).TableName(), "id_attribute"),
IDLang: gormcol.Field{}.Set((&PsAttributeLang{}).TableName(), "id_lang"),
Name: gormcol.Field{}.Set((&PsAttributeLang{}).TableName(), "name"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAttributeShop = "ps_attribute_shop"
// PsAttributeShop mapped from table <ps_attribute_shop>
type PsAttributeShop struct {
IDAttribute int32 `gorm:"column:id_attribute;primaryKey;index:IDX_A7DD8E677A4F53DC,priority:1" json:"id_attribute"`
IDShop int32 `gorm:"column:id_shop;primaryKey;index:IDX_A7DD8E67274A50A0,priority:1" json:"id_shop"`
}
// TableName PsAttributeShop's table name
func (*PsAttributeShop) TableName() string {
return TableNamePsAttributeShop
}
var PsAttributeShopCols = struct {
IDAttribute gormcol.Field
IDShop gormcol.Field
}{
IDAttribute: gormcol.Field{}.Set((&PsAttributeShop{}).TableName(), "id_attribute"),
IDShop: gormcol.Field{}.Set((&PsAttributeShop{}).TableName(), "id_shop"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsAuthorizationRole = "ps_authorization_role"
// PsAuthorizationRole mapped from table <ps_authorization_role>
type PsAuthorizationRole struct {
IDAuthorizationRole int32 `gorm:"column:id_authorization_role;primaryKey;autoIncrement:true" json:"id_authorization_role"`
Slug string `gorm:"column:slug;not null;uniqueIndex:slug,priority:1" json:"slug"`
}
// TableName PsAuthorizationRole's table name
func (*PsAuthorizationRole) TableName() string {
return TableNamePsAuthorizationRole
}
var PsAuthorizationRoleCols = struct {
IDAuthorizationRole gormcol.Field
Slug gormcol.Field
}{
IDAuthorizationRole: gormcol.Field{}.Set((&PsAuthorizationRole{}).TableName(), "id_authorization_role"),
Slug: gormcol.Field{}.Set((&PsAuthorizationRole{}).TableName(), "slug"),
}

View File

@@ -0,0 +1,44 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsBadge = "ps_badge"
// PsBadge mapped from table <ps_badge>
type PsBadge struct {
IDBadge int32 `gorm:"column:id_badge;primaryKey;autoIncrement:true" json:"id_badge"`
IDPsBadge int32 `gorm:"column:id_ps_badge;not null" json:"id_ps_badge"`
Type string `gorm:"column:type;not null" json:"type"`
IDGroup int32 `gorm:"column:id_group;not null" json:"id_group"`
GroupPosition int32 `gorm:"column:group_position;not null" json:"group_position"`
Scoring int32 `gorm:"column:scoring;not null" json:"scoring"`
Awb *int32 `gorm:"column:awb" json:"awb"`
Validated bool `gorm:"column:validated;not null" json:"validated"`
}
// TableName PsBadge's table name
func (*PsBadge) TableName() string {
return TableNamePsBadge
}
var PsBadgeCols = struct {
IDBadge gormcol.Field
IDPsBadge gormcol.Field
Type gormcol.Field
IDGroup gormcol.Field
GroupPosition gormcol.Field
Scoring gormcol.Field
Awb gormcol.Field
Validated gormcol.Field
}{
IDBadge: gormcol.Field{}.Set((&PsBadge{}).TableName(), "id_badge"),
IDPsBadge: gormcol.Field{}.Set((&PsBadge{}).TableName(), "id_ps_badge"),
Type: gormcol.Field{}.Set((&PsBadge{}).TableName(), "type"),
IDGroup: gormcol.Field{}.Set((&PsBadge{}).TableName(), "id_group"),
GroupPosition: gormcol.Field{}.Set((&PsBadge{}).TableName(), "group_position"),
Scoring: gormcol.Field{}.Set((&PsBadge{}).TableName(), "scoring"),
Awb: gormcol.Field{}.Set((&PsBadge{}).TableName(), "awb"),
Validated: gormcol.Field{}.Set((&PsBadge{}).TableName(), "validated"),
}

View File

@@ -0,0 +1,35 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsBadgeLang = "ps_badge_lang"
// PsBadgeLang mapped from table <ps_badge_lang>
type PsBadgeLang struct {
IDBadge int32 `gorm:"column:id_badge;primaryKey" json:"id_badge"`
IDLang int32 `gorm:"column:id_lang;primaryKey" json:"id_lang"`
Name *string `gorm:"column:name" json:"name"`
Description *string `gorm:"column:description" json:"description"`
GroupName *string `gorm:"column:group_name" json:"group_name"`
}
// TableName PsBadgeLang's table name
func (*PsBadgeLang) TableName() string {
return TableNamePsBadgeLang
}
var PsBadgeLangCols = struct {
IDBadge gormcol.Field
IDLang gormcol.Field
Name gormcol.Field
Description gormcol.Field
GroupName gormcol.Field
}{
IDBadge: gormcol.Field{}.Set((&PsBadgeLang{}).TableName(), "id_badge"),
IDLang: gormcol.Field{}.Set((&PsBadgeLang{}).TableName(), "id_lang"),
Name: gormcol.Field{}.Set((&PsBadgeLang{}).TableName(), "name"),
Description: gormcol.Field{}.Set((&PsBadgeLang{}).TableName(), "description"),
GroupName: gormcol.Field{}.Set((&PsBadgeLang{}).TableName(), "group_name"),
}

View File

@@ -0,0 +1,83 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCarrier = "ps_carrier"
// PsCarrier mapped from table <ps_carrier>
type PsCarrier struct {
IDCarrier int32 `gorm:"column:id_carrier;primaryKey;autoIncrement:true" json:"id_carrier"`
IDReference int32 `gorm:"column:id_reference;not null;index:reference,priority:1" json:"id_reference"`
IDTaxRulesGroup *int32 `gorm:"column:id_tax_rules_group;index:id_tax_rules_group,priority:1" json:"id_tax_rules_group"`
Name string `gorm:"column:name;not null" json:"name"`
URL *string `gorm:"column:url" json:"url"`
Active bool `gorm:"column:active;not null;index:deleted,priority:2;index:reference,priority:3" json:"active"`
Deleted bool `gorm:"column:deleted;not null;index:deleted,priority:1;index:reference,priority:2" json:"deleted"`
ShippingHandling bool `gorm:"column:shipping_handling;not null;default:1" json:"shipping_handling"`
RangeBehavior bool `gorm:"column:range_behavior;not null" json:"range_behavior"`
IsModule bool `gorm:"column:is_module;not null" json:"is_module"`
IsFree bool `gorm:"column:is_free;not null" json:"is_free"`
ShippingExternal bool `gorm:"column:shipping_external;not null" json:"shipping_external"`
NeedRange bool `gorm:"column:need_range;not null" json:"need_range"`
ExternalModuleName *string `gorm:"column:external_module_name" json:"external_module_name"`
ShippingMethod int32 `gorm:"column:shipping_method;not null" json:"shipping_method"`
Position int32 `gorm:"column:position;not null" json:"position"`
MaxWidth *int32 `gorm:"column:max_width" json:"max_width"`
MaxHeight *int32 `gorm:"column:max_height" json:"max_height"`
MaxDepth *int32 `gorm:"column:max_depth" json:"max_depth"`
MaxWeight *float64 `gorm:"column:max_weight;default:0.000000" json:"max_weight"`
Grade *int32 `gorm:"column:grade" json:"grade"`
}
// TableName PsCarrier's table name
func (*PsCarrier) TableName() string {
return TableNamePsCarrier
}
var PsCarrierCols = struct {
IDCarrier gormcol.Field
IDReference gormcol.Field
IDTaxRulesGroup gormcol.Field
Name gormcol.Field
URL gormcol.Field
Active gormcol.Field
Deleted gormcol.Field
ShippingHandling gormcol.Field
RangeBehavior gormcol.Field
IsModule gormcol.Field
IsFree gormcol.Field
ShippingExternal gormcol.Field
NeedRange gormcol.Field
ExternalModuleName gormcol.Field
ShippingMethod gormcol.Field
Position gormcol.Field
MaxWidth gormcol.Field
MaxHeight gormcol.Field
MaxDepth gormcol.Field
MaxWeight gormcol.Field
Grade gormcol.Field
}{
IDCarrier: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "id_carrier"),
IDReference: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "id_reference"),
IDTaxRulesGroup: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "id_tax_rules_group"),
Name: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "name"),
URL: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "url"),
Active: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "active"),
Deleted: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "deleted"),
ShippingHandling: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "shipping_handling"),
RangeBehavior: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "range_behavior"),
IsModule: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "is_module"),
IsFree: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "is_free"),
ShippingExternal: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "shipping_external"),
NeedRange: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "need_range"),
ExternalModuleName: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "external_module_name"),
ShippingMethod: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "shipping_method"),
Position: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "position"),
MaxWidth: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "max_width"),
MaxHeight: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "max_height"),
MaxDepth: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "max_depth"),
MaxWeight: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "max_weight"),
Grade: gormcol.Field{}.Set((&PsCarrier{}).TableName(), "grade"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCarrierGroup = "ps_carrier_group"
// PsCarrierGroup mapped from table <ps_carrier_group>
type PsCarrierGroup struct {
IDCarrier int32 `gorm:"column:id_carrier;primaryKey" json:"id_carrier"`
IDGroup int32 `gorm:"column:id_group;primaryKey" json:"id_group"`
}
// TableName PsCarrierGroup's table name
func (*PsCarrierGroup) TableName() string {
return TableNamePsCarrierGroup
}
var PsCarrierGroupCols = struct {
IDCarrier gormcol.Field
IDGroup gormcol.Field
}{
IDCarrier: gormcol.Field{}.Set((&PsCarrierGroup{}).TableName(), "id_carrier"),
IDGroup: gormcol.Field{}.Set((&PsCarrierGroup{}).TableName(), "id_group"),
}

View File

@@ -0,0 +1,32 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCarrierLang = "ps_carrier_lang"
// PsCarrierLang mapped from table <ps_carrier_lang>
type PsCarrierLang struct {
IDCarrier int32 `gorm:"column:id_carrier;primaryKey" json:"id_carrier"`
IDShop int32 `gorm:"column:id_shop;primaryKey;default:1" json:"id_shop"`
IDLang int32 `gorm:"column:id_lang;primaryKey" json:"id_lang"`
Delay *string `gorm:"column:delay" json:"delay"`
}
// TableName PsCarrierLang's table name
func (*PsCarrierLang) TableName() string {
return TableNamePsCarrierLang
}
var PsCarrierLangCols = struct {
IDCarrier gormcol.Field
IDShop gormcol.Field
IDLang gormcol.Field
Delay gormcol.Field
}{
IDCarrier: gormcol.Field{}.Set((&PsCarrierLang{}).TableName(), "id_carrier"),
IDShop: gormcol.Field{}.Set((&PsCarrierLang{}).TableName(), "id_shop"),
IDLang: gormcol.Field{}.Set((&PsCarrierLang{}).TableName(), "id_lang"),
Delay: gormcol.Field{}.Set((&PsCarrierLang{}).TableName(), "delay"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCarrierShop = "ps_carrier_shop"
// PsCarrierShop mapped from table <ps_carrier_shop>
type PsCarrierShop struct {
IDCarrier int32 `gorm:"column:id_carrier;primaryKey" json:"id_carrier"`
IDShop int32 `gorm:"column:id_shop;primaryKey;index:id_shop,priority:1" json:"id_shop"`
}
// TableName PsCarrierShop's table name
func (*PsCarrierShop) TableName() string {
return TableNamePsCarrierShop
}
var PsCarrierShopCols = struct {
IDCarrier gormcol.Field
IDShop gormcol.Field
}{
IDCarrier: gormcol.Field{}.Set((&PsCarrierShop{}).TableName(), "id_carrier"),
IDShop: gormcol.Field{}.Set((&PsCarrierShop{}).TableName(), "id_shop"),
}

View File

@@ -0,0 +1,29 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCarrierTaxRulesGroupShop = "ps_carrier_tax_rules_group_shop"
// PsCarrierTaxRulesGroupShop mapped from table <ps_carrier_tax_rules_group_shop>
type PsCarrierTaxRulesGroupShop struct {
IDCarrier int32 `gorm:"column:id_carrier;primaryKey" json:"id_carrier"`
IDTaxRulesGroup int32 `gorm:"column:id_tax_rules_group;primaryKey" json:"id_tax_rules_group"`
IDShop int32 `gorm:"column:id_shop;primaryKey" json:"id_shop"`
}
// TableName PsCarrierTaxRulesGroupShop's table name
func (*PsCarrierTaxRulesGroupShop) TableName() string {
return TableNamePsCarrierTaxRulesGroupShop
}
var PsCarrierTaxRulesGroupShopCols = struct {
IDCarrier gormcol.Field
IDTaxRulesGroup gormcol.Field
IDShop gormcol.Field
}{
IDCarrier: gormcol.Field{}.Set((&PsCarrierTaxRulesGroupShop{}).TableName(), "id_carrier"),
IDTaxRulesGroup: gormcol.Field{}.Set((&PsCarrierTaxRulesGroupShop{}).TableName(), "id_tax_rules_group"),
IDShop: gormcol.Field{}.Set((&PsCarrierTaxRulesGroupShop{}).TableName(), "id_shop"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCarrierZone = "ps_carrier_zone"
// PsCarrierZone mapped from table <ps_carrier_zone>
type PsCarrierZone struct {
IDCarrier int32 `gorm:"column:id_carrier;primaryKey" json:"id_carrier"`
IDZone int32 `gorm:"column:id_zone;primaryKey" json:"id_zone"`
}
// TableName PsCarrierZone's table name
func (*PsCarrierZone) TableName() string {
return TableNamePsCarrierZone
}
var PsCarrierZoneCols = struct {
IDCarrier gormcol.Field
IDZone gormcol.Field
}{
IDCarrier: gormcol.Field{}.Set((&PsCarrierZone{}).TableName(), "id_carrier"),
IDZone: gormcol.Field{}.Set((&PsCarrierZone{}).TableName(), "id_zone"),
}

View File

@@ -0,0 +1,92 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsCart = "ps_cart"
// PsCart mapped from table <ps_cart>
type PsCart struct {
IDCart int32 `gorm:"column:id_cart;primaryKey;autoIncrement:true" json:"id_cart"`
IDShopGroup int32 `gorm:"column:id_shop_group;not null;index:id_shop_group,priority:1;default:1" json:"id_shop_group"`
IDShop int32 `gorm:"column:id_shop;not null;index:id_shop,priority:1;index:id_shop_2,priority:1;default:1" json:"id_shop"`
IDCarrier int32 `gorm:"column:id_carrier;not null;index:id_carrier,priority:1" json:"id_carrier"`
DeliveryOption string `gorm:"column:delivery_option;not null" json:"delivery_option"`
IDLang int32 `gorm:"column:id_lang;not null;index:id_lang,priority:1" json:"id_lang"`
IDAddressDelivery int32 `gorm:"column:id_address_delivery;not null;index:id_address_delivery,priority:1" json:"id_address_delivery"`
IDAddressInvoice int32 `gorm:"column:id_address_invoice;not null;index:id_address_invoice,priority:1" json:"id_address_invoice"`
IDCurrency int32 `gorm:"column:id_currency;not null;index:id_currency,priority:1" json:"id_currency"`
IDCustomer int32 `gorm:"column:id_customer;not null;index:cart_customer,priority:1" json:"id_customer"`
IDGuest int32 `gorm:"column:id_guest;not null;index:id_guest,priority:1" json:"id_guest"`
SecureKey string `gorm:"column:secure_key;not null;default:-1" json:"secure_key"`
Recyclable bool `gorm:"column:recyclable;not null;default:1" json:"recyclable"`
Gift bool `gorm:"column:gift;not null" json:"gift"`
GiftMessage *string `gorm:"column:gift_message" json:"gift_message"`
MobileTheme bool `gorm:"column:mobile_theme;not null" json:"mobile_theme"`
AllowSeperatedPackage bool `gorm:"column:allow_seperated_package;not null" json:"allow_seperated_package"`
DateAdd time.Time `gorm:"column:date_add;not null;index:id_shop,priority:2" json:"date_add"`
DateUpd time.Time `gorm:"column:date_upd;not null;index:id_shop_2,priority:2" json:"date_upd"`
CheckoutSessionData *string `gorm:"column:checkout_session_data" json:"checkout_session_data"`
CustomeShippingPriceNetto *float64 `gorm:"column:custome_shipping_price_netto" json:"custome_shipping_price_netto"`
CustomeShippingPrice *float64 `gorm:"column:custome_shipping_price" json:"custome_shipping_price"`
CustomeShippingTaxRate *float64 `gorm:"column:custome_shipping_tax_rate" json:"custome_shipping_tax_rate"`
}
// TableName PsCart's table name
func (*PsCart) TableName() string {
return TableNamePsCart
}
var PsCartCols = struct {
IDCart gormcol.Field
IDShopGroup gormcol.Field
IDShop gormcol.Field
IDCarrier gormcol.Field
DeliveryOption gormcol.Field
IDLang gormcol.Field
IDAddressDelivery gormcol.Field
IDAddressInvoice gormcol.Field
IDCurrency gormcol.Field
IDCustomer gormcol.Field
IDGuest gormcol.Field
SecureKey gormcol.Field
Recyclable gormcol.Field
Gift gormcol.Field
GiftMessage gormcol.Field
MobileTheme gormcol.Field
AllowSeperatedPackage gormcol.Field
DateAdd gormcol.Field
DateUpd gormcol.Field
CheckoutSessionData gormcol.Field
CustomeShippingPriceNetto gormcol.Field
CustomeShippingPrice gormcol.Field
CustomeShippingTaxRate gormcol.Field
}{
IDCart: gormcol.Field{}.Set((&PsCart{}).TableName(), "id_cart"),
IDShopGroup: gormcol.Field{}.Set((&PsCart{}).TableName(), "id_shop_group"),
IDShop: gormcol.Field{}.Set((&PsCart{}).TableName(), "id_shop"),
IDCarrier: gormcol.Field{}.Set((&PsCart{}).TableName(), "id_carrier"),
DeliveryOption: gormcol.Field{}.Set((&PsCart{}).TableName(), "delivery_option"),
IDLang: gormcol.Field{}.Set((&PsCart{}).TableName(), "id_lang"),
IDAddressDelivery: gormcol.Field{}.Set((&PsCart{}).TableName(), "id_address_delivery"),
IDAddressInvoice: gormcol.Field{}.Set((&PsCart{}).TableName(), "id_address_invoice"),
IDCurrency: gormcol.Field{}.Set((&PsCart{}).TableName(), "id_currency"),
IDCustomer: gormcol.Field{}.Set((&PsCart{}).TableName(), "id_customer"),
IDGuest: gormcol.Field{}.Set((&PsCart{}).TableName(), "id_guest"),
SecureKey: gormcol.Field{}.Set((&PsCart{}).TableName(), "secure_key"),
Recyclable: gormcol.Field{}.Set((&PsCart{}).TableName(), "recyclable"),
Gift: gormcol.Field{}.Set((&PsCart{}).TableName(), "gift"),
GiftMessage: gormcol.Field{}.Set((&PsCart{}).TableName(), "gift_message"),
MobileTheme: gormcol.Field{}.Set((&PsCart{}).TableName(), "mobile_theme"),
AllowSeperatedPackage: gormcol.Field{}.Set((&PsCart{}).TableName(), "allow_seperated_package"),
DateAdd: gormcol.Field{}.Set((&PsCart{}).TableName(), "date_add"),
DateUpd: gormcol.Field{}.Set((&PsCart{}).TableName(), "date_upd"),
CheckoutSessionData: gormcol.Field{}.Set((&PsCart{}).TableName(), "checkout_session_data"),
CustomeShippingPriceNetto: gormcol.Field{}.Set((&PsCart{}).TableName(), "custome_shipping_price_netto"),
CustomeShippingPrice: gormcol.Field{}.Set((&PsCart{}).TableName(), "custome_shipping_price"),
CustomeShippingTaxRate: gormcol.Field{}.Set((&PsCart{}).TableName(), "custome_shipping_tax_rate"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCartCartRule = "ps_cart_cart_rule"
// PsCartCartRule mapped from table <ps_cart_cart_rule>
type PsCartCartRule struct {
IDCart int32 `gorm:"column:id_cart;primaryKey" json:"id_cart"`
IDCartRule int32 `gorm:"column:id_cart_rule;primaryKey;index:id_cart_rule,priority:1" json:"id_cart_rule"`
}
// TableName PsCartCartRule's table name
func (*PsCartCartRule) TableName() string {
return TableNamePsCartCartRule
}
var PsCartCartRuleCols = struct {
IDCart gormcol.Field
IDCartRule gormcol.Field
}{
IDCart: gormcol.Field{}.Set((&PsCartCartRule{}).TableName(), "id_cart"),
IDCartRule: gormcol.Field{}.Set((&PsCartCartRule{}).TableName(), "id_cart_rule"),
}

View File

@@ -0,0 +1,47 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsCartProduct = "ps_cart_product"
// PsCartProduct mapped from table <ps_cart_product>
type PsCartProduct struct {
IDCart int32 `gorm:"column:id_cart;primaryKey;index:id_cart_order,priority:1" json:"id_cart"`
IDProduct int32 `gorm:"column:id_product;primaryKey;index:id_cart_order,priority:3" json:"id_product"`
IDAddressDelivery int32 `gorm:"column:id_address_delivery;primaryKey" json:"id_address_delivery"`
IDShop int32 `gorm:"column:id_shop;not null;default:1" json:"id_shop"`
IDProductAttribute int32 `gorm:"column:id_product_attribute;primaryKey;index:id_cart_order,priority:4;index:id_product_attribute,priority:1" json:"id_product_attribute"`
IDCustomization int32 `gorm:"column:id_customization;primaryKey" json:"id_customization"`
Quantity int32 `gorm:"column:quantity;not null" json:"quantity"`
DateAdd time.Time `gorm:"column:date_add;not null;index:id_cart_order,priority:2" json:"date_add"`
}
// TableName PsCartProduct's table name
func (*PsCartProduct) TableName() string {
return TableNamePsCartProduct
}
var PsCartProductCols = struct {
IDCart gormcol.Field
IDProduct gormcol.Field
IDAddressDelivery gormcol.Field
IDShop gormcol.Field
IDProductAttribute gormcol.Field
IDCustomization gormcol.Field
Quantity gormcol.Field
DateAdd gormcol.Field
}{
IDCart: gormcol.Field{}.Set((&PsCartProduct{}).TableName(), "id_cart"),
IDProduct: gormcol.Field{}.Set((&PsCartProduct{}).TableName(), "id_product"),
IDAddressDelivery: gormcol.Field{}.Set((&PsCartProduct{}).TableName(), "id_address_delivery"),
IDShop: gormcol.Field{}.Set((&PsCartProduct{}).TableName(), "id_shop"),
IDProductAttribute: gormcol.Field{}.Set((&PsCartProduct{}).TableName(), "id_product_attribute"),
IDCustomization: gormcol.Field{}.Set((&PsCartProduct{}).TableName(), "id_customization"),
Quantity: gormcol.Field{}.Set((&PsCartProduct{}).TableName(), "quantity"),
DateAdd: gormcol.Field{}.Set((&PsCartProduct{}).TableName(), "date_add"),
}

View File

@@ -0,0 +1,122 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsCartRule = "ps_cart_rule"
// PsCartRule mapped from table <ps_cart_rule>
type PsCartRule struct {
IDCartRule int32 `gorm:"column:id_cart_rule;primaryKey;autoIncrement:true" json:"id_cart_rule"`
IDCustomer int32 `gorm:"column:id_customer;not null;index:id_customer,priority:1;index:id_customer_2,priority:1" json:"id_customer"`
DateFrom time.Time `gorm:"column:date_from;not null;index:date_from,priority:1" json:"date_from"`
DateTo time.Time `gorm:"column:date_to;not null;index:date_to,priority:1;index:group_restriction,priority:3;index:group_restriction_2,priority:4;index:id_customer,priority:3;index:id_customer_2,priority:4" json:"date_to"`
Description *string `gorm:"column:description" json:"description"`
Quantity int32 `gorm:"column:quantity;not null" json:"quantity"`
QuantityPerUser int32 `gorm:"column:quantity_per_user;not null" json:"quantity_per_user"`
Priority int32 `gorm:"column:priority;not null;default:1" json:"priority"`
PartialUse bool `gorm:"column:partial_use;not null" json:"partial_use"`
Code string `gorm:"column:code;not null" json:"code"`
MinimumAmount float64 `gorm:"column:minimum_amount;not null;default:0.00" json:"minimum_amount"`
MinimumAmountTax bool `gorm:"column:minimum_amount_tax;not null" json:"minimum_amount_tax"`
MinimumAmountCurrency int32 `gorm:"column:minimum_amount_currency;not null" json:"minimum_amount_currency"`
MinimumAmountShipping bool `gorm:"column:minimum_amount_shipping;not null" json:"minimum_amount_shipping"`
CountryRestriction bool `gorm:"column:country_restriction;not null" json:"country_restriction"`
CarrierRestriction bool `gorm:"column:carrier_restriction;not null" json:"carrier_restriction"`
GroupRestriction bool `gorm:"column:group_restriction;not null;index:group_restriction,priority:1;index:group_restriction_2,priority:1" json:"group_restriction"`
CartRuleRestriction bool `gorm:"column:cart_rule_restriction;not null" json:"cart_rule_restriction"`
ProductRestriction bool `gorm:"column:product_restriction;not null" json:"product_restriction"`
ShopRestriction bool `gorm:"column:shop_restriction;not null" json:"shop_restriction"`
FreeShipping bool `gorm:"column:free_shipping;not null" json:"free_shipping"`
ReductionPercent float64 `gorm:"column:reduction_percent;not null;default:0.00" json:"reduction_percent"`
ReductionAmount float64 `gorm:"column:reduction_amount;not null;default:0.00" json:"reduction_amount"`
ReductionTax bool `gorm:"column:reduction_tax;not null" json:"reduction_tax"`
ReductionCurrency int32 `gorm:"column:reduction_currency;not null" json:"reduction_currency"`
ReductionProduct int32 `gorm:"column:reduction_product;not null" json:"reduction_product"`
ReductionExcludeSpecial bool `gorm:"column:reduction_exclude_special;not null" json:"reduction_exclude_special"`
GiftProduct int32 `gorm:"column:gift_product;not null" json:"gift_product"`
GiftProductAttribute int32 `gorm:"column:gift_product_attribute;not null" json:"gift_product_attribute"`
Highlight bool `gorm:"column:highlight;not null;index:group_restriction_2,priority:3;index:id_customer_2,priority:3" json:"highlight"`
Active bool `gorm:"column:active;not null;index:group_restriction,priority:2;index:group_restriction_2,priority:2;index:id_customer,priority:2;index:id_customer_2,priority:2" json:"active"`
DateAdd time.Time `gorm:"column:date_add;not null" json:"date_add"`
DateUpd time.Time `gorm:"column:date_upd;not null" json:"date_upd"`
}
// TableName PsCartRule's table name
func (*PsCartRule) TableName() string {
return TableNamePsCartRule
}
var PsCartRuleCols = struct {
IDCartRule gormcol.Field
IDCustomer gormcol.Field
DateFrom gormcol.Field
DateTo gormcol.Field
Description gormcol.Field
Quantity gormcol.Field
QuantityPerUser gormcol.Field
Priority gormcol.Field
PartialUse gormcol.Field
Code gormcol.Field
MinimumAmount gormcol.Field
MinimumAmountTax gormcol.Field
MinimumAmountCurrency gormcol.Field
MinimumAmountShipping gormcol.Field
CountryRestriction gormcol.Field
CarrierRestriction gormcol.Field
GroupRestriction gormcol.Field
CartRuleRestriction gormcol.Field
ProductRestriction gormcol.Field
ShopRestriction gormcol.Field
FreeShipping gormcol.Field
ReductionPercent gormcol.Field
ReductionAmount gormcol.Field
ReductionTax gormcol.Field
ReductionCurrency gormcol.Field
ReductionProduct gormcol.Field
ReductionExcludeSpecial gormcol.Field
GiftProduct gormcol.Field
GiftProductAttribute gormcol.Field
Highlight gormcol.Field
Active gormcol.Field
DateAdd gormcol.Field
DateUpd gormcol.Field
}{
IDCartRule: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "id_cart_rule"),
IDCustomer: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "id_customer"),
DateFrom: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "date_from"),
DateTo: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "date_to"),
Description: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "description"),
Quantity: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "quantity"),
QuantityPerUser: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "quantity_per_user"),
Priority: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "priority"),
PartialUse: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "partial_use"),
Code: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "code"),
MinimumAmount: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "minimum_amount"),
MinimumAmountTax: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "minimum_amount_tax"),
MinimumAmountCurrency: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "minimum_amount_currency"),
MinimumAmountShipping: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "minimum_amount_shipping"),
CountryRestriction: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "country_restriction"),
CarrierRestriction: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "carrier_restriction"),
GroupRestriction: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "group_restriction"),
CartRuleRestriction: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "cart_rule_restriction"),
ProductRestriction: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "product_restriction"),
ShopRestriction: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "shop_restriction"),
FreeShipping: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "free_shipping"),
ReductionPercent: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "reduction_percent"),
ReductionAmount: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "reduction_amount"),
ReductionTax: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "reduction_tax"),
ReductionCurrency: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "reduction_currency"),
ReductionProduct: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "reduction_product"),
ReductionExcludeSpecial: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "reduction_exclude_special"),
GiftProduct: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "gift_product"),
GiftProductAttribute: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "gift_product_attribute"),
Highlight: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "highlight"),
Active: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "active"),
DateAdd: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "date_add"),
DateUpd: gormcol.Field{}.Set((&PsCartRule{}).TableName(), "date_upd"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCartRuleCarrier = "ps_cart_rule_carrier"
// PsCartRuleCarrier mapped from table <ps_cart_rule_carrier>
type PsCartRuleCarrier struct {
IDCartRule int32 `gorm:"column:id_cart_rule;primaryKey" json:"id_cart_rule"`
IDCarrier int32 `gorm:"column:id_carrier;primaryKey" json:"id_carrier"`
}
// TableName PsCartRuleCarrier's table name
func (*PsCartRuleCarrier) TableName() string {
return TableNamePsCartRuleCarrier
}
var PsCartRuleCarrierCols = struct {
IDCartRule gormcol.Field
IDCarrier gormcol.Field
}{
IDCartRule: gormcol.Field{}.Set((&PsCartRuleCarrier{}).TableName(), "id_cart_rule"),
IDCarrier: gormcol.Field{}.Set((&PsCartRuleCarrier{}).TableName(), "id_carrier"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCartRuleCombination = "ps_cart_rule_combination"
// PsCartRuleCombination mapped from table <ps_cart_rule_combination>
type PsCartRuleCombination struct {
IDCartRule1 int32 `gorm:"column:id_cart_rule_1;primaryKey;index:id_cart_rule_1,priority:1" json:"id_cart_rule_1"`
IDCartRule2 int32 `gorm:"column:id_cart_rule_2;primaryKey;index:id_cart_rule_2,priority:1" json:"id_cart_rule_2"`
}
// TableName PsCartRuleCombination's table name
func (*PsCartRuleCombination) TableName() string {
return TableNamePsCartRuleCombination
}
var PsCartRuleCombinationCols = struct {
IDCartRule1 gormcol.Field
IDCartRule2 gormcol.Field
}{
IDCartRule1: gormcol.Field{}.Set((&PsCartRuleCombination{}).TableName(), "id_cart_rule_1"),
IDCartRule2: gormcol.Field{}.Set((&PsCartRuleCombination{}).TableName(), "id_cart_rule_2"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCartRuleCountry = "ps_cart_rule_country"
// PsCartRuleCountry mapped from table <ps_cart_rule_country>
type PsCartRuleCountry struct {
IDCartRule int32 `gorm:"column:id_cart_rule;primaryKey" json:"id_cart_rule"`
IDCountry int32 `gorm:"column:id_country;primaryKey" json:"id_country"`
}
// TableName PsCartRuleCountry's table name
func (*PsCartRuleCountry) TableName() string {
return TableNamePsCartRuleCountry
}
var PsCartRuleCountryCols = struct {
IDCartRule gormcol.Field
IDCountry gormcol.Field
}{
IDCartRule: gormcol.Field{}.Set((&PsCartRuleCountry{}).TableName(), "id_cart_rule"),
IDCountry: gormcol.Field{}.Set((&PsCartRuleCountry{}).TableName(), "id_country"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCartRuleGroup = "ps_cart_rule_group"
// PsCartRuleGroup mapped from table <ps_cart_rule_group>
type PsCartRuleGroup struct {
IDCartRule int32 `gorm:"column:id_cart_rule;primaryKey" json:"id_cart_rule"`
IDGroup int32 `gorm:"column:id_group;primaryKey" json:"id_group"`
}
// TableName PsCartRuleGroup's table name
func (*PsCartRuleGroup) TableName() string {
return TableNamePsCartRuleGroup
}
var PsCartRuleGroupCols = struct {
IDCartRule gormcol.Field
IDGroup gormcol.Field
}{
IDCartRule: gormcol.Field{}.Set((&PsCartRuleGroup{}).TableName(), "id_cart_rule"),
IDGroup: gormcol.Field{}.Set((&PsCartRuleGroup{}).TableName(), "id_group"),
}

View File

@@ -0,0 +1,29 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCartRuleLang = "ps_cart_rule_lang"
// PsCartRuleLang mapped from table <ps_cart_rule_lang>
type PsCartRuleLang struct {
IDCartRule int32 `gorm:"column:id_cart_rule;primaryKey" json:"id_cart_rule"`
IDLang int32 `gorm:"column:id_lang;primaryKey" json:"id_lang"`
Name string `gorm:"column:name;not null" json:"name"`
}
// TableName PsCartRuleLang's table name
func (*PsCartRuleLang) TableName() string {
return TableNamePsCartRuleLang
}
var PsCartRuleLangCols = struct {
IDCartRule gormcol.Field
IDLang gormcol.Field
Name gormcol.Field
}{
IDCartRule: gormcol.Field{}.Set((&PsCartRuleLang{}).TableName(), "id_cart_rule"),
IDLang: gormcol.Field{}.Set((&PsCartRuleLang{}).TableName(), "id_lang"),
Name: gormcol.Field{}.Set((&PsCartRuleLang{}).TableName(), "name"),
}

View File

@@ -0,0 +1,29 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCartRuleProductRule = "ps_cart_rule_product_rule"
// PsCartRuleProductRule mapped from table <ps_cart_rule_product_rule>
type PsCartRuleProductRule struct {
IDProductRule int32 `gorm:"column:id_product_rule;primaryKey;autoIncrement:true" json:"id_product_rule"`
IDProductRuleGroup int32 `gorm:"column:id_product_rule_group;not null" json:"id_product_rule_group"`
Type string `gorm:"column:type;not null" json:"type"`
}
// TableName PsCartRuleProductRule's table name
func (*PsCartRuleProductRule) TableName() string {
return TableNamePsCartRuleProductRule
}
var PsCartRuleProductRuleCols = struct {
IDProductRule gormcol.Field
IDProductRuleGroup gormcol.Field
Type gormcol.Field
}{
IDProductRule: gormcol.Field{}.Set((&PsCartRuleProductRule{}).TableName(), "id_product_rule"),
IDProductRuleGroup: gormcol.Field{}.Set((&PsCartRuleProductRule{}).TableName(), "id_product_rule_group"),
Type: gormcol.Field{}.Set((&PsCartRuleProductRule{}).TableName(), "type"),
}

View File

@@ -0,0 +1,29 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCartRuleProductRuleGroup = "ps_cart_rule_product_rule_group"
// PsCartRuleProductRuleGroup mapped from table <ps_cart_rule_product_rule_group>
type PsCartRuleProductRuleGroup struct {
IDProductRuleGroup int32 `gorm:"column:id_product_rule_group;primaryKey;autoIncrement:true" json:"id_product_rule_group"`
IDCartRule int32 `gorm:"column:id_cart_rule;not null" json:"id_cart_rule"`
Quantity int32 `gorm:"column:quantity;not null;default:1" json:"quantity"`
}
// TableName PsCartRuleProductRuleGroup's table name
func (*PsCartRuleProductRuleGroup) TableName() string {
return TableNamePsCartRuleProductRuleGroup
}
var PsCartRuleProductRuleGroupCols = struct {
IDProductRuleGroup gormcol.Field
IDCartRule gormcol.Field
Quantity gormcol.Field
}{
IDProductRuleGroup: gormcol.Field{}.Set((&PsCartRuleProductRuleGroup{}).TableName(), "id_product_rule_group"),
IDCartRule: gormcol.Field{}.Set((&PsCartRuleProductRuleGroup{}).TableName(), "id_cart_rule"),
Quantity: gormcol.Field{}.Set((&PsCartRuleProductRuleGroup{}).TableName(), "quantity"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCartRuleProductRuleValue = "ps_cart_rule_product_rule_value"
// PsCartRuleProductRuleValue mapped from table <ps_cart_rule_product_rule_value>
type PsCartRuleProductRuleValue struct {
IDProductRule int32 `gorm:"column:id_product_rule;primaryKey" json:"id_product_rule"`
IDItem int32 `gorm:"column:id_item;primaryKey" json:"id_item"`
}
// TableName PsCartRuleProductRuleValue's table name
func (*PsCartRuleProductRuleValue) TableName() string {
return TableNamePsCartRuleProductRuleValue
}
var PsCartRuleProductRuleValueCols = struct {
IDProductRule gormcol.Field
IDItem gormcol.Field
}{
IDProductRule: gormcol.Field{}.Set((&PsCartRuleProductRuleValue{}).TableName(), "id_product_rule"),
IDItem: gormcol.Field{}.Set((&PsCartRuleProductRuleValue{}).TableName(), "id_item"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCartRuleShop = "ps_cart_rule_shop"
// PsCartRuleShop mapped from table <ps_cart_rule_shop>
type PsCartRuleShop struct {
IDCartRule int32 `gorm:"column:id_cart_rule;primaryKey" json:"id_cart_rule"`
IDShop int32 `gorm:"column:id_shop;primaryKey" json:"id_shop"`
}
// TableName PsCartRuleShop's table name
func (*PsCartRuleShop) TableName() string {
return TableNamePsCartRuleShop
}
var PsCartRuleShopCols = struct {
IDCartRule gormcol.Field
IDShop gormcol.Field
}{
IDCartRule: gormcol.Field{}.Set((&PsCartRuleShop{}).TableName(), "id_cart_rule"),
IDShop: gormcol.Field{}.Set((&PsCartRuleShop{}).TableName(), "id_shop"),
}

View File

@@ -0,0 +1,56 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsCategory = "ps_category"
// PsCategory mapped from table <ps_category>
type PsCategory struct {
IDCategory int32 `gorm:"column:id_category;primaryKey;autoIncrement:true;index:idx_category,priority:1" json:"id_category"`
IDParent int32 `gorm:"column:id_parent;not null;index:category_parent,priority:1" json:"id_parent"`
IDShopDefault int32 `gorm:"column:id_shop_default;not null;default:1" json:"id_shop_default"`
LevelDepth int32 `gorm:"column:level_depth;not null;index:level_depth,priority:1" json:"level_depth"`
Nleft int32 `gorm:"column:nleft;not null;index:activenleft,priority:2;index:idx_category,priority:3;index:nleftrightactive,priority:1" json:"nleft"`
Nright int32 `gorm:"column:nright;not null;index:activenright,priority:2;index:idx_category,priority:4;index:nleftrightactive,priority:2;index:nright,priority:1" json:"nright"`
Active bool `gorm:"column:active;not null;index:activenleft,priority:1;index:activenright,priority:1;index:idx_category,priority:2;index:idx_ps_category_active,priority:1;index:nleftrightactive,priority:3" json:"active"`
DateAdd time.Time `gorm:"column:date_add;not null" json:"date_add"`
DateUpd time.Time `gorm:"column:date_upd;not null" json:"date_upd"`
Position int32 `gorm:"column:position;not null" json:"position"`
IsRootCategory bool `gorm:"column:is_root_category;not null" json:"is_root_category"`
}
// TableName PsCategory's table name
func (*PsCategory) TableName() string {
return TableNamePsCategory
}
var PsCategoryCols = struct {
IDCategory gormcol.Field
IDParent gormcol.Field
IDShopDefault gormcol.Field
LevelDepth gormcol.Field
Nleft gormcol.Field
Nright gormcol.Field
Active gormcol.Field
DateAdd gormcol.Field
DateUpd gormcol.Field
Position gormcol.Field
IsRootCategory gormcol.Field
}{
IDCategory: gormcol.Field{}.Set((&PsCategory{}).TableName(), "id_category"),
IDParent: gormcol.Field{}.Set((&PsCategory{}).TableName(), "id_parent"),
IDShopDefault: gormcol.Field{}.Set((&PsCategory{}).TableName(), "id_shop_default"),
LevelDepth: gormcol.Field{}.Set((&PsCategory{}).TableName(), "level_depth"),
Nleft: gormcol.Field{}.Set((&PsCategory{}).TableName(), "nleft"),
Nright: gormcol.Field{}.Set((&PsCategory{}).TableName(), "nright"),
Active: gormcol.Field{}.Set((&PsCategory{}).TableName(), "active"),
DateAdd: gormcol.Field{}.Set((&PsCategory{}).TableName(), "date_add"),
DateUpd: gormcol.Field{}.Set((&PsCategory{}).TableName(), "date_upd"),
Position: gormcol.Field{}.Set((&PsCategory{}).TableName(), "position"),
IsRootCategory: gormcol.Field{}.Set((&PsCategory{}).TableName(), "is_root_category"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCategoryGroup = "ps_category_group"
// PsCategoryGroup mapped from table <ps_category_group>
type PsCategoryGroup struct {
IDCategory int32 `gorm:"column:id_category;primaryKey;index:id_category,priority:1" json:"id_category"`
IDGroup int32 `gorm:"column:id_group;primaryKey;index:id_group,priority:1" json:"id_group"`
}
// TableName PsCategoryGroup's table name
func (*PsCategoryGroup) TableName() string {
return TableNamePsCategoryGroup
}
var PsCategoryGroupCols = struct {
IDCategory gormcol.Field
IDGroup gormcol.Field
}{
IDCategory: gormcol.Field{}.Set((&PsCategoryGroup{}).TableName(), "id_category"),
IDGroup: gormcol.Field{}.Set((&PsCategoryGroup{}).TableName(), "id_group"),
}

View File

@@ -0,0 +1,47 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCategoryLang = "ps_category_lang"
// PsCategoryLang mapped from table <ps_category_lang>
type PsCategoryLang struct {
IDCategory int32 `gorm:"column:id_category;primaryKey" json:"id_category"`
IDShop int32 `gorm:"column:id_shop;primaryKey;default:1" json:"id_shop"`
IDLang int32 `gorm:"column:id_lang;primaryKey" json:"id_lang"`
Name string `gorm:"column:name;not null;index:category_name,priority:1" json:"name"`
Description *string `gorm:"column:description" json:"description"`
LinkRewrite string `gorm:"column:link_rewrite;not null" json:"link_rewrite"`
MetaTitle *string `gorm:"column:meta_title" json:"meta_title"`
MetaKeywords *string `gorm:"column:meta_keywords" json:"meta_keywords"`
MetaDescription *string `gorm:"column:meta_description" json:"meta_description"`
}
// TableName PsCategoryLang's table name
func (*PsCategoryLang) TableName() string {
return TableNamePsCategoryLang
}
var PsCategoryLangCols = struct {
IDCategory gormcol.Field
IDShop gormcol.Field
IDLang gormcol.Field
Name gormcol.Field
Description gormcol.Field
LinkRewrite gormcol.Field
MetaTitle gormcol.Field
MetaKeywords gormcol.Field
MetaDescription gormcol.Field
}{
IDCategory: gormcol.Field{}.Set((&PsCategoryLang{}).TableName(), "id_category"),
IDShop: gormcol.Field{}.Set((&PsCategoryLang{}).TableName(), "id_shop"),
IDLang: gormcol.Field{}.Set((&PsCategoryLang{}).TableName(), "id_lang"),
Name: gormcol.Field{}.Set((&PsCategoryLang{}).TableName(), "name"),
Description: gormcol.Field{}.Set((&PsCategoryLang{}).TableName(), "description"),
LinkRewrite: gormcol.Field{}.Set((&PsCategoryLang{}).TableName(), "link_rewrite"),
MetaTitle: gormcol.Field{}.Set((&PsCategoryLang{}).TableName(), "meta_title"),
MetaKeywords: gormcol.Field{}.Set((&PsCategoryLang{}).TableName(), "meta_keywords"),
MetaDescription: gormcol.Field{}.Set((&PsCategoryLang{}).TableName(), "meta_description"),
}

View File

@@ -0,0 +1,29 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCategoryProduct = "ps_category_product"
// PsCategoryProduct mapped from table <ps_category_product>
type PsCategoryProduct struct {
IDCategory int32 `gorm:"column:id_category;primaryKey;index:idx_category_product,priority:2;index:id_category,priority:1" json:"id_category"`
IDProduct int32 `gorm:"column:id_product;primaryKey;index:idx_category_product,priority:1;index:id_product,priority:1" json:"id_product"`
Position int32 `gorm:"column:position;not null;index:id_category,priority:2" json:"position"`
}
// TableName PsCategoryProduct's table name
func (*PsCategoryProduct) TableName() string {
return TableNamePsCategoryProduct
}
var PsCategoryProductCols = struct {
IDCategory gormcol.Field
IDProduct gormcol.Field
Position gormcol.Field
}{
IDCategory: gormcol.Field{}.Set((&PsCategoryProduct{}).TableName(), "id_category"),
IDProduct: gormcol.Field{}.Set((&PsCategoryProduct{}).TableName(), "id_product"),
Position: gormcol.Field{}.Set((&PsCategoryProduct{}).TableName(), "position"),
}

View File

@@ -0,0 +1,29 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCategoryShop = "ps_category_shop"
// PsCategoryShop mapped from table <ps_category_shop>
type PsCategoryShop struct {
IDCategory int32 `gorm:"column:id_category;primaryKey" json:"id_category"`
IDShop int32 `gorm:"column:id_shop;primaryKey" json:"id_shop"`
Position int32 `gorm:"column:position;not null" json:"position"`
}
// TableName PsCategoryShop's table name
func (*PsCategoryShop) TableName() string {
return TableNamePsCategoryShop
}
var PsCategoryShopCols = struct {
IDCategory gormcol.Field
IDShop gormcol.Field
Position gormcol.Field
}{
IDCategory: gormcol.Field{}.Set((&PsCategoryShop{}).TableName(), "id_category"),
IDShop: gormcol.Field{}.Set((&PsCategoryShop{}).TableName(), "id_shop"),
Position: gormcol.Field{}.Set((&PsCategoryShop{}).TableName(), "position"),
}

View File

@@ -0,0 +1,35 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCm = "ps_cms"
// PsCm mapped from table <ps_cms>
type PsCm struct {
IDCms int32 `gorm:"column:id_cms;primaryKey;autoIncrement:true" json:"id_cms"`
IDCmsCategory int32 `gorm:"column:id_cms_category;not null" json:"id_cms_category"`
Position int32 `gorm:"column:position;not null" json:"position"`
Active bool `gorm:"column:active;not null" json:"active"`
Indexation bool `gorm:"column:indexation;not null;default:1" json:"indexation"`
}
// TableName PsCm's table name
func (*PsCm) TableName() string {
return TableNamePsCm
}
var PsCmCols = struct {
IDCms gormcol.Field
IDCmsCategory gormcol.Field
Position gormcol.Field
Active gormcol.Field
Indexation gormcol.Field
}{
IDCms: gormcol.Field{}.Set((&PsCm{}).TableName(), "id_cms"),
IDCmsCategory: gormcol.Field{}.Set((&PsCm{}).TableName(), "id_cms_category"),
Position: gormcol.Field{}.Set((&PsCm{}).TableName(), "position"),
Active: gormcol.Field{}.Set((&PsCm{}).TableName(), "active"),
Indexation: gormcol.Field{}.Set((&PsCm{}).TableName(), "indexation"),
}

View File

@@ -0,0 +1,44 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsCmsCategory = "ps_cms_category"
// PsCmsCategory mapped from table <ps_cms_category>
type PsCmsCategory struct {
IDCmsCategory int32 `gorm:"column:id_cms_category;primaryKey;autoIncrement:true" json:"id_cms_category"`
IDParent int32 `gorm:"column:id_parent;not null;index:category_parent,priority:1" json:"id_parent"`
LevelDepth int32 `gorm:"column:level_depth;not null" json:"level_depth"`
Active bool `gorm:"column:active;not null" json:"active"`
DateAdd time.Time `gorm:"column:date_add;not null" json:"date_add"`
DateUpd time.Time `gorm:"column:date_upd;not null" json:"date_upd"`
Position int32 `gorm:"column:position;not null" json:"position"`
}
// TableName PsCmsCategory's table name
func (*PsCmsCategory) TableName() string {
return TableNamePsCmsCategory
}
var PsCmsCategoryCols = struct {
IDCmsCategory gormcol.Field
IDParent gormcol.Field
LevelDepth gormcol.Field
Active gormcol.Field
DateAdd gormcol.Field
DateUpd gormcol.Field
Position gormcol.Field
}{
IDCmsCategory: gormcol.Field{}.Set((&PsCmsCategory{}).TableName(), "id_cms_category"),
IDParent: gormcol.Field{}.Set((&PsCmsCategory{}).TableName(), "id_parent"),
LevelDepth: gormcol.Field{}.Set((&PsCmsCategory{}).TableName(), "level_depth"),
Active: gormcol.Field{}.Set((&PsCmsCategory{}).TableName(), "active"),
DateAdd: gormcol.Field{}.Set((&PsCmsCategory{}).TableName(), "date_add"),
DateUpd: gormcol.Field{}.Set((&PsCmsCategory{}).TableName(), "date_upd"),
Position: gormcol.Field{}.Set((&PsCmsCategory{}).TableName(), "position"),
}

View File

@@ -0,0 +1,47 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCmsCategoryLang = "ps_cms_category_lang"
// PsCmsCategoryLang mapped from table <ps_cms_category_lang>
type PsCmsCategoryLang struct {
IDCmsCategory int32 `gorm:"column:id_cms_category;primaryKey" json:"id_cms_category"`
IDLang int32 `gorm:"column:id_lang;primaryKey" json:"id_lang"`
IDShop int32 `gorm:"column:id_shop;primaryKey;default:1" json:"id_shop"`
Name string `gorm:"column:name;not null;index:category_name,priority:1" json:"name"`
Description *string `gorm:"column:description" json:"description"`
LinkRewrite string `gorm:"column:link_rewrite;not null" json:"link_rewrite"`
MetaTitle *string `gorm:"column:meta_title" json:"meta_title"`
MetaKeywords *string `gorm:"column:meta_keywords" json:"meta_keywords"`
MetaDescription *string `gorm:"column:meta_description" json:"meta_description"`
}
// TableName PsCmsCategoryLang's table name
func (*PsCmsCategoryLang) TableName() string {
return TableNamePsCmsCategoryLang
}
var PsCmsCategoryLangCols = struct {
IDCmsCategory gormcol.Field
IDLang gormcol.Field
IDShop gormcol.Field
Name gormcol.Field
Description gormcol.Field
LinkRewrite gormcol.Field
MetaTitle gormcol.Field
MetaKeywords gormcol.Field
MetaDescription gormcol.Field
}{
IDCmsCategory: gormcol.Field{}.Set((&PsCmsCategoryLang{}).TableName(), "id_cms_category"),
IDLang: gormcol.Field{}.Set((&PsCmsCategoryLang{}).TableName(), "id_lang"),
IDShop: gormcol.Field{}.Set((&PsCmsCategoryLang{}).TableName(), "id_shop"),
Name: gormcol.Field{}.Set((&PsCmsCategoryLang{}).TableName(), "name"),
Description: gormcol.Field{}.Set((&PsCmsCategoryLang{}).TableName(), "description"),
LinkRewrite: gormcol.Field{}.Set((&PsCmsCategoryLang{}).TableName(), "link_rewrite"),
MetaTitle: gormcol.Field{}.Set((&PsCmsCategoryLang{}).TableName(), "meta_title"),
MetaKeywords: gormcol.Field{}.Set((&PsCmsCategoryLang{}).TableName(), "meta_keywords"),
MetaDescription: gormcol.Field{}.Set((&PsCmsCategoryLang{}).TableName(), "meta_description"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCmsCategoryShop = "ps_cms_category_shop"
// PsCmsCategoryShop mapped from table <ps_cms_category_shop>
type PsCmsCategoryShop struct {
IDCmsCategory int32 `gorm:"column:id_cms_category;primaryKey;autoIncrement:true" json:"id_cms_category"`
IDShop int32 `gorm:"column:id_shop;primaryKey;index:id_shop,priority:1" json:"id_shop"`
}
// TableName PsCmsCategoryShop's table name
func (*PsCmsCategoryShop) TableName() string {
return TableNamePsCmsCategoryShop
}
var PsCmsCategoryShopCols = struct {
IDCmsCategory gormcol.Field
IDShop gormcol.Field
}{
IDCmsCategory: gormcol.Field{}.Set((&PsCmsCategoryShop{}).TableName(), "id_cms_category"),
IDShop: gormcol.Field{}.Set((&PsCmsCategoryShop{}).TableName(), "id_shop"),
}

View File

@@ -0,0 +1,47 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCmsLang = "ps_cms_lang"
// PsCmsLang mapped from table <ps_cms_lang>
type PsCmsLang struct {
IDCms int32 `gorm:"column:id_cms;primaryKey" json:"id_cms"`
IDLang int32 `gorm:"column:id_lang;primaryKey" json:"id_lang"`
IDShop int32 `gorm:"column:id_shop;primaryKey;default:1" json:"id_shop"`
MetaTitle string `gorm:"column:meta_title;not null" json:"meta_title"`
HeadSeoTitle *string `gorm:"column:head_seo_title" json:"head_seo_title"`
MetaDescription *string `gorm:"column:meta_description" json:"meta_description"`
MetaKeywords *string `gorm:"column:meta_keywords" json:"meta_keywords"`
Content *string `gorm:"column:content" json:"content"`
LinkRewrite string `gorm:"column:link_rewrite;not null" json:"link_rewrite"`
}
// TableName PsCmsLang's table name
func (*PsCmsLang) TableName() string {
return TableNamePsCmsLang
}
var PsCmsLangCols = struct {
IDCms gormcol.Field
IDLang gormcol.Field
IDShop gormcol.Field
MetaTitle gormcol.Field
HeadSeoTitle gormcol.Field
MetaDescription gormcol.Field
MetaKeywords gormcol.Field
Content gormcol.Field
LinkRewrite gormcol.Field
}{
IDCms: gormcol.Field{}.Set((&PsCmsLang{}).TableName(), "id_cms"),
IDLang: gormcol.Field{}.Set((&PsCmsLang{}).TableName(), "id_lang"),
IDShop: gormcol.Field{}.Set((&PsCmsLang{}).TableName(), "id_shop"),
MetaTitle: gormcol.Field{}.Set((&PsCmsLang{}).TableName(), "meta_title"),
HeadSeoTitle: gormcol.Field{}.Set((&PsCmsLang{}).TableName(), "head_seo_title"),
MetaDescription: gormcol.Field{}.Set((&PsCmsLang{}).TableName(), "meta_description"),
MetaKeywords: gormcol.Field{}.Set((&PsCmsLang{}).TableName(), "meta_keywords"),
Content: gormcol.Field{}.Set((&PsCmsLang{}).TableName(), "content"),
LinkRewrite: gormcol.Field{}.Set((&PsCmsLang{}).TableName(), "link_rewrite"),
}

View File

@@ -0,0 +1,29 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCmsRole = "ps_cms_role"
// PsCmsRole mapped from table <ps_cms_role>
type PsCmsRole struct {
IDCmsRole int32 `gorm:"column:id_cms_role;primaryKey;autoIncrement:true" json:"id_cms_role"`
Name string `gorm:"column:name;not null;uniqueIndex:name,priority:1" json:"name"`
IDCms int32 `gorm:"column:id_cms;primaryKey" json:"id_cms"`
}
// TableName PsCmsRole's table name
func (*PsCmsRole) TableName() string {
return TableNamePsCmsRole
}
var PsCmsRoleCols = struct {
IDCmsRole gormcol.Field
Name gormcol.Field
IDCms gormcol.Field
}{
IDCmsRole: gormcol.Field{}.Set((&PsCmsRole{}).TableName(), "id_cms_role"),
Name: gormcol.Field{}.Set((&PsCmsRole{}).TableName(), "name"),
IDCms: gormcol.Field{}.Set((&PsCmsRole{}).TableName(), "id_cms"),
}

View File

@@ -0,0 +1,32 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCmsRoleLang = "ps_cms_role_lang"
// PsCmsRoleLang mapped from table <ps_cms_role_lang>
type PsCmsRoleLang struct {
IDCmsRole int32 `gorm:"column:id_cms_role;primaryKey" json:"id_cms_role"`
IDLang int32 `gorm:"column:id_lang;primaryKey" json:"id_lang"`
IDShop int32 `gorm:"column:id_shop;primaryKey" json:"id_shop"`
Name *string `gorm:"column:name" json:"name"`
}
// TableName PsCmsRoleLang's table name
func (*PsCmsRoleLang) TableName() string {
return TableNamePsCmsRoleLang
}
var PsCmsRoleLangCols = struct {
IDCmsRole gormcol.Field
IDLang gormcol.Field
IDShop gormcol.Field
Name gormcol.Field
}{
IDCmsRole: gormcol.Field{}.Set((&PsCmsRoleLang{}).TableName(), "id_cms_role"),
IDLang: gormcol.Field{}.Set((&PsCmsRoleLang{}).TableName(), "id_lang"),
IDShop: gormcol.Field{}.Set((&PsCmsRoleLang{}).TableName(), "id_shop"),
Name: gormcol.Field{}.Set((&PsCmsRoleLang{}).TableName(), "name"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsCmsShop = "ps_cms_shop"
// PsCmsShop mapped from table <ps_cms_shop>
type PsCmsShop struct {
IDCms int32 `gorm:"column:id_cms;primaryKey" json:"id_cms"`
IDShop int32 `gorm:"column:id_shop;primaryKey;index:id_shop,priority:1" json:"id_shop"`
}
// TableName PsCmsShop's table name
func (*PsCmsShop) TableName() string {
return TableNamePsCmsShop
}
var PsCmsShopCols = struct {
IDCms gormcol.Field
IDShop gormcol.Field
}{
IDCms: gormcol.Field{}.Set((&PsCmsShop{}).TableName(), "id_cms"),
IDShop: gormcol.Field{}.Set((&PsCmsShop{}).TableName(), "id_shop"),
}

View File

@@ -0,0 +1,59 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsCondition = "ps_condition"
// PsCondition mapped from table <ps_condition>
type PsCondition struct {
IDCondition int32 `gorm:"column:id_condition;primaryKey;autoIncrement:true" json:"id_condition"`
IDPsCondition int32 `gorm:"column:id_ps_condition;primaryKey" json:"id_ps_condition"`
Type string `gorm:"column:type;not null" json:"type"`
Request *string `gorm:"column:request" json:"request"`
Operator *string `gorm:"column:operator" json:"operator"`
Value *string `gorm:"column:value" json:"value"`
Result *string `gorm:"column:result" json:"result"`
CalculationType *string `gorm:"column:calculation_type" json:"calculation_type"`
CalculationDetail *string `gorm:"column:calculation_detail" json:"calculation_detail"`
Validated bool `gorm:"column:validated;not null" json:"validated"`
DateAdd time.Time `gorm:"column:date_add;not null" json:"date_add"`
DateUpd time.Time `gorm:"column:date_upd;not null" json:"date_upd"`
}
// TableName PsCondition's table name
func (*PsCondition) TableName() string {
return TableNamePsCondition
}
var PsConditionCols = struct {
IDCondition gormcol.Field
IDPsCondition gormcol.Field
Type gormcol.Field
Request gormcol.Field
Operator gormcol.Field
Value gormcol.Field
Result gormcol.Field
CalculationType gormcol.Field
CalculationDetail gormcol.Field
Validated gormcol.Field
DateAdd gormcol.Field
DateUpd gormcol.Field
}{
IDCondition: gormcol.Field{}.Set((&PsCondition{}).TableName(), "id_condition"),
IDPsCondition: gormcol.Field{}.Set((&PsCondition{}).TableName(), "id_ps_condition"),
Type: gormcol.Field{}.Set((&PsCondition{}).TableName(), "type"),
Request: gormcol.Field{}.Set((&PsCondition{}).TableName(), "request"),
Operator: gormcol.Field{}.Set((&PsCondition{}).TableName(), "operator"),
Value: gormcol.Field{}.Set((&PsCondition{}).TableName(), "value"),
Result: gormcol.Field{}.Set((&PsCondition{}).TableName(), "result"),
CalculationType: gormcol.Field{}.Set((&PsCondition{}).TableName(), "calculation_type"),
CalculationDetail: gormcol.Field{}.Set((&PsCondition{}).TableName(), "calculation_detail"),
Validated: gormcol.Field{}.Set((&PsCondition{}).TableName(), "validated"),
DateAdd: gormcol.Field{}.Set((&PsCondition{}).TableName(), "date_add"),
DateUpd: gormcol.Field{}.Set((&PsCondition{}).TableName(), "date_upd"),
}

View File

@@ -0,0 +1,29 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsConditionAdvice = "ps_condition_advice"
// PsConditionAdvice mapped from table <ps_condition_advice>
type PsConditionAdvice struct {
IDCondition int32 `gorm:"column:id_condition;primaryKey" json:"id_condition"`
IDAdvice int32 `gorm:"column:id_advice;primaryKey" json:"id_advice"`
Display bool `gorm:"column:display;not null" json:"display"`
}
// TableName PsConditionAdvice's table name
func (*PsConditionAdvice) TableName() string {
return TableNamePsConditionAdvice
}
var PsConditionAdviceCols = struct {
IDCondition gormcol.Field
IDAdvice gormcol.Field
Display gormcol.Field
}{
IDCondition: gormcol.Field{}.Set((&PsConditionAdvice{}).TableName(), "id_condition"),
IDAdvice: gormcol.Field{}.Set((&PsConditionAdvice{}).TableName(), "id_advice"),
Display: gormcol.Field{}.Set((&PsConditionAdvice{}).TableName(), "display"),
}

View File

@@ -0,0 +1,26 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsConditionBadge = "ps_condition_badge"
// PsConditionBadge mapped from table <ps_condition_badge>
type PsConditionBadge struct {
IDCondition int32 `gorm:"column:id_condition;primaryKey" json:"id_condition"`
IDBadge int32 `gorm:"column:id_badge;primaryKey" json:"id_badge"`
}
// TableName PsConditionBadge's table name
func (*PsConditionBadge) TableName() string {
return TableNamePsConditionBadge
}
var PsConditionBadgeCols = struct {
IDCondition gormcol.Field
IDBadge gormcol.Field
}{
IDCondition: gormcol.Field{}.Set((&PsConditionBadge{}).TableName(), "id_condition"),
IDBadge: gormcol.Field{}.Set((&PsConditionBadge{}).TableName(), "id_badge"),
}

View File

@@ -0,0 +1,44 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsConfiguration = "ps_configuration"
// PsConfiguration mapped from table <ps_configuration>
type PsConfiguration struct {
IDConfiguration int32 `gorm:"column:id_configuration;primaryKey;autoIncrement:true" json:"id_configuration"`
IDShopGroup *int32 `gorm:"column:id_shop_group;index:id_shop_group,priority:1" json:"id_shop_group"`
IDShop *int32 `gorm:"column:id_shop;index:id_shop,priority:1" json:"id_shop"`
Name string `gorm:"column:name;not null;index:name,priority:1" json:"name"`
Value *string `gorm:"column:value" json:"value"`
DateAdd time.Time `gorm:"column:date_add;not null" json:"date_add"`
DateUpd time.Time `gorm:"column:date_upd;not null" json:"date_upd"`
}
// TableName PsConfiguration's table name
func (*PsConfiguration) TableName() string {
return TableNamePsConfiguration
}
var PsConfigurationCols = struct {
IDConfiguration gormcol.Field
IDShopGroup gormcol.Field
IDShop gormcol.Field
Name gormcol.Field
Value gormcol.Field
DateAdd gormcol.Field
DateUpd gormcol.Field
}{
IDConfiguration: gormcol.Field{}.Set((&PsConfiguration{}).TableName(), "id_configuration"),
IDShopGroup: gormcol.Field{}.Set((&PsConfiguration{}).TableName(), "id_shop_group"),
IDShop: gormcol.Field{}.Set((&PsConfiguration{}).TableName(), "id_shop"),
Name: gormcol.Field{}.Set((&PsConfiguration{}).TableName(), "name"),
Value: gormcol.Field{}.Set((&PsConfiguration{}).TableName(), "value"),
DateAdd: gormcol.Field{}.Set((&PsConfiguration{}).TableName(), "date_add"),
DateUpd: gormcol.Field{}.Set((&PsConfiguration{}).TableName(), "date_upd"),
}

View File

@@ -0,0 +1,44 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsConfigurationKpi = "ps_configuration_kpi"
// PsConfigurationKpi mapped from table <ps_configuration_kpi>
type PsConfigurationKpi struct {
IDConfigurationKpi int32 `gorm:"column:id_configuration_kpi;primaryKey;autoIncrement:true" json:"id_configuration_kpi"`
IDShopGroup *int32 `gorm:"column:id_shop_group;index:id_shop_group,priority:1" json:"id_shop_group"`
IDShop *int32 `gorm:"column:id_shop;index:id_shop,priority:1" json:"id_shop"`
Name string `gorm:"column:name;not null;index:name,priority:1" json:"name"`
Value *string `gorm:"column:value" json:"value"`
DateAdd time.Time `gorm:"column:date_add;not null" json:"date_add"`
DateUpd time.Time `gorm:"column:date_upd;not null" json:"date_upd"`
}
// TableName PsConfigurationKpi's table name
func (*PsConfigurationKpi) TableName() string {
return TableNamePsConfigurationKpi
}
var PsConfigurationKpiCols = struct {
IDConfigurationKpi gormcol.Field
IDShopGroup gormcol.Field
IDShop gormcol.Field
Name gormcol.Field
Value gormcol.Field
DateAdd gormcol.Field
DateUpd gormcol.Field
}{
IDConfigurationKpi: gormcol.Field{}.Set((&PsConfigurationKpi{}).TableName(), "id_configuration_kpi"),
IDShopGroup: gormcol.Field{}.Set((&PsConfigurationKpi{}).TableName(), "id_shop_group"),
IDShop: gormcol.Field{}.Set((&PsConfigurationKpi{}).TableName(), "id_shop"),
Name: gormcol.Field{}.Set((&PsConfigurationKpi{}).TableName(), "name"),
Value: gormcol.Field{}.Set((&PsConfigurationKpi{}).TableName(), "value"),
DateAdd: gormcol.Field{}.Set((&PsConfigurationKpi{}).TableName(), "date_add"),
DateUpd: gormcol.Field{}.Set((&PsConfigurationKpi{}).TableName(), "date_upd"),
}

View File

@@ -0,0 +1,35 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsConfigurationKpiLang = "ps_configuration_kpi_lang"
// PsConfigurationKpiLang mapped from table <ps_configuration_kpi_lang>
type PsConfigurationKpiLang struct {
IDConfigurationKpi int32 `gorm:"column:id_configuration_kpi;primaryKey" json:"id_configuration_kpi"`
IDLang int32 `gorm:"column:id_lang;primaryKey" json:"id_lang"`
Value *string `gorm:"column:value" json:"value"`
DateUpd *time.Time `gorm:"column:date_upd" json:"date_upd"`
}
// TableName PsConfigurationKpiLang's table name
func (*PsConfigurationKpiLang) TableName() string {
return TableNamePsConfigurationKpiLang
}
var PsConfigurationKpiLangCols = struct {
IDConfigurationKpi gormcol.Field
IDLang gormcol.Field
Value gormcol.Field
DateUpd gormcol.Field
}{
IDConfigurationKpi: gormcol.Field{}.Set((&PsConfigurationKpiLang{}).TableName(), "id_configuration_kpi"),
IDLang: gormcol.Field{}.Set((&PsConfigurationKpiLang{}).TableName(), "id_lang"),
Value: gormcol.Field{}.Set((&PsConfigurationKpiLang{}).TableName(), "value"),
DateUpd: gormcol.Field{}.Set((&PsConfigurationKpiLang{}).TableName(), "date_upd"),
}

View File

@@ -0,0 +1,35 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsConfigurationLang = "ps_configuration_lang"
// PsConfigurationLang mapped from table <ps_configuration_lang>
type PsConfigurationLang struct {
IDConfiguration int32 `gorm:"column:id_configuration;primaryKey" json:"id_configuration"`
IDLang int32 `gorm:"column:id_lang;primaryKey" json:"id_lang"`
Value *string `gorm:"column:value" json:"value"`
DateUpd *time.Time `gorm:"column:date_upd" json:"date_upd"`
}
// TableName PsConfigurationLang's table name
func (*PsConfigurationLang) TableName() string {
return TableNamePsConfigurationLang
}
var PsConfigurationLangCols = struct {
IDConfiguration gormcol.Field
IDLang gormcol.Field
Value gormcol.Field
DateUpd gormcol.Field
}{
IDConfiguration: gormcol.Field{}.Set((&PsConfigurationLang{}).TableName(), "id_configuration"),
IDLang: gormcol.Field{}.Set((&PsConfigurationLang{}).TableName(), "id_lang"),
Value: gormcol.Field{}.Set((&PsConfigurationLang{}).TableName(), "value"),
DateUpd: gormcol.Field{}.Set((&PsConfigurationLang{}).TableName(), "date_upd"),
}

View File

@@ -0,0 +1,47 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsConnection = "ps_connections"
// PsConnection mapped from table <ps_connections>
type PsConnection struct {
IDConnections int32 `gorm:"column:id_connections;primaryKey;autoIncrement:true" json:"id_connections"`
IDShopGroup int32 `gorm:"column:id_shop_group;not null;default:1" json:"id_shop_group"`
IDShop int32 `gorm:"column:id_shop;not null;default:1" json:"id_shop"`
IDGuest int32 `gorm:"column:id_guest;not null;index:id_guest,priority:1" json:"id_guest"`
IDPage int32 `gorm:"column:id_page;not null;index:id_page,priority:1" json:"id_page"`
IPAddress *int64 `gorm:"column:ip_address" json:"ip_address"`
DateAdd time.Time `gorm:"column:date_add;not null;index:date_add,priority:1" json:"date_add"`
HTTPReferer *string `gorm:"column:http_referer" json:"http_referer"`
}
// TableName PsConnection's table name
func (*PsConnection) TableName() string {
return TableNamePsConnection
}
var PsConnectionCols = struct {
IDConnections gormcol.Field
IDShopGroup gormcol.Field
IDShop gormcol.Field
IDGuest gormcol.Field
IDPage gormcol.Field
IPAddress gormcol.Field
DateAdd gormcol.Field
HTTPReferer gormcol.Field
}{
IDConnections: gormcol.Field{}.Set((&PsConnection{}).TableName(), "id_connections"),
IDShopGroup: gormcol.Field{}.Set((&PsConnection{}).TableName(), "id_shop_group"),
IDShop: gormcol.Field{}.Set((&PsConnection{}).TableName(), "id_shop"),
IDGuest: gormcol.Field{}.Set((&PsConnection{}).TableName(), "id_guest"),
IDPage: gormcol.Field{}.Set((&PsConnection{}).TableName(), "id_page"),
IPAddress: gormcol.Field{}.Set((&PsConnection{}).TableName(), "ip_address"),
DateAdd: gormcol.Field{}.Set((&PsConnection{}).TableName(), "date_add"),
HTTPReferer: gormcol.Field{}.Set((&PsConnection{}).TableName(), "http_referer"),
}

View File

@@ -0,0 +1,35 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsConnectionsPage = "ps_connections_page"
// PsConnectionsPage mapped from table <ps_connections_page>
type PsConnectionsPage struct {
IDConnections int32 `gorm:"column:id_connections;primaryKey" json:"id_connections"`
IDPage int32 `gorm:"column:id_page;primaryKey" json:"id_page"`
TimeStart time.Time `gorm:"column:time_start;primaryKey" json:"time_start"`
TimeEnd *time.Time `gorm:"column:time_end" json:"time_end"`
}
// TableName PsConnectionsPage's table name
func (*PsConnectionsPage) TableName() string {
return TableNamePsConnectionsPage
}
var PsConnectionsPageCols = struct {
IDConnections gormcol.Field
IDPage gormcol.Field
TimeStart gormcol.Field
TimeEnd gormcol.Field
}{
IDConnections: gormcol.Field{}.Set((&PsConnectionsPage{}).TableName(), "id_connections"),
IDPage: gormcol.Field{}.Set((&PsConnectionsPage{}).TableName(), "id_page"),
TimeStart: gormcol.Field{}.Set((&PsConnectionsPage{}).TableName(), "time_start"),
TimeEnd: gormcol.Field{}.Set((&PsConnectionsPage{}).TableName(), "time_end"),
}

View File

@@ -0,0 +1,41 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import (
"git.ma-al.com/goc_marek/gormcol"
"time"
)
const TableNamePsConnectionsSource = "ps_connections_source"
// PsConnectionsSource mapped from table <ps_connections_source>
type PsConnectionsSource struct {
IDConnectionsSource int32 `gorm:"column:id_connections_source;primaryKey;autoIncrement:true" json:"id_connections_source"`
IDConnections int32 `gorm:"column:id_connections;not null;index:connections,priority:1" json:"id_connections"`
HTTPReferer *string `gorm:"column:http_referer;index:http_referer,priority:1" json:"http_referer"`
RequestURI *string `gorm:"column:request_uri;index:request_uri,priority:1" json:"request_uri"`
Keywords *string `gorm:"column:keywords" json:"keywords"`
DateAdd time.Time `gorm:"column:date_add;not null;index:orderby,priority:1" json:"date_add"`
}
// TableName PsConnectionsSource's table name
func (*PsConnectionsSource) TableName() string {
return TableNamePsConnectionsSource
}
var PsConnectionsSourceCols = struct {
IDConnectionsSource gormcol.Field
IDConnections gormcol.Field
HTTPReferer gormcol.Field
RequestURI gormcol.Field
Keywords gormcol.Field
DateAdd gormcol.Field
}{
IDConnectionsSource: gormcol.Field{}.Set((&PsConnectionsSource{}).TableName(), "id_connections_source"),
IDConnections: gormcol.Field{}.Set((&PsConnectionsSource{}).TableName(), "id_connections"),
HTTPReferer: gormcol.Field{}.Set((&PsConnectionsSource{}).TableName(), "http_referer"),
RequestURI: gormcol.Field{}.Set((&PsConnectionsSource{}).TableName(), "request_uri"),
Keywords: gormcol.Field{}.Set((&PsConnectionsSource{}).TableName(), "keywords"),
DateAdd: gormcol.Field{}.Set((&PsConnectionsSource{}).TableName(), "date_add"),
}

View File

@@ -0,0 +1,32 @@
// Code generated by gormcol. DO NOT EDIT.
package dbmodel
import "git.ma-al.com/goc_marek/gormcol"
const TableNamePsContact = "ps_contact"
// PsContact mapped from table <ps_contact>
type PsContact struct {
IDContact int32 `gorm:"column:id_contact;primaryKey;autoIncrement:true" json:"id_contact"`
Email string `gorm:"column:email;not null" json:"email"`
CustomerService bool `gorm:"column:customer_service;not null" json:"customer_service"`
Position int32 `gorm:"column:position;not null" json:"position"`
}
// TableName PsContact's table name
func (*PsContact) TableName() string {
return TableNamePsContact
}
var PsContactCols = struct {
IDContact gormcol.Field
Email gormcol.Field
CustomerService gormcol.Field
Position gormcol.Field
}{
IDContact: gormcol.Field{}.Set((&PsContact{}).TableName(), "id_contact"),
Email: gormcol.Field{}.Set((&PsContact{}).TableName(), "email"),
CustomerService: gormcol.Field{}.Set((&PsContact{}).TableName(), "customer_service"),
Position: gormcol.Field{}.Set((&PsContact{}).TableName(), "position"),
}

Some files were not shown because too many files have changed in this diff Show More