@ozdao/prometheus-framework 0.2.30 → 0.2.31

Sign up to get free protection for your applications and to get access to all the features.
Files changed (269) hide show
  1. package/dist/addMembersQuantity-3505b6f3.mjs +98 -0
  2. package/dist/addMembersQuantity-fb552ca0.js +97 -0
  3. package/dist/auth.server.js +6 -9
  4. package/dist/auth.server.mjs +6 -9
  5. package/dist/community.server.js +28 -21
  6. package/dist/community.server.mjs +28 -21
  7. package/dist/events.server.js +1 -1
  8. package/dist/events.server.mjs +1 -1
  9. package/dist/files.server.js +114 -111
  10. package/dist/files.server.mjs +114 -111
  11. package/dist/gallery.server.js +3 -3
  12. package/dist/gallery.server.mjs +3 -3
  13. package/dist/globals.server.js +1 -1
  14. package/dist/globals.server.mjs +1 -1
  15. package/dist/index-a8dffc0c.js +213 -0
  16. package/dist/index-d769324d.mjs +214 -0
  17. package/dist/mailing-37c2ba41.mjs +68 -0
  18. package/dist/mailing-fe16a26a.js +67 -0
  19. package/dist/main.css +1 -1
  20. package/dist/middlewares.server.js +1 -1
  21. package/dist/middlewares.server.mjs +1 -1
  22. package/dist/organizations.server.js +125 -25
  23. package/dist/organizations.server.mjs +125 -25
  24. package/dist/prometheus-framework.cjs.js +30 -29
  25. package/dist/prometheus-framework.es.js +2478 -2282
  26. package/dist/reports.server.js +1 -1
  27. package/dist/reports.server.mjs +1 -1
  28. package/dist/users.server.js +1 -1
  29. package/dist/users.server.mjs +1 -1
  30. package/package.json +4 -2
  31. package/src/assets/images/logo.svg +7 -7
  32. package/src/components/Block/Block.vue +77 -0
  33. package/src/components/Breadcrumbs/Breadcrumbs.vue +2 -2
  34. package/src/components/Button/Button.vue +32 -227
  35. package/src/components/Checkbox/Checkbox.vue +1 -1
  36. package/src/components/Chips/Chips.vue +8 -8
  37. package/src/components/DatePicker/DatePicker.vue +3 -4
  38. package/src/components/EditImages/EditImages.vue +32 -14
  39. package/src/{modules/globals/components/sections → components/Feed}/Feed.vue +60 -45
  40. package/src/components/FieldBig/FieldBig.vue +16 -5
  41. package/src/components/FieldPhone/FieldPhone.vue +2 -1
  42. package/src/components/Footer/Footer.vue +36 -27
  43. package/src/components/Header/Header.vue +161 -166
  44. package/src/components/Loader/Loader.vue +9 -2
  45. package/src/components/LocationMarker/LocationMarker.vue +38 -12
  46. package/src/components/LocationSelection/LocationSelection.vue +67 -75
  47. package/src/components/Magnifier/Magnifier.vue +3 -3
  48. package/src/components/Navigation/Navigation.vue +16 -16
  49. package/src/components/Popup/Popup.vue +8 -6
  50. package/src/components/Select/Select.vue +35 -6
  51. package/src/components/SelectMulti/SelectMulti.vue +5 -13
  52. package/src/components/Shader/Shader.vue +128 -0
  53. package/src/components/Sidebar/Sidebar.vue +71 -35
  54. package/src/components/Spoiler/Spoiler.vue +1 -1
  55. package/src/components/Tab/Tab.vue +1 -1
  56. package/src/components/Tooltip/Tooltip.vue +1 -1
  57. package/src/components/UploadImage/UploadImage.vue +4 -4
  58. package/src/components/UploadImageMultiple/UploadImageMultiple.vue +54 -10
  59. package/src/modules/applications/controllers/applications.controller.js +0 -1
  60. package/src/modules/auth/components/pages/EnterCode.vue +1 -1
  61. package/src/modules/auth/components/pages/EnterPassword.vue +3 -3
  62. package/src/modules/auth/components/pages/ResetPassword.vue +1 -2
  63. package/src/modules/auth/components/pages/SignIn.vue +26 -10
  64. package/src/modules/auth/components/pages/SignUp.vue +1 -2
  65. package/src/modules/auth/controllers/twofa.controller.js +4 -4
  66. package/src/modules/auth/localization/EnterCode.json +2 -2
  67. package/src/modules/auth/localization/EnterPassword.json +2 -2
  68. package/src/modules/auth/localization/ResetPassword.json +2 -2
  69. package/src/modules/auth/localization/SignIn.json +3 -3
  70. package/src/modules/auth/localization/SignUp.json +3 -3
  71. package/src/modules/auth/utils/server/verifyAppleIdToken.js +0 -1
  72. package/src/modules/backoffice/components/layouts/Backoffice.vue +1 -1
  73. package/src/modules/backoffice/components/pages/Dashboard.vue +171 -120
  74. package/src/modules/backoffice/router/backoffice.js +119 -129
  75. package/src/modules/chats/components/blocks/ChatMessage.vue +25 -0
  76. package/src/modules/chats/components/pages/ChatPage.vue +50 -0
  77. package/src/modules/chats/components/sections/ChatWindow.vue +38 -0
  78. package/src/modules/chats/controllers/chats.controller.js +32 -0
  79. package/src/modules/chats/models/chat.model.js +26 -0
  80. package/src/modules/chats/routes/chats.routes.js +53 -0
  81. package/src/modules/chats/store/chat.store.js +61 -0
  82. package/src/modules/community/components/blocks/CardBlogpost.vue +19 -4
  83. package/src/modules/community/components/layouts/Community.vue +96 -39
  84. package/src/modules/community/components/pages/Blog.vue +4 -3
  85. package/src/modules/community/components/pages/BlogPost.vue +10 -1
  86. package/src/modules/community/components/pages/CreateBlogPost.vue +36 -17
  87. package/src/modules/community/components/sections/HotPosts.vue +3 -3
  88. package/src/modules/community/components/sections/JoinUs.vue +19 -13
  89. package/src/modules/community/controllers/blog.controller.js +3 -4
  90. package/src/modules/community/controllers/utils/queryProcessor.js +16 -17
  91. package/src/modules/community/models/blogpost.model.js +6 -3
  92. package/src/modules/community/store/blogposts.js +1 -0
  93. package/src/modules/constructor/components/elements/Embed.vue +12 -1
  94. package/src/modules/constructor/components/elements/ImageUpload.vue +2 -2
  95. package/src/modules/constructor/components/elements/Textarea.vue +6 -1
  96. package/src/modules/constructor/components/elements/Video.vue +79 -0
  97. package/src/modules/constructor/components/elements/VideoPlayer.vue +59 -0
  98. package/src/modules/constructor/components/elements/Youtube.vue +52 -0
  99. package/src/modules/constructor/components/sections/Constructor.vue +27 -3
  100. package/src/modules/events/components/layouts/layoutEvents.vue +7 -28
  101. package/src/modules/files/controllers/files.controller.js +9 -22
  102. package/src/modules/files/middlewares/server/index.js +2 -2
  103. package/src/modules/files/middlewares/server/middlewareBusboy.js +137 -0
  104. package/src/modules/files/routes/files.routes.js +9 -9
  105. package/src/modules/globals/localization/vue-i18n.js +8 -1
  106. package/src/modules/globals/mixins/mixins.js +23 -13
  107. package/src/modules/globals/router/routerGuards.js +2 -2
  108. package/src/modules/globals/store/globals.js +86 -9
  109. package/src/modules/globals/utils/mailing.js +24 -3
  110. package/src/modules/icons/entities/IconCommunity.vue +4 -4
  111. package/src/modules/icons/entities/IconEvents.vue +1 -1
  112. package/src/modules/icons/entities/IconGroups.vue +1 -1
  113. package/src/modules/icons/entities/IconPrice.vue +5 -0
  114. package/src/modules/icons/entities/IconProfile.vue +5 -0
  115. package/src/modules/icons/entities/IconShopcart.vue +5 -0
  116. package/src/modules/icons/entities/IconTime.vue +5 -0
  117. package/src/modules/icons/icons.client.js +4 -0
  118. package/src/modules/icons/labels/LabelAppStore.vue +24 -24
  119. package/src/modules/icons/labels/LabelGooglePlay.vue +9 -9
  120. package/src/modules/icons/logos/Logotype.vue +20 -0
  121. package/src/modules/icons/navigation/IconAdd.vue +17 -0
  122. package/src/modules/icons/navigation/IconChevronBottom.vue +18 -0
  123. package/src/modules/icons/navigation/IconChevronRight.vue +3 -3
  124. package/src/modules/icons/navigation/IconDelete.vue +19 -0
  125. package/src/modules/icons/navigation/IconMinus.vue +15 -0
  126. package/src/modules/icons/navigation/IconSearch.vue +17 -0
  127. package/src/modules/icons/navigation/IconUpload.vue +16 -0
  128. package/src/modules/icons/placeholders/PlaceholderImage.vue +5 -0
  129. package/src/modules/icons/placeholders/PlaceholderOrganizationPic.vue +20 -0
  130. package/src/modules/icons/placeholders/PlaceholderUserpic.vue +4 -18
  131. package/src/modules/icons/socials/instagram.vue +1 -1
  132. package/src/modules/icons/socials/line.vue +1 -1
  133. package/src/modules/icons/socials/reddit.vue +1 -1
  134. package/src/modules/icons/socials/telegram.vue +1 -1
  135. package/src/modules/icons/socials/twitter.vue +1 -1
  136. package/src/modules/icons/socials/youtube.vue +1 -1
  137. package/src/modules/landing/components/sections/Guide.vue +92 -0
  138. package/src/modules/landing/components/sections/MobileApp.vue +23 -12
  139. package/src/modules/marketplace/components/layouts/Marketplace.vue +76 -188
  140. package/src/modules/marketplace/components/pages/Catalog.vue +65 -119
  141. package/src/modules/marketplace/components/sections/Filters.vue +195 -0
  142. package/src/modules/marketplace/store/marketplace.js +2 -2
  143. package/src/modules/middlewares/client/auth.validation.js +0 -6
  144. package/src/modules/middlewares/client/states.validation.js +2 -8
  145. package/src/modules/middlewares/server/authJwt.js +1 -1
  146. package/src/modules/mobile/components/Menu/MenuItem.vue +3 -6
  147. package/src/modules/openai/controllers/openai.controller.js +0 -1
  148. package/src/modules/orders/components/blocks/CardOrder.vue +166 -0
  149. package/src/modules/orders/components/blocks/CardOrderItem.vue +59 -66
  150. package/src/modules/orders/components/blocks/Positions.vue +4 -4
  151. package/src/modules/orders/components/pages/EditOrder.vue +78 -142
  152. package/src/modules/orders/components/pages/FormOrder.vue +192 -0
  153. package/src/modules/orders/components/pages/Order.vue +326 -120
  154. package/src/modules/orders/components/pages/Orders.vue +13 -9
  155. package/src/modules/orders/components/pages/{ViewOrder.vue → Orders_refact.vue} +13 -10
  156. package/src/modules/orders/components/partials/ShopCart.vue +22 -13
  157. package/src/modules/orders/components/sections/EmptyState.vue +1 -1
  158. package/src/modules/orders/components/sections/{Form.vue → FormOrderDetails.vue} +38 -106
  159. package/src/modules/orders/controllers/orders.controller.js +37 -28
  160. package/src/modules/orders/models/order.model.js +39 -9
  161. package/src/modules/orders/router/orders.router.js +23 -2
  162. package/src/modules/orders/routes/orders.routes.js +14 -17
  163. package/src/modules/orders/store/orders.js +24 -9
  164. package/src/modules/orders/store/shopcart.js +20 -19
  165. package/src/modules/organizations/components/blocks/CardDepartment.vue +1 -1
  166. package/src/modules/organizations/components/blocks/CardOrganization.vue +98 -46
  167. package/src/modules/organizations/components/blocks/Rating.vue +1 -1
  168. package/src/modules/organizations/components/blocks/Socials.vue +11 -3
  169. package/src/modules/organizations/components/elements/ButtonToggleMembership.vue +1 -1
  170. package/src/modules/organizations/components/pages/Department.vue +1 -1
  171. package/src/modules/organizations/components/pages/DepartmentEdit.vue +4 -4
  172. package/src/modules/organizations/components/pages/Members.vue +6 -4
  173. package/src/modules/organizations/components/pages/Organization.vue +120 -49
  174. package/src/modules/organizations/components/pages/OrganizationEdit.vue +8 -1
  175. package/src/modules/organizations/components/pages/Organizations.vue +27 -6
  176. package/src/modules/organizations/components/sections/DetailsTab.vue +11 -9
  177. package/src/modules/organizations/components/sections/Feed.vue +0 -3
  178. package/src/modules/organizations/components/sections/FeedDepartments.vue +2 -2
  179. package/src/modules/organizations/controllers/organizations.controller.js +126 -15
  180. package/src/modules/organizations/controllers/utils/addMembersQuantity.js +19 -9
  181. package/src/modules/organizations/models/organization.model.js +5 -2
  182. package/src/modules/organizations/router/members.router.js +1 -3
  183. package/src/modules/organizations/router/organizations.js +8 -6
  184. package/src/modules/organizations/router/products.router.js +36 -2
  185. package/src/modules/organizations/store/organizations.js +38 -84
  186. package/src/modules/pages/controllers/pages.controller.js +0 -4
  187. package/src/modules/payments/controller/payments.controller.js +1 -1
  188. package/src/modules/products/components/blocks/CardLeftover.vue +17 -22
  189. package/src/modules/products/components/blocks/CardPosition.vue +96 -49
  190. package/src/modules/products/components/blocks/CardProduct.vue +24 -53
  191. package/src/modules/products/components/blocks/Images360.vue +4 -4
  192. package/src/modules/products/components/blocks/ImagesThumbnails.vue +2 -7
  193. package/src/modules/products/components/blocks/ListPositions.vue +74 -0
  194. package/src/modules/products/components/elements/Price.vue +11 -5
  195. package/src/modules/products/components/elements/THC.vue +6 -6
  196. package/src/modules/products/components/pages/{LeftoverAdd.vue → EditLeftover.vue} +93 -79
  197. package/src/modules/products/components/pages/Leftovers.vue +74 -70
  198. package/src/modules/products/components/pages/Product.vue +4 -7
  199. package/src/modules/products/components/pages/ProductEdit.vue +230 -88
  200. package/src/modules/products/components/pages/ProductRecommmendation.vue +1 -1
  201. package/src/modules/products/components/pages/Products.vue +6 -3
  202. package/src/modules/products/components/pages/ProductsBackoffice.vue +3 -5
  203. package/src/modules/products/components/sections/EditModifications.vue +3 -3
  204. package/src/modules/products/components/sections/EditProductInfo.vue +40 -50
  205. package/src/modules/products/components/sections/FilterProducts.vue +57 -18
  206. package/src/modules/products/components/sections/HeroRecommendation.vue +233 -99
  207. package/src/modules/products/components/sections/MenuSection.vue +127 -0
  208. package/src/modules/products/components/sections/PopularProducts.vue +81 -37
  209. package/src/modules/products/components/sections/SectionProduct.vue +21 -23
  210. package/src/modules/products/controllers/leftovers.controller.js +11 -1
  211. package/src/modules/products/controllers/products.controller.js +100 -97
  212. package/src/modules/products/models/leftover.model.js +6 -4
  213. package/src/modules/products/models/product.model.js +13 -1
  214. package/src/modules/products/routes/products.routes.js +4 -4
  215. package/src/modules/products/store/leftovers.js +4 -24
  216. package/src/modules/products/store/products.js +44 -30
  217. package/src/modules/spots/components/blocks/CardSpot.vue +43 -72
  218. package/src/modules/spots/components/layouts/Spots.vue +9 -91
  219. package/src/modules/spots/components/pages/Map.vue +171 -62
  220. package/src/modules/spots/components/pages/Spot.vue +1 -1
  221. package/src/modules/spots/components/pages/SpotEdit.vue +131 -174
  222. package/src/modules/spots/controllers/spots.controller.js +1 -0
  223. package/src/modules/spots/models/spot.model.js +6 -3
  224. package/src/modules/spots/store/spots.js +42 -48
  225. package/src/modules/users/components/pages/Profile.vue +6 -28
  226. package/src/modules/users/components/pages/ProfileBlogposts.vue +1 -1
  227. package/src/modules/users/components/pages/ProfileEdit.vue +1 -1
  228. package/src/modules/users/components/pages/ProfileEvents.vue +1 -1
  229. package/src/modules/users/components/pages/ProfileOrganizations.vue +1 -1
  230. package/src/modules/users/router/users.js +1 -1
  231. package/src/modules/wallet/components/pages/Wallet.vue +105 -109
  232. package/src/modules/wallet/controllers/crypto.controller.js +129 -0
  233. package/src/modules/wallet/models/reward.model.js +53 -0
  234. package/src/modules/wallet/routes/crypto.routes.js +36 -0
  235. package/src/modules/wallet/store/wallet.js +52 -49
  236. package/src/styles/base/all.scss +143 -11
  237. package/src/styles/base/backgrounds.scss +2 -34
  238. package/src/styles/base/borders.scss +18 -23
  239. package/src/styles/base/scrolling.scss +97 -29
  240. package/src/styles/base/{shadows.scss → shadow_transitions_hover_refactor.scss} +55 -2
  241. package/src/styles/config.scss +69 -17
  242. package/src/styles/layout.scss +12 -182
  243. package/src/styles/reset.scss +20 -21
  244. package/src/styles/responsive.scss +4 -67
  245. package/src/styles/theme.scss +3 -4
  246. package/src/styles/typography.scss +15 -17
  247. package/src/assets/fonts/AvenirNext-Bold.woff2 +0 -0
  248. package/src/assets/fonts/AvenirNext-DemiBold.woff2 +0 -0
  249. package/src/assets/fonts/AvenirNext-Heavy.woff2 +0 -0
  250. package/src/assets/fonts/AvenirNext-Medium.woff2 +0 -0
  251. package/src/assets/fonts/AvenirNext-Regular.woff2 +0 -0
  252. package/src/assets/fonts/AvenirNext-UltraLight.woff2 +0 -0
  253. package/src/modules/files/middlewares/server/md.js +0 -152
  254. package/src/modules/files/middlewares/server/middlewareMulter.js +0 -121
  255. package/src/modules/organizations/controllers/organizations.new.controller.js +0 -372
  256. package/src/modules/products/components/blocks/EditCategories.vue +0 -68
  257. package/src/modules/products/components/sections/EditParameters.vue +0 -58
  258. package/src/modules/products/components/sections/EditProductImages.vue +0 -67
  259. package/src/modules/spots/components/sections/Feed.vue +0 -64
  260. package/src/styles/base/border-radius.scss +0 -47
  261. package/src/styles/base/cursors.scss +0 -23
  262. package/src/styles/base/height.scss +0 -60
  263. package/src/styles/base/hovers.scss +0 -110
  264. package/src/styles/base/positions.scss +0 -192
  265. package/src/styles/base/transitions.scss +0 -137
  266. package/src/styles/base/width.scss +0 -2
  267. package/src/styles/components/block.scss +0 -18
  268. package/src/styles/components/breadcrumbs.scss +0 -0
  269. package/src/styles/components/input.scss +0 -319
