@ozdao/prometheus-framework 0.2.130 → 0.2.133

Sign up to get free protection for your applications and to get access to all the features.
Files changed (267) hide show
  1. package/dist/auth.server.js +0 -1
  2. package/dist/auth.server.mjs +0 -1
  3. package/dist/community.server.js +172 -31
  4. package/dist/community.server.mjs +172 -31
  5. package/dist/events.server.js +1 -1
  6. package/dist/events.server.mjs +1 -1
  7. package/dist/files.server.js +38 -4
  8. package/dist/files.server.mjs +38 -4
  9. package/dist/gallery.server.js +1 -1
  10. package/dist/gallery.server.mjs +1 -1
  11. package/dist/main-CI9l9xMs.js +92 -0
  12. package/dist/main-DPg58GOU.mjs +14509 -0
  13. package/dist/main.css +1 -1
  14. package/dist/orders.server.js +1 -1
  15. package/dist/orders.server.mjs +1 -1
  16. package/dist/organizations.server.js +4 -3
  17. package/dist/organizations.server.mjs +4 -3
  18. package/dist/products.server.js +2 -1
  19. package/dist/products.server.mjs +2 -1
  20. package/dist/prometheus-framework/src/components/Address/Address.vue.cjs +1 -0
  21. package/dist/prometheus-framework/src/components/Address/Address.vue.js +89 -0
  22. package/dist/prometheus-framework/src/components/Address/Address.vue2.cjs +1 -1
  23. package/dist/prometheus-framework/src/components/Address/Address.vue2.js +22 -23
  24. package/dist/prometheus-framework/src/components/Block/Block.vue.js +13 -13
  25. package/dist/prometheus-framework/src/components/Button/Button.vue.cjs +1 -0
  26. package/dist/prometheus-framework/src/components/Button/Button.vue.js +95 -0
  27. package/dist/prometheus-framework/src/components/Chips/Chips.vue.cjs +1 -1
  28. package/dist/prometheus-framework/src/components/Chips/Chips.vue.js +12 -13
  29. package/dist/prometheus-framework/src/components/Chips/Chips.vue2.cjs +1 -0
  30. package/dist/prometheus-framework/src/components/Chips/Chips.vue2.js +26 -0
  31. package/dist/prometheus-framework/src/components/DatePicker/Calendar.vue2.cjs +1 -1
  32. package/dist/prometheus-framework/src/components/DatePicker/Calendar.vue2.js +32 -33
  33. package/dist/prometheus-framework/src/components/Draggable/Draggable.vue.cjs +1 -0
  34. package/dist/prometheus-framework/src/components/Draggable/Draggable.vue.js +75 -0
  35. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue.cjs +1 -1
  36. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue.js +14 -15
  37. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue2.cjs +1 -0
  38. package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue2.js +57 -0
  39. package/dist/prometheus-framework/src/components/Feed/Feed.vue.cjs +1 -1
  40. package/dist/prometheus-framework/src/components/Feed/Feed.vue.js +93 -87
  41. package/dist/prometheus-framework/src/components/Field/Field.vue.cjs +1 -0
  42. package/dist/prometheus-framework/src/components/Field/Field.vue.js +84 -0
  43. package/dist/prometheus-framework/src/components/FieldBig/FieldBig.vue.cjs +1 -1
  44. package/dist/prometheus-framework/src/components/FieldBig/FieldBig.vue.js +32 -29
  45. package/dist/prometheus-framework/src/components/FieldPhone/FieldPhone.vue.cjs +1 -1
  46. package/dist/prometheus-framework/src/components/FieldPhone/FieldPhone.vue.js +22 -23
  47. package/dist/prometheus-framework/src/components/FieldTags/FieldTags.vue.cjs +1 -1
  48. package/dist/prometheus-framework/src/components/FieldTags/FieldTags.vue.js +39 -39
  49. package/dist/prometheus-framework/src/components/FieldTags/tag-input.vue2.cjs +1 -1
  50. package/dist/prometheus-framework/src/components/FieldTags/tag-input.vue2.js +5 -5
  51. package/dist/prometheus-framework/src/components/LocationMarker/LocationMarker.vue.cjs +1 -0
  52. package/dist/prometheus-framework/src/components/LocationMarker/LocationMarker.vue.js +127 -0
  53. package/dist/prometheus-framework/src/components/LocationMarker/LocationMarker.vue2.cjs +1 -1
  54. package/dist/prometheus-framework/src/components/LocationMarker/LocationMarker.vue2.js +46 -47
  55. package/dist/prometheus-framework/src/components/Menu/Menu.vue.cjs +1 -0
  56. package/dist/prometheus-framework/src/components/Menu/Menu.vue.js +13 -0
  57. package/dist/prometheus-framework/src/components/PhotoViewer/PhotoViewer.vue.cjs +1 -1
  58. package/dist/prometheus-framework/src/components/PhotoViewer/PhotoViewer.vue.js +22 -23
  59. package/dist/prometheus-framework/src/components/Popup/Popup.vue2.cjs +1 -0
  60. package/dist/prometheus-framework/src/components/Popup/Popup.vue2.js +77 -0
  61. package/dist/prometheus-framework/src/components/Select/Select.vue.cjs +1 -0
  62. package/dist/prometheus-framework/src/components/Select/Select.vue.js +103 -0
  63. package/dist/prometheus-framework/src/components/Spoiler/Spoiler.vue2.cjs +1 -1
  64. package/dist/prometheus-framework/src/components/Spoiler/Spoiler.vue2.js +14 -15
  65. package/dist/prometheus-framework/src/components/Tooltip/Tooltip.vue.cjs +1 -1
  66. package/dist/prometheus-framework/src/components/Tooltip/Tooltip.vue.js +9 -10
  67. package/dist/prometheus-framework/src/components/Upload/Upload.vue.cjs +1 -1
  68. package/dist/prometheus-framework/src/components/Upload/Upload.vue.js +37 -34
  69. package/dist/prometheus-framework/src/modules/auth/components/pages/ResetPassword.vue.js +30 -30
  70. package/dist/prometheus-framework/src/modules/auth/components/pages/SignIn.vue.js +30 -30
  71. package/dist/prometheus-framework/src/modules/auth/components/pages/SignUp.vue.js +18 -18
  72. package/dist/prometheus-framework/src/modules/auth/store/auth.cjs +1 -1
  73. package/dist/prometheus-framework/src/modules/auth/store/auth.js +11 -11
  74. package/dist/prometheus-framework/src/modules/community/community.client.cjs +1 -1
  75. package/dist/prometheus-framework/src/modules/community/community.client.js +12 -14
  76. package/dist/prometheus-framework/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
  77. package/dist/prometheus-framework/src/modules/community/components/blocks/CardBlogpost.vue.js +54 -71
  78. package/dist/prometheus-framework/src/modules/community/components/blocks/FooterBlogpost.vue.cjs +1 -1
  79. package/dist/prometheus-framework/src/modules/community/components/blocks/FooterBlogpost.vue.js +57 -29
  80. package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.cjs +1 -1
  81. package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.js +86 -76
  82. package/dist/prometheus-framework/src/modules/community/components/pages/Blog.vue.cjs +1 -1
  83. package/dist/prometheus-framework/src/modules/community/components/pages/Blog.vue.js +58 -28
  84. package/dist/prometheus-framework/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
  85. package/dist/prometheus-framework/src/modules/community/components/pages/CreateBlogPost.vue.js +71 -80
  86. package/dist/prometheus-framework/src/modules/community/components/sections/Comment.vue.cjs +1 -0
  87. package/dist/prometheus-framework/src/modules/community/components/sections/Comment.vue.js +104 -0
  88. package/dist/prometheus-framework/src/modules/community/components/sections/Comments.vue.cjs +1 -1
  89. package/dist/prometheus-framework/src/modules/community/components/sections/Comments.vue.js +99 -54
  90. package/dist/prometheus-framework/src/modules/community/components/sections/HotPosts.vue.cjs +1 -1
  91. package/dist/prometheus-framework/src/modules/community/components/sections/HotPosts.vue.js +27 -28
  92. package/dist/prometheus-framework/src/modules/community/store/blogposts.cjs +1 -1
  93. package/dist/prometheus-framework/src/modules/community/store/blogposts.js +45 -34
  94. package/dist/prometheus-framework/src/modules/constructor/components/elements/Audio.vue.cjs +1 -1
  95. package/dist/prometheus-framework/src/modules/constructor/components/elements/Audio.vue.js +31 -29
  96. package/dist/prometheus-framework/src/modules/constructor/components/elements/ImageUpload.vue.cjs +1 -1
  97. package/dist/prometheus-framework/src/modules/constructor/components/elements/ImageUpload.vue.js +32 -27
  98. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue.cjs +5 -0
  99. package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue.js +67 -0
  100. package/dist/prometheus-framework/src/modules/constructor/components/elements/Video.vue.cjs +1 -1
  101. package/dist/prometheus-framework/src/modules/constructor/components/elements/Video.vue.js +16 -16
  102. package/dist/prometheus-framework/src/modules/constructor/components/sections/Constructor.vue.cjs +1 -1
  103. package/dist/prometheus-framework/src/modules/constructor/components/sections/Constructor.vue.js +119 -112
  104. package/dist/prometheus-framework/src/modules/events/components/blocks/CardEvent.vue.js +6 -6
  105. package/dist/prometheus-framework/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
  106. package/dist/prometheus-framework/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  107. package/dist/prometheus-framework/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
  108. package/dist/prometheus-framework/src/modules/events/components/pages/EditEvent.vue.js +1 -1
  109. package/dist/prometheus-framework/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
  110. package/dist/prometheus-framework/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
  111. package/dist/prometheus-framework/src/modules/gallery/components/pages/Gallery.vue.cjs +1 -1
  112. package/dist/prometheus-framework/src/modules/gallery/components/pages/Gallery.vue.js +22 -22
  113. package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
  114. package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.js +27 -27
  115. package/dist/prometheus-framework/src/modules/globals/components/blocks/BlockFilter.vue.cjs +1 -1
  116. package/dist/prometheus-framework/src/modules/globals/components/blocks/BlockFilter.vue.js +33 -22
  117. package/dist/prometheus-framework/src/modules/globals/components/blocks/CardHeader.vue.js +16 -16
  118. package/dist/prometheus-framework/src/modules/marketplace/store/marketplace.cjs +1 -1
  119. package/dist/prometheus-framework/src/modules/marketplace/store/marketplace.js +3 -9
  120. package/dist/prometheus-framework/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
  121. package/dist/prometheus-framework/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
  122. package/dist/prometheus-framework/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -1
  123. package/dist/prometheus-framework/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
  124. package/dist/prometheus-framework/src/modules/orders/components/sections/FormCustomerDetails.vue.js +9 -9
  125. package/dist/prometheus-framework/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
  126. package/dist/prometheus-framework/src/modules/organizations/components/blocks/CardOrganization.vue.js +39 -38
  127. package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
  128. package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.js +1 -1
  129. package/dist/prometheus-framework/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
  130. package/dist/prometheus-framework/src/modules/organizations/components/pages/Members.vue.js +2 -2
  131. package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.cjs +1 -1
  132. package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.js +112 -85
  133. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
  134. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.js +36 -35
  135. package/dist/prometheus-framework/src/modules/organizations/components/sections/DetailsTab.vue.js +8 -8
  136. package/dist/prometheus-framework/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
  137. package/dist/prometheus-framework/src/modules/organizations/components/sections/Documents.vue.js +1 -1
  138. package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
  139. package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
  140. package/dist/prometheus-framework/src/modules/organizations/components/sections/Publics.vue.cjs +1 -1
  141. package/dist/prometheus-framework/src/modules/organizations/components/sections/Publics.vue.js +17 -17
  142. package/dist/prometheus-framework/src/modules/organizations/store/memberships.cjs +1 -1
  143. package/dist/prometheus-framework/src/modules/organizations/store/memberships.js +18 -18
  144. package/dist/prometheus-framework/src/modules/products/components/blocks/CardProduct.vue.cjs +1 -1
  145. package/dist/prometheus-framework/src/modules/products/components/blocks/CardProduct.vue.js +6 -6
  146. package/dist/prometheus-framework/src/modules/products/components/blocks/ImagesThumbnails.vue.cjs +1 -1
  147. package/dist/prometheus-framework/src/modules/products/components/blocks/ImagesThumbnails.vue.js +12 -12
  148. package/dist/prometheus-framework/src/modules/products/components/pages/EditLeftover.vue.cjs +1 -1
  149. package/dist/prometheus-framework/src/modules/products/components/pages/EditLeftover.vue.js +1 -1
  150. package/dist/prometheus-framework/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
  151. package/dist/prometheus-framework/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
  152. package/dist/prometheus-framework/src/modules/products/components/pages/ProductRecommmendation.vue.cjs +1 -1
  153. package/dist/prometheus-framework/src/modules/products/components/pages/ProductRecommmendation.vue.js +3 -2
  154. package/dist/prometheus-framework/src/modules/products/components/sections/HeroRecommendation.vue.cjs +1 -1
  155. package/dist/prometheus-framework/src/modules/products/components/sections/HeroRecommendation.vue.js +32 -37
  156. package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  157. package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  158. package/dist/prometheus-framework/src/modules/spots/components/blocks/CardSpot.vue.js +4 -4
  159. package/dist/prometheus-framework/src/modules/users/components/blocks/CardUser.vue.cjs +1 -1
  160. package/dist/prometheus-framework/src/modules/users/components/blocks/CardUser.vue.js +14 -14
  161. package/dist/prometheus-framework/src/modules/users/components/pages/Profile.vue.js +29 -29
  162. package/dist/prometheus-framework/src/modules/users/components/pages/ProfileBlogposts.vue.cjs +1 -1
  163. package/dist/prometheus-framework/src/modules/users/components/pages/ProfileBlogposts.vue.js +53 -35
  164. package/dist/prometheus-framework/src/modules/wallet/components/blocks/CardBalanceReplenished.vue.cjs +1 -0
  165. package/dist/prometheus-framework/src/modules/wallet/components/blocks/CardBalanceReplenished.vue.js +30 -0
  166. package/dist/prometheus-framework/src/modules/wallet/components/blocks/CardDeposite.vue.cjs +1 -0
  167. package/dist/prometheus-framework/src/modules/wallet/components/blocks/CardDeposite.vue.js +42 -0
  168. package/dist/prometheus-framework/src/modules/wallet/components/blocks/CashDeposite.vue.cjs +1 -0
  169. package/dist/prometheus-framework/src/modules/wallet/components/blocks/CashDeposite.vue.js +26 -0
  170. package/dist/prometheus-framework/src/modules/wallet/components/blocks/CryptoDeposite.vue.cjs +1 -0
  171. package/dist/prometheus-framework/src/modules/wallet/components/blocks/CryptoDeposite.vue.js +42 -0
  172. package/dist/prometheus-framework/src/modules/wallet/localization/Wallet.json.cjs +1 -0
  173. package/dist/prometheus-framework/src/modules/wallet/localization/Wallet.json.js +26 -0
  174. package/dist/prometheus-framework/src/modules/wallet/views/components/pages/Wallet.vue.cjs +1 -1
  175. package/dist/prometheus-framework/src/modules/wallet/views/components/pages/Wallet.vue.js +154 -77
  176. package/dist/prometheus-framework.cjs.js +1 -1
  177. package/dist/prometheus-framework.es.js +14 -14
  178. package/dist/queryProcessor-DQSFR9YA.mjs +179 -0
  179. package/dist/queryProcessor-iewDZq_f.js +178 -0
  180. package/dist/style.css +1 -1
  181. package/dist/wallet.server.js +80 -27
  182. package/dist/wallet.server.mjs +80 -27
  183. package/dist/web-DZUec7pP.js +1 -0
  184. package/dist/web-krQQeSb6.mjs +54 -0
  185. package/package.json +1 -1
  186. package/src/components/Address/Address.vue +1 -1
  187. package/src/components/Chips/Chips.vue +1 -1
  188. package/src/components/Completion/Completion.vue +1 -4
  189. package/src/components/DatePicker/Calendar.vue +1 -1
  190. package/src/components/Draggable/Draggable.vue +113 -0
  191. package/src/components/Dropdown/Dropdown.vue +1 -1
  192. package/src/components/Feed/Feed.vue +18 -12
  193. package/src/components/FieldBig/FieldBig.vue +11 -1
  194. package/src/components/FieldPhone/FieldPhone.vue +1 -1
  195. package/src/components/FieldTags/FieldTags.vue +2 -1
  196. package/src/components/FieldTags/tag-input.vue +1 -1
  197. package/src/components/LocationMarker/LocationMarker.vue +1 -1
  198. package/src/components/PhotoViewer/PhotoViewer.vue +1 -1
  199. package/src/components/Shader/Shader.vue +2 -2
  200. package/src/components/Slider/Slider.vue +1 -5
  201. package/src/components/Spoiler/Spoiler.vue +1 -1
  202. package/src/components/Text/Text.vue +1 -4
  203. package/src/components/Tooltip/Tooltip.vue +1 -1
  204. package/src/components/Upload/Upload.vue +5 -3
  205. package/src/modules/auth/controllers/auth.controller.js +0 -2
  206. package/src/modules/auth/store/auth.js +2 -2
  207. package/src/modules/community/DOCUMENTATION.MD +4 -0
  208. package/src/modules/community/community.client.js +0 -2
  209. package/src/modules/community/components/blocks/CardBlogpost.vue +6 -2
  210. package/src/modules/community/components/blocks/FooterBlogpost.vue +21 -5
  211. package/src/modules/community/components/layouts/Community.vue +15 -11
  212. package/src/modules/community/components/pages/Blog.vue +25 -32
  213. package/src/modules/community/components/pages/CreateBlogPost.vue +8 -15
  214. package/src/modules/community/components/sections/Comment.vue +123 -0
  215. package/src/modules/community/components/sections/Comments.vue +90 -19
  216. package/src/modules/community/components/sections/HotPosts.vue +3 -6
  217. package/src/modules/community/controllers/blog.controller.js +1 -1
  218. package/src/modules/community/controllers/comments.controller.aggr.js +280 -0
  219. package/src/modules/community/controllers/comments.controller.js +187 -38
  220. package/src/modules/community/controllers/comments.controller.populate.js +180 -0
  221. package/src/modules/community/models/comment.model.js +15 -0
  222. package/src/modules/community/store/blogposts.js +20 -2
  223. package/src/modules/constructor/components/elements/Audio.vue +28 -40
  224. package/src/modules/constructor/components/elements/ImageUpload.vue +12 -7
  225. package/src/modules/constructor/components/elements/Video.vue +10 -18
  226. package/src/modules/constructor/components/sections/Constructor.vue +54 -47
  227. package/src/modules/files/controllers/files.controller.js +2 -0
  228. package/src/modules/files/middlewares/server/middlewareBusboy.js +32 -4
  229. package/src/modules/files/routes/files.routes.js +8 -0
  230. package/src/modules/globals/components/blocks/BlockFilter.vue +17 -7
  231. package/src/modules/globals/components/partials/Header.vue +12 -7
  232. package/src/modules/globals/controllers/utils/queryProcessor.js +1 -0
  233. package/src/modules/icons/logos/Logotype.vue +8 -6
  234. package/src/modules/icons/logos/LogotypeNunito.vue +12 -0
  235. package/src/modules/marketplace/components/layouts/Marketplace.vue +29 -27
  236. package/src/modules/marketplace/store/marketplace.js +2 -8
  237. package/src/modules/organizations/components/blocks/CardOrganization.vue +1 -1
  238. package/src/modules/organizations/components/pages/Members.vue +1 -1
  239. package/src/modules/organizations/components/pages/Organization.vue +33 -5
  240. package/src/modules/organizations/components/pages/OrganizationEdit.vue +7 -4
  241. package/src/modules/organizations/components/sections/DetailsTab.vue +10 -10
  242. package/src/modules/organizations/components/sections/Publics.vue +2 -2
  243. package/src/modules/organizations/controllers/memberships.controller.js +2 -3
  244. package/src/modules/organizations/controllers/organizations.controller.js +1 -1
  245. package/src/modules/organizations/store/memberships.js +4 -1
  246. package/src/modules/products/components/blocks/CardProduct.vue +1 -1
  247. package/src/modules/products/components/sections/HeroRecommendation.vue +11 -8
  248. package/src/modules/products/models/product.model.js +2 -1
  249. package/src/modules/spots/components/layouts/Spots.vue +0 -3
  250. package/src/modules/spots/components/pages/Map.vue +13 -3
  251. package/src/modules/users/components/blocks/CardUser.vue +2 -2
  252. package/src/modules/users/components/pages/ProfileBlogposts.vue +45 -28
  253. package/src/modules/wallet/components/blocks/CardBalanceReplenished.vue +40 -0
  254. package/src/modules/wallet/components/blocks/CardDeposite.vue +55 -0
  255. package/src/modules/wallet/components/blocks/CashDeposite.vue +28 -0
  256. package/src/modules/wallet/components/blocks/CryptoDeposite.vue +55 -0
  257. package/src/modules/wallet/controllers/factories/rewards.factory.aggr.js +181 -0
  258. package/src/modules/wallet/controllers/factories/rewards.factory.js +87 -113
  259. package/src/modules/wallet/controllers/factories/rewards.factory.population.js +213 -0
  260. package/src/modules/wallet/localization/Wallet.json +22 -0
  261. package/src/modules/wallet/views/components/pages/Wallet.vue +153 -53
  262. package/src/styles/base/all.scss +16 -26
  263. package/src/styles/config.scss +70 -34
  264. package/src/styles/typography.scss +5 -5
  265. package/src/modules/community/components/sections/Feed.vue +0 -148
  266. package/src/modules/middlewares/server/accessors/AccessController.js +0 -33
  267. package/src/modules/middlewares/server/accessors/ReadDepartments.js +0 -101