@@ -1,151 +1,147 @@
1
1
  <template>
2
2
  <section class="pd-big">
3
- <h1 class="mn-b-small">
4
- Your Wallet
5
- </h1>
3
+ <h1 class="mn-b-small">Your Wallet</h1>
6
4
 
7
5
  <p class="mn-b-semi p-big">
8
6
  Earn Weeder Token Crypto with buying our weed, use it as money when buying our products or withdraw and trade
9
7
  </p>
10
8
 
11
- <div class="mn-b-semi flex-nowrap flex gap-thin">
12
- <div
13
- v-if="!account"
9
+ <div class="mn-b-semi cols-2 gap-thin">
10
+ <div
11
+ v-if="!state.account"
14
12
  class="w-100 pd-medium radius-medium t-center bg-grey"
15
13
  >
16
- <h3 class="mn-b-small">Make first order and start earning Weeder Token </h3>
17
- <!-- <p class="w-max-25r p-big t-transp mn-b-small">You can also connect a wallet in advance, to which you can withdraw your earned OZET</p> -->
14
+ <h3 class="mn-b-small">Make first order and start earning Weeder Token</h3>
18
15
  <button class="mn-l-auto mn-r-auto bg-main button">Explore marketplace</button>
19
16
  </div>
20
17
 
21
- <div
22
- v-if="account"
23
- class="w-100 pd-medium radius-medium bg-grey"
24
- >
25
- <p class="h4 mn-b-thin">You own: </p>
26
- <h3 class="mn-b-small">0.14% of Weeder</h3>
27
- <!-- <p class="p-big mn-b-small">0.0032 WDT</p> -->
28
- <button class="w-100 bg-main button">Get More</button>
29
- </div>
30
-
31
- <div
32
- v-if="account"
18
+ <div
19
+ v-if="state.account"
33
20
  class="w-100 pd-medium radius-medium bg-grey"
34
21
  >
35
- <p class="h4 mn-b-thin">You earn: </p>
36
- <h3 class="mn-b-small">245.43 WDT</h3>
37
- <!-- <p class="p-big mn-b-small">0.0032 WDT</p> -->
22
+ <p class="h4 mn-b-thin">You own:</p>
23
+ <h3 class="mn-b-small">{{state.share}}% of Weeder</h3>
38
24
  <button class="w-100 bg-main button">Get More</button>
39
25
  </div>
40
26
 
41
- <div class="w-50 bg-black radius-semi pd-medium t-white">
27
+ <div class="w-100 bg-black radius-semi pd-medium t-white">
42
28
  <p class="h4 mn-b-thin">Your Metamask</p>
43
-
44
- <div v-if="account" class="mn-b-small pd-small br-solid br-1px br-white-transp-10 radius-small">
45
- {{account}}
29
+
30
+ <div
31
+ v-if="state.account"
32
+ class="mn-b-small pd-small br-solid br-1px br-white-transp-10 radius-small"
33
+ >
34
+ {{state.account}}
46
35
  </div>
47
36
 
48
- <p v-if="!account" class="p-medium t-transp mn-b-small">Connect Metamask to withdrawal your earnings.</p>
37
+ <p
38
+ v-if="!state.account"
39
+ class="p-medium t-transp mn-b-small"
40
+ >
41
+ Connect Metamask to withdrawal your earnings.
42
+ </p>
49
43
 