@@ -0,0 +1,280 @@
1
+ const commentControllerFactory = (db) => {
2
+ const Comment = db.comment;
3
+ const Membership = db.membership;
4
+
5
+ const read = async (req, res) => {
6
+ try {
7
+ const { target, type, user, maxDepth = 4, parentId = null } = req.query;
8
+
9
+ let conditions = {
10
+ target: new db.mongoose.Types.ObjectId(target),
11
+ type: type,
12
+ };
13
+
14
+ if (parentId) {
15
+ conditions.parent = new db.mongoose.Types.ObjectId(parentId);
16
+ } else {
17
+ conditions.parent = null;
18
+ }
19
+
20
+ let blockedMembers = [];
21
+
22
+ if (user) {
23
+ const memberships = await Membership.find({ user: user, role: 'blocked' });
24
+ blockedMembers = memberships.map(membership => membership.target);
25
+ }
26
+
27
+ const pipeline = [
28
+ { $match: conditions },
29
+ { $sort: { createdAt: -1 } },
30
+ {
31
+ $graphLookup: {
32
+ from: 'comments',
33
+ startWith: '$_id',
34
+ connectFromField: '_id',
35
+ connectToField: 'parent',
36
+ as: 'allChildren',
37
+ depthField: 'childDepth',
38
+ maxDepth: 2
39
+ }
40
+ },
41
+ {
42
+ $lookup: {
43
+ from: 'users',
44
+ localField: 'user',
45
+ foreignField: '_id',
46
+ as: 'user'
47
+ }
48
+ },
49
+ { $unwind: '$user' },
50
+ {
51
+ $lookup: {
52
+ from: 'users',
53
+ localField: 'allChildren.user',
54
+ foreignField: '_id',
55
+ as: 'childUsers'
56
+ }
57
+ },
58
+ {
59
+ $addFields: {
60
+ childrenCount: {
61
+ $size: {
62
+ $filter: {
63
+ input: '$allChildren',
64
+ as: 'child',
65
+ cond: { $eq: ['$$child.parent', '$_id'] }
66
+ }
67
+ }
68
+ }
69
+ }
70
+ },
71
+ {
72
+ $addFields: {
73
+ children: {
74
+ $map: {
75
+ input: {
76
+ $filter: {
77
+ input: '$allChildren',
78
+ as: 'child',
79
+ cond: { $eq: ['$$child.childDepth', 0] }
80
+ }
81
+ },
82
+ as: 'child',
83
+ in: {
84
+ $mergeObjects: [
85
+ '$$child',
86
+ {
87
+ user: {$arrayElemAt: [{$filter: {input: '$childUsers', as: 'childUser', cond: { $eq: ['$$childUser._id', '$$child.user'] } } }, 0 ] },
88
+ childrenCount: {$size: {$filter: {input: '$allChildren', as: 'grandchild', cond: { $eq: ['$$grandchild.parent', '$$child._id'] } } } },
89
+ children: {
90
+ $map: {
91
+ input: {
92
+ $filter: {
93
+ input: '$allChildren',
94
+ as: 'grandchild',
95
+ cond: { $eq: ['$$grandchild.parent', '$$child._id'] }
96
+ }
97
+ },
98
+ as: 'grandchild',
99
+ in: {
100
+ $mergeObjects: [
101
+ '$$grandchild',
102
+ {
103
+ user: {$arrayElemAt: [{$filter: {input: '$childUsers', as: 'childUser', cond: { $eq: ['$$childUser._id', '$$grandchild.user'] } } }, 0 ] },
104
+ childrenCount: {$size: {$filter: {input: '$allChildren', as: 'greatgrandchild', cond: { $eq: ['$$greatgrandchild.parent', '$$grandchild._id'] } } } },
105
+ hasMore: {$cond: {if: {$gt: [{$size: {$filter: {input: '$allChildren', as: 'greatgrandchild', cond: { $eq: ['$$greatgrandchild.parent', '$$grandchild._id'] } } } }, 0 ] }, then: true, else: false } }
106
+ }
107
+ ]
108
+ }
109
+ }
110
+ }
111
+ }
112
+ ]
113
+ }
114
+ }
115
+ }
116
+ }
117
+ },
118
+ {
119
+ $project: {
120
+ _id: 1,
121
+ content: 1,
122
+ type: 1,
123
+ target: 1,
124
+ 'user.username': 1,
125
+ 'user.profile.photo': 1,
126
+ 'user.profile.name': 1,
127
+ 'user._id': 1,
128
+ depth: 1,
129
+ createdAt: 1,
130
+ childrenCount: 1,
131
+ children: 1
132
+ }
133
+ }
134
+ ];
135
+
136
+ if (blockedMembers.length > 0) {
137
+ pipeline.unshift({ $match: { user: { $nin: blockedMembers } } });
138
+ }
139
+
140
+ const comments = await Comment.aggregate(pipeline);
141
+
142
+ function buildCommentTree(comments) {
143
+ // Создаем Map для быстрого доступа ко всем комментариям по их ID
144
+ const commentMap = new Map();
145
+
146
+ // Функция для преобразования MongoDB ObjectId в строку
147
+ const objectIdToString = (id) => id.toString();
148
+
149
+ // Функция для добавления комментария и его дочерних элементов в Map
150
+ function addToMap(comment) {
151
+ const commentId = objectIdToString(comment._id);
152
+ if (!commentMap.has(commentId)) {
153
+ commentMap.set(commentId, {...comment, children: []});
154
+ if (comment.children && comment.children.length > 0) {
155
+ comment.children.forEach(addToMap);
156
+ }
157
+ }
158
+ }
159
+
160
+ // Добавляем все комментарии и их дочерние элементы в Map
161
+ comments.forEach(addToMap);
162
+
163
+ // Строим дерево
164
+ commentMap.forEach((comment) => {
165
+ if (comment.parent) {
166
+ const parentId = objectIdToString(comment.parent);
167
+ const parent = commentMap.get(parentId);
168
+ if (parent) {
169
+ parent.children.push(comment);
170
+ }
171
+ }
172
+ });
173
+
174
+ // Возвращаем только корневые комментарии
175
+ return comments.map(comment => {
176
+ const commentId = objectIdToString(comment._id);
177
+ return commentMap.get(commentId);
178
+ });
179
+ }
180
+
181
+
182
+ commentsTree = buildCommentTree(comments)
183
+
184
+ console.log(commentsTree)
185
+
186
+ res.status(200).json(commentsTree);
187
+ } catch (error) {
188
+ console.error(error);
189
+ res.status(500).json({ message: error.message });
190
+ }
191
+ };
192
+
193
+
194
+ const create = async (req, res) => {
195
+ try {
196
+ const { user, type, target, content, parent } = req.body;
197
+
198
+ let depth = 0;
199
+
200
+ if (parent) {
201
+ const parentComment = await Comment.findById(parent);
202
+ if (!parentComment) {
203
+ return res.status(404).send({ message: "Parent comment not found." });
204
+ }
205
+ depth = parentComment.depth + 1;
206
+ }
207
+
208
+ const comment = new Comment({
209
+ user,
210
+ type,
211
+ target,
212
+ content,
213
+ parent,
214
+ depth
215
+ });
216
+
217
+ const savedComment = await comment.save();
218
+
219
+ if (parent) {
220
+ await Comment.findByIdAndUpdate(parent, {
221
+ $push: { children: savedComment._id }
222
+ });
223
+ }
224
+
225
+ const populatedComment = await Comment.findById(savedComment._id)
226
+ .populate({
227
+ path: 'user',
228
+ select: 'username profile.photo profile.name _id'
229
+ })
230
+
231
+ res.status(201).send(populatedComment);
232
+ } catch (err) {
233
+ console.error(err);
234
+ res.status(500).send({
235
+ message: err.message || "Some error occurred while creating the comment."
236
+ });
237
+ }
238
+ };
239
+
240
+ const update = async (req, res) => {
241
+ try {
242
+ const comment = await Comment.findByIdAndUpdate(req.params._id, req.body, { new: true })
243
+ .populate({
244
+ path: 'user',
245
+ select: 'username profile.photo profile.name _id'
246
+ });
247
+
248
+ if (!comment) {
249
+ return res.status(404).send({ message: "Comment not found." });
250
+ }
251
+
252
+ res.status(200).send(comment);
253
+ } catch (err) {
254
+ res.status(500).send({ message: err.message });
255
+ }
256
+ };
257
+
258
+ const deleteComment = async (req, res) => {
259
+ try {
260
+ const comment = await Comment.findByIdAndRemove(req.params._id);
261
+
262
+ if (!comment) {
263
+ return res.status(404).send({ message: "Comment is not deleted." });
264
+ }
265
+
266
+ res.status(200).send(comment);
267
+ } catch (err) {
268
+ res.status(500).send({ message: err.message });
269
+ }
270
+ };
271
+
272
+ return {
273
+ read,
274
+ create,
275
+ update,
276
+ delete: deleteComment
277
+ };
278
+ };
279
+
280
+ module.exports = commentControllerFactory;
@@ -1,66 +1,215 @@
1
1
  const commentControllerFactory = (db) => {
2
2
  const Comment = db.comment;
3
- const Membership = db.membership;
3
+ const Membership = db.membership;
4
4
 
5
5
  const read = async (req, res) => {
6
6
  try {
7
- let conditions = { target: req.query.target }; // базовое условие для поиска комментариев
8
-
9
- // Если в запросе есть пользователь, мы исключаем комментарии от заблокированных пользователей
10
- if (req.query.user) {
11
- const memberships = await Membership.find({ user: req.query.user });
12
- const blockedMembers = memberships
13
- .filter(membership => membership.role === 'blocked')
14
- .map(membership => membership.target);
15
-
16
- // Если есть заблокированные пользователи, добавляем условие в запрос
17
- if (blockedMembers.length > 0) {
18
- conditions.user = { "$nin": blockedMembers }; // добавляем условие, исключающее заблокированных пользователей
19
- }
7
+ const { target, type, user, maxDepth = 4, parentId = null } = req.query;
8
+
9
+ let conditions = {
10
+ target: new db.mongoose.Types.ObjectId(target),
11
+ type: type,
12
+ };
13
+
14
+ if (parentId) {
15
+ conditions.parent = new db.mongoose.Types.ObjectId(parentId);
16
+ } else {
17
+ conditions.parent = null;
20
18
  }
21
19
 
22
- // Теперь мы добавили условия, исключающие комментарии от заблокированных пользователей, в наш запрос.
23
- const comments = await Comment.find(conditions)
24
- .populate({
25
- path: 'user',
26
- select: 'username profile.photo profile.name _id'
20
+ let blockedMembers = [];
21
+
22
+ if (user) {
23
+ const memberships = await Membership.find({ user: user, role: 'blocked' });
24
+ blockedMembers = memberships.map(membership => membership.target);
25
+ }
26
+
27
+ const pipeline = [
28
+ { $match: conditions },
29
+ { $sort: { createdAt: 1 } },
30
+ {
31
+ $graphLookup: {
32
+ from: 'comments',
33
+ startWith: '$_id',
34
+ connectFromField: '_id',
35
+ connectToField: 'parent',
36
+ as: 'children',
37
+ depthField: 'childDepth'
38
+ }
39
+ },
40
+ {
41
+ $lookup: {
42
+ from: 'users',
43
+ localField: 'user',
44
+ foreignField: '_id',
45
+ as: 'user'
46
+ }
47
+ },
48
+ { $unwind: '$user' },
49
+ {
50
+ $lookup: {
51
+ from: 'users',
52
+ localField: 'children.user',
53
+ foreignField: '_id',
54
+ as: 'childUsers'
55
+ }
56
+ },
57
+ {
58
+ $project: {
59
+ _id: 1,
60
+ content: 1,
61
+ type: 1,
62
+ target: 1,
63
+ 'user.username': 1,
64
+ 'user.profile.photo': 1,
65
+ 'user.profile.name': 1,
66
+ 'user._id': 1,
67
+ depth: 1,
68
+ createdAt: 1,
69
+ childrenCount: { $size: '$children' },
70
+ children: {
71
+ $map: {
72
+ input: '$children',
73
+ as: 'child',
74
+ in: {
75
+ _id: '$$child._id',
76
+ content: '$$child.content',
77
+ type: '$$child.type',
78
+ parent: '$$child.parent',
79
+ target: '$$child.target',
80
+ user: {
81
+ $arrayElemAt: [
82
+ {
83
+ $filter: {
84
+ input: '$childUsers',
85
+ as: 'childUser',
86
+ cond: { $eq: ['$$childUser._id', '$$child.user'] }
87
+ }
88
+ },
89
+ 0
90
+ ]
91
+ },
92
+ depth: '$$child.depth',
93
+ createdAt: '$$child.createdAt',
94
+ childrenCount: { $size: '$$child.children' }
95
+ }
96
+ }
97
+ }
98
+ }
99
+ },
100
+ ];
101
+
102
+ if (blockedMembers.length > 0) {
103
+ pipeline.unshift({ $match: { user: { $nin: blockedMembers } } });
104
+ }
105
+
106
+ const comments = await Comment.aggregate(pipeline);
107
+
108
+ function buildCommentTree(comments) {
109
+ // Создаем Map для быстрого доступа ко всем комментариям по их ID
110
+ const commentMap = new Map();
111
+
112
+ // Функция для преобразования MongoDB ObjectId в строку
113
+ const objectIdToString = (id) => id.toString();
114
+
115
+ // Функция для добавления комментария и его дочерних элементов в Map
116
+ function addToMap(comment) {
117
+ const commentId = objectIdToString(comment._id);
118
+ if (!commentMap.has(commentId)) {
119
+ commentMap.set(commentId, {...comment, children: []});
120
+ if (comment.children && comment.children.length > 0) {
121
+ comment.children.forEach(addToMap);
122
+ }
123
+ }
124
+ }
125
+
126
+ // Добавляем все комментарии и их дочерние элементы в Map
127
+ comments.forEach(addToMap);
128
+
129
+ // Строим дерево
130
+ commentMap.forEach((comment) => {
131
+ if (comment.parent) {
132
+ const parentId = objectIdToString(comment.parent);
133
+ const parent = commentMap.get(parentId);
134
+ if (parent) {
135
+ parent.children.push(comment);
136
+ }
137
+ }
27
138
  });
28
139
 
29
- if (!comments) {
30
- return res.status(404).send({ message: "Comments not found." });
140
+ // Функция для рекурсивной сортировки дочерних комментариев
141
+ function sortChildren(comment) {
142
+ if (comment.children.length > 0) {
143
+ comment.children.sort((a, b) => new Date(a.createdAt) - new Date(b.createdAt));
144
+ comment.children.forEach(sortChildren);
145
+ }
146
+ }
147
+
148
+ // Получаем корневые комментарии и сортируем их
149
+ const rootComments = comments.map(comment => {
150
+ const commentId = objectIdToString(comment._id);
151
+ return commentMap.get(commentId);
152
+ }).filter(comment => !comment.parent);
153
+
154
+ // Сортируем корневые комментарии по createdAt
155
+ rootComments.sort((a, b) => new Date(a.createdAt) - new Date(b.createdAt));
156
+
157
+ // Рекурсивно сортируем дочерние комментарии
158
+ rootComments.forEach(sortChildren);
159
+
160
+ return rootComments;
31
161
  }
32
162
 
33
- const countedComments = comments.map(comment => {
34
- return {
35
- ...comment._doc,
36
- user: comment.user,
37
- };
38
- });
163
+ commentsTree = buildCommentTree(comments)
39
164
 
40
- res.status(200).send(countedComments);
41
- } catch (err) {
42
- res.status(500).send({ message: err.message });
165
+ console.log(commentsTree)
166
+
167
+ res.status(200).json(commentsTree);
168
+ } catch (error) {
169
+ console.error(error);
170
+ res.status(500).json({ message: error.message });
43
171
  }
44
172
  };
45
173
 
46
174
 
47
175
  const create = async (req, res) => {
48
176
  try {
177
+ const { user, type, target, content, parent } = req.body;
178
+
179
+ let depth = 0;
180
+
181
+ if (parent) {
182
+ const parentComment = await Comment.findById(parent);
183
+ if (!parentComment) {
184
+ return res.status(404).send({ message: "Parent comment not found." });
185
+ }
186
+ depth = parentComment.depth + 1;
187
+ }
188
+
49
189
  const comment = new Comment({
50
- user: req.body.user,
51
- type: req.body.type,
52
- target: req.body.target,
53
- content: req.body.content
190
+ user,
191
+ type,
192
+ target,
193
+ content,
194
+ parent,
195
+ depth
54
196
  });
55
197
 
56
- const data = await comment.save();
57
- const populatedComment = await Comment.findOne({ _id: data._id })
198
+ const savedComment = await comment.save();
199
+
200
+ if (parent) {
201
+ await Comment.findByIdAndUpdate(parent, {
202
+ $push: { children: savedComment._id }
203
+ });
204
+ }
205
+
206
+ const populatedComment = await Comment.findById(savedComment._id)
58
207
  .populate({
59
208
  path: 'user',
60
209
  select: 'username profile.photo profile.name _id'
61
- });
210
+ })
62
211
 
63
- res.status(200).send(populatedComment);
212
+ res.status(201).send(populatedComment);
64
213
  } catch (err) {
65
214
  console.error(err);
66
215
  res.status(500).send({