50
- <button
51
- v-if="!account"
52
- @click="connectWallet"
53
- class="w-100 button"
44
+ <button
45
+ v-if="!state.account"
46
+ @click="actions.connectWallet"
47
+ class="w-100 br-solid br-2px br-white t-white button"
54
48
  >
55
49
  Connect Wallet
56
50
  </button>
57
51
 
58
- <button
59
- v-if="account"
60
- @click="disconnectWallet"
52
+ <button
53
+ v-if="state.account"
54
+ @click="actions.disconnectWallet"
61
55
  class="w-100 bg-red button"
62
56
  >
63
- Disonnect Wallet
57
+ Disconnect Wallet
64
58
  </button>
65
-
66
59
  </div>
67
60
  </div>
68
61
 
62
+ <div
63
+ v-if="state.account"
64
+ class="w-100 pd-medium radius-medium bg-grey"
65
+ >
66
+ <p class="h4 mn-b-thin">You earn:</p>
67
+ <h3 class="mn-b-small">{{state.tokenBalance}} WDT</h3>
68
+ <button class="w-100 bg-main button" @click="actions.collectRewards">Withdraw</button>
69
+ </div>
70
+
69
71
 
70
- <h3
71
- class="mn-b-small"
72
- >
73
- Incomes
74
- </h3>
72
+ <h3 class="mn-b-small" v-if="state.rewards.length > 0">Latest Rewards </h3>
75
73
 
76
- <section class="cols-4 gap-thin">
74
+ <section class="cols-3 gap-thin">
77
75
  <div
78
- class="pd-medium radius-medium bg-grey"
79
- v-for="income in [{
80
- balance: 34,
81
- type: 'income',
82
- reason: 'order',
83
- target: 'ef34dsdase4389snjnu (_id)'
84
- },{
85
- balance: 25,
86
- type: 'income',
87
- reason: 'post',
88
- target: 'ef34dsdase4389snjnu (_id)'
89
- },{
90
- balance: 17,
91
- type: 'income',
92
- reason: 'comment',
93
- target: 'ef34dsdase4389snjnu (_id)'
94
- },{
95
- balance: 43,
96
- type: 'event',
97
- reason: 'order',
98
- target: 'ef34dsdase4389snjnu (_id)'
99
- }]"
100
- >
101
- <h3 class="mn-b-small">+ {{income.balance}} WDT</h3>
102
- <p class="p-small mn-b-small">For {{income.reason}} {{income.target}}</p>
76
+ class="radius-medium bg-grey"
77
+ v-for="income in state.rewards"
78
+ >
79
+ <!-- <pre>{{income}}</pre> -->
80
+
81
+ <div class="pd-medium">
82
+ <span class="w-max mn-b-small d-block pd-t-nano pd-b-nano pd-l-thin pd-r-thin bg-main radius-extra t-semi p-small">{{income.type === 'blogpost' ? 'Community Reward' : income.type}}</span>
83
+ <h4 class="mn-b-thin">{{income.name}}</h4>
84
+ <p class="mn-b-small p-small">{{income.content[0].content}}</p>
85
+
86
+ <div class="bg-black t-white radius-extra pd-thin flex-center flex-nowrap flex">
87
+ <img src="/logo/wdt-plus.svg" class="mn-r-thin i-semi">
88
+ <p class="t-semi">{{income.amount}} WDT</p>
89
+ </div>
90
+ </div>
91
+
92
+
93
+ <!-- <CardBlogpost
94
+ :key="income._id"
95
+ :blogpost="income"
96
+ class=""
97
+ /> -->
98
+
103
99
  </div>
104
- </section>
105
100
 
101
+ <div
102
+ class="radius-medium bg-grey"
103
+ v-for="income in state.rewards"
104
+ >
105
+ <div class="flex-nowrap flex pd-medium">
106
+ <img src="/logo/wdt-plus.svg" class="mn-r-thin i-semi">
107
+ <p class="t-semi mn-r-auto">{{income.amount}} WDT</p>
108
+
109
+ <span class="pd-t-nano pd-b-nano pd-l-thin pd-r-thin bg-main flex flex-center radius-extra t-semi p-small">{{income.type === 'blogpost' ? 'Community Reward' : income.type}}</span>
110
+ </div>
111
+
112
+ <div class="pd-medium">
113
+ <h4 class="mn-b-thin">{{income.name}}</h4>
114
+ <p class="p-small">{{income.content[0].content}}</p>
115
+ </div>
116
+
117
+ </div>
106
118
 
119
+
120
+ </section>
107
121
  </section>
108
122
  </template>
109
123
 
110
-
111
124
  <script setup>
112
- import Web3 from 'web3'
113
-
114
- import { computed, onMounted,reactive, ref,toRefs } from 'vue'
115
-
116
- import { useRoute,useRouter } from 'vue-router'
117
-
118
- const route = useRoute()
119
-
120
- let connected = ref(false);
121
-
122
- const web3 = new Web3(Web3.givenProvider || 'http://localhost:8080');
123
- const account = ref(null)
124
- /////////////////////////////
125
- // METHODS
126
- /////////////////////////////
127
- function connect() {
128
- // this connects to the wallet
129
- if (window.ethereum) { // first we check if metamask is installed
130
- window.ethereum.request({ method: 'eth_requestAccounts' }).then(() => {
131
- console.log('aman')
132
- connected.value = true; // If users successfully connected their wallet
133
- });
134
- }
135
- }
136
-
137
- async function connectWallet () {
138
- const accounts = await web3.eth.requestAccounts();
139
-
140
- account.value = accounts[0];
141
- }
142
- /////////////////////////////
143
- // MOUNTED
144
- /////////////////////////////
145
- onMounted(() => {
146
-
147
- });
148
- </script>
125
+ import { onMounted } from 'vue';
126
+ import { state, actions } from '../../store/wallet';
127
+ import Web3 from "web3";
128
+
149
129
 
150
- <style lang="scss" scoped>
151
- </style>
130
+ import CardBlogpost from '@pf/src/modules/community/components/blocks/CardBlogpost.vue';
131
+
132
+ // User has disconnected metamask from extension
133
+ window.ethereum.on('accountsChanged', (accounts) => {
134
+ if (accounts.length < 1) {
135
+ state.account = null;
136
+ }
137
+ });
138
+
139
+ state.web3 = new Web3(window.ethereum || 'http://localhost:8080');
140
+
141
+ onMounted(() => {
142
+ // Load list with the latest rewards and try to reconnect metamask,
143
+ // if a user is already connected to it before
144
+ actions.listRewards();
145
+ actions.tryReconnectWallet();
146
+ });
147
+ </script>
@@ -0,0 +1,129 @@
1
+ const ObjectId = require('mongoose').Types.ObjectId;
2
+ const { BigNumber } = require('bignumber.js');
3
+
4
+ const queryProcessorGlobals = require('../../globals/controllers/utils/queryProcessor');
5
+
6
+ const VIEWS_REWARD_COEFF = '0.1';
7
+ const WDT_DECIMALS = 8;
8
+
9
+ const calculateRewardForPost = (snapshot, viewsCount, reactionsCount, commentsCount) => {
10
+ if (snapshot) {
11
+ return new BigNumber(Math.max(viewsCount - snapshot.views, 0))
12
+ .multipliedBy(VIEWS_REWARD_COEFF)
13
+ .plus(Math.max(reactionsCount - snapshot.reactions, 0))
14
+ .plus(Math.max(commentsCount - snapshot.comments, 0));
15
+ }
16
+
17
+ return new BigNumber('10')
18
+ .plus(new BigNumber(viewsCount).multipliedBy(VIEWS_REWARD_COEFF))
19
+ .plus(reactionsCount)
20
+ .plus(commentsCount);
21
+ };
22
+
23
+ const cryptoControllerFactory = (db, wdmClient) => {
24
+ const Blogpost = db.blogpost;
25
+ const Reaction = db.reaction;
26
+ const Comment = db.comment;
27
+ const Reward = db.reward;
28
+
29
+ const listRewards = async (req, res) => {
30
+ const blogs = await Blogpost.find({ "creator.target": req.userId }).exec();
31
+
32
+ const rewards = [];
33
+
34
+ for (const blog of blogs) {
35
+ const reactions = await Reaction.countDocuments({ target: { $in: blog._id } }).exec();
36
+ const comments = await Comment.countDocuments({ target: { $in: blog._id } }).exec();
37
+
38
+ const previousReward = await Reward
39
+ .findOne({ user: req.userId, type: 'blogpost', target: blog._id })
40
+ .populate({
41
+ path: 'target',
42
+ model: 'Blogpost' // Убедитесь, что 'Blogpost' соответствует имени вашей модели блогпоста
43
+ })
44
+ .sort({ createdAt: -1 })
45
+ .exec();
46
+
47
+ const reward = calculateRewardForPost(
48
+ previousReward?.snapshot,
49
+ blog.views,
50
+ reactions,
51
+ comments
52
+ );
53
+
54
+ rewards.push({
55
+ user: req.userId,
56
+ type: 'blogpost',
57
+ amount: reward.toString(),
58
+ name: blog.name,
59
+ content: blog.content,
60
+ url: blog.url
61
+ });
62
+
63
+ // console.log(rewards)
64
+ }
65
+
66
+ res.status(200).send(rewards);
67
+ };
68
+
69
+ const collectTokens = async (req, res) => {
70
+ const blogs = await Blogpost.find({ "creator.target": req.userId }).exec();
71
+
72
+ let totalRewards = new BigNumber(0);
73
+
74
+ for (const blog of blogs) {
75
+ const reactions = await Reaction.countDocuments({ target: { $in: blog._id } }).exec();
76
+ const comments = await Comment.countDocuments({ target: { $in: blog._id } }).exec();
77
+
78
+ const previousReward = await Reward
79
+ .findOne({ user: req.userId, type: 'blogpost', target: blog._id })
80
+ .sort({ createdAt: -1 })
81
+ .exec();
82
+
83
+ const reward = calculateRewardForPost(
84
+ previousReward?.snapshot,
85
+ blog.views,
86
+ reactions,
87
+ comments
88
+ );
89
+
90
+ if (reward.gt(0)) {
91
+ totalRewards = totalRewards.plus(reward);
92
+
93
+ const snapshot = {
94
+ views: previousReward ?
95
+ previousReward.snapshot.views < blog.views ? blog.views : previousReward.snapshot.views
96
+ : blog.views,
97
+ reactions: previousReward ?
98
+ previousReward.snapshot.reactions < reactions ? reactions : previousReward.snapshot.reactions
99
+ : reactions,
100
+ comments: previousReward ?
101
+ previousReward.snapshot.comments < comments ? comments : previousReward.snapshot.comments
102
+ : comments,
103
+ };
104
+
105
+ await Reward.create({
106
+ user: req.userId,
107
+ type: 'blogpost',
108
+ target: blog._id,
109
+ amount: reward.toString(),
110
+ snapshot: snapshot,
111
+ });
112
+ }
113
+ }
114
+
115
+ if (totalRewards.gt(0)) {
116
+ await wdmClient.transfer(
117
+ totalRewards.shiftedBy(WDT_DECIMALS).toString(),
118
+ req.body.recipient,
119
+ req.userId
120
+ );
121
+ }
122
+
123
+ res.status(200).send();
124
+ };
125
+
126
+ return { listRewards, collectTokens };
127
+ };
128
+
129
+ module.exports = cryptoControllerFactory;
@@ -0,0 +1,53 @@
1
+ module.exports = (mongoose) => {
2
+ const RewardSchema = new mongoose.Schema(
3
+ {
4
+ user: {
5
+ type: mongoose.Schema.Types.ObjectId,
6
+ ref: () => {
7
+ if (this.owner.type === 'user') return 'User';
8
+ if (this.owner.type === 'organization') return 'Organization';
9
+ },
10
+ required: true,
11
+ },
12
+ type: {
13
+ type: String,
14
+ enum: ['blogpost', 'order'],
15
+ required: true,
16
+ },
17
+ target: {
18
+ type: mongoose.Schema.Types.ObjectId,
19
+ ref: () => {
20
+ if (this.owner.blogpost === 'blogpost') return 'Blogpost';
21
+ if (this.owner.blogpost === 'order') return 'Order';
22
+ },
23
+ required: true,
24
+ },
25
+ amount: {
26
+ type: String,
27
+ required: true,
28
+ },
29
+ snapshot: {
30
+ views: {
31
+ type: String,
32
+ required: true,
33
+ },
34
+ reactions: {
35
+ type: String,
36
+ required: true,
37
+ },
38
+ comments: {
39
+ type: String,
40
+ required: true,
41
+ },
42
+ },
43
+ },
44
+ {
45
+ timestamps: {
46
+ currentTime: () => Date.now(),
47
+ },
48
+ },
49
+ { strict: false },
50
+ );
51
+
52
+ return mongoose.model("Reward", RewardSchema);
53
+ };
@@ -0,0 +1,36 @@
1
+ // Controllers
2
+ const cryptoControllerFactory = require('../controllers/crypto.controller');
3
+
4
+ // Middlewares
5
+ const middlewareFactory = require('../../middlewares/server');
6
+
7
+ // Routes
8
+ module.exports = (app, db, wdmClient, origins) => {
9
+ const controller = cryptoControllerFactory(db, wdmClient);
10
+
11
+ const { authJwt } = middlewareFactory(db);
12
+
13
+ app.use((req, res, next) => {
14
+ const origin = req.headers.origin;
15
+
16
+ if (origins.includes(origin)) {
17
+ res.setHeader('Access-Control-Allow-Origin', origin);
18
+ }
19
+
20
+ res.header("Access-Control-Allow-Headers", "x-access-token, Origin, Content-Type, Accept");
21
+
22
+ next();
23
+ });
24
+
25
+ app.get(
26
+ "/api/crypto/rewards",
27
+ [authJwt.verifyToken],
28
+ controller.listRewards
29
+ );
30
+
31
+ app.post(
32
+ "/api/crypto/collect",
33
+ [authJwt.verifyToken],
34
+ controller.collectTokens
35
+ );
36
+ };
@@ -1,55 +1,58 @@
1
- /////////////////////////////
2
- // DEPENDENCIES
3
- /////////////////////////////
4
- import { reactive, watch, computed } from "vue";
5
- // Dependencies
6
- import Cookies from 'js-cookie'
7
- // Globals
8
- import { setError } from '@pf/src/modules/globals/store/globals'
9
-
10
- /////////////////////////////
11
- // STATE
12
- /////////////////////////////
1
+ import axios from 'axios';
2
+ import { reactive } from 'vue';
3
+ import { BigNumber } from 'bignumber.js';
4
+
5
+ const API_CRYPTO_PATH = '/api/crypto';
6
+ const WDT_SUPPLY = 20_000_000;
7
+
8
+ const $axios = axios.create({ baseURL: process.env.API_URL, withCredentials: true });
9
+
13
10
  const state = reactive({
14
-
11
+ rewards: [],
12
+ tokenBalance: '0',
13
+ share: '0',
14
+ account: null,
15
+ web3: null,
15
16
  });
16
17
 
17
- /////////////////////////////
18
- // ACTIONS
19
- /////////////////////////////
20
18
  const actions = {
21
-
22
- };
23
-
24
- /////////////////////////////
25
- // GETTERS
26
- /////////////////////////////
27
- const getters = {
28
-
19
+ listRewards: () => $axios
20
+ .get(`${API_CRYPTO_PATH}/rewards`)
21
+ .then((r) => {
22
+ state.rewards = r.data;
23
+ state.tokenBalance = r.data
24
+ .reduce((acc, v) => acc.plus(v.amount), new BigNumber('0'))
25
+ .toString();
26
+ state.share = new BigNumber(state.tokenBalance)
27
+ .div(WDT_SUPPLY)
28
+ .multipliedBy(100)
29
+ .toFormat(6);
30
+ })
31
+ .catch((e) => console.error(e)),
32
+
33
+ collectRewards: () => $axios
34
+ .post(`${API_CRYPTO_PATH}/collect`, { recipient: state.account })
35
+ .then(() => actions.listRewards())
36
+ .catch((e) => console.error(e)),
37
+
38
+ disconnectWallet: () => window.ethereum
39
+ .request({ method: "wallet_revokePermissions", params: [{ "eth_accounts": {} }] })
40
+ .then(() => { state.account = null; })
41
+ .catch((e) => console.error(e)),
42
+
43
+ connectWallet: () => state.web3.eth
44
+ .requestAccounts()
45
+ .then((accounts) => { state.account = accounts[0] })
46
+ .catch((e) => console.error(e)),
47
+
48
+ tryReconnectWallet: () => state.web3.eth
49
+ .getAccounts()
50
+ .then((a) => {
51
+ if (a.length > 0) {
52
+ return actions.connectWallet();
53
+ }
54
+ })
55
+ .catch((e) => console.error(e)),
29
56
  };
30
57
 
31
- /////////////////////////////
32
- // UTILS
33
- /////////////////////////////
34
-
35
- /////////////////////////////
36
- // HISTORY
37
- /////////////////////////////
38
- const history = []
39
- history.push(state)
40
-
41
- /////////////////////////////
42
- // WATCH
43
- /////////////////////////////
44
- watch(state, (newState, oldState) => {
45
- history.push(newState)
46
- })
47
-
48
- /////////////////////////////
49
- // Module Export
50
- /////////////////////////////
51
- export default {
52
- state,
53
- actions,
54
- getters
55
- }
58
+ export { state, actions };