@ozdao/martyrs 0.2.518 → 0.2.520

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (509) hide show
  1. package/dist/_virtual/index.cjs +4 -4
  2. package/dist/_virtual/index.js +4 -4
  3. package/dist/_virtual/index2.cjs +4 -4
  4. package/dist/_virtual/index2.js +4 -4
  5. package/dist/{abac-Cf_9lCSh.js → abac-CnJsrv8S.js} +3 -3
  6. package/dist/{abac-6LjoG9u-.cjs → abac-DOyUjhee.cjs} +3 -3
  7. package/dist/builder.cjs +27 -25
  8. package/dist/builder.js +27 -25
  9. package/dist/chats.server.cjs +198 -1
  10. package/dist/chats.server.js +198 -1
  11. package/dist/{crud-sE7GLPbj.js → crud-BIFl1W1i.js} +6 -6
  12. package/dist/{crud-JN_LFj01.cjs → crud-CC6k6yY5.cjs} +6 -6
  13. package/dist/{globals.logger-CZMgIMlM.cjs → globals.logger-BuW7JHMY.cjs} +63 -53
  14. package/dist/{globals.logger-Bf6rRU7j.js → globals.logger-VRHh-WUW.js} +63 -53
  15. package/dist/{globals.observer-CV2wCzzh.cjs → globals.observer-C_FYclgV.cjs} +36 -1
  16. package/dist/{globals.observer-CDqUjVU5.js → globals.observer-MZsqaE6F.js} +36 -1
  17. package/dist/globals.server.cjs +1 -1
  18. package/dist/globals.server.js +1 -1
  19. package/dist/inventory.server.cjs +276 -376
  20. package/dist/inventory.server.js +276 -376
  21. package/dist/main-BM3GslOO.cjs +11 -0
  22. package/dist/{main-wmEhGVvD.js → main-Qcn7YlTx.js} +1834 -1830
  23. package/dist/martyrs/src/components/Address/{Address.vue2.cjs → Address.vue.cjs} +2 -2
  24. package/dist/martyrs/src/components/Address/{Address.vue2.js.map → Address.vue.cjs.map} +1 -1
  25. package/dist/martyrs/src/components/Address/{Address.vue2.js → Address.vue.js} +2 -2
  26. package/dist/martyrs/src/components/Address/Address.vue.js.map +1 -0
  27. package/dist/martyrs/src/components/Button/Button.vue.cjs +1 -1
  28. package/dist/martyrs/src/components/Button/Button.vue.cjs.map +1 -1
  29. package/dist/martyrs/src/components/Button/Button.vue.js +1 -1
  30. package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -1
  31. package/dist/martyrs/src/components/Chips/{Chips.vue.cjs → Chips.vue2.cjs} +2 -2
  32. package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +1 -0
  33. package/dist/martyrs/src/components/Chips/{Chips.vue.js → Chips.vue2.js} +2 -2
  34. package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +1 -0
  35. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs → Dropdown.vue2.cjs} +2 -2
  36. package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +1 -0
  37. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.js → Dropdown.vue2.js} +2 -2
  38. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs.map → Dropdown.vue2.js.map} +1 -1
  39. package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs +0 -93
  40. package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs.map +1 -1
  41. package/dist/martyrs/src/components/EditImages/EditImages.vue.js +1 -94
  42. package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -1
  43. package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs +93 -0
  44. package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs.map +1 -1
  45. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js +94 -1
  46. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +1 -1
  47. package/dist/martyrs/src/components/Feed/Feed.vue.cjs +2 -3
  48. package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
  49. package/dist/martyrs/src/components/Feed/Feed.vue.js +2 -3
  50. package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
  51. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
  52. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
  53. package/dist/martyrs/src/components/Loader/Loader.vue2.cjs +1 -1
  54. package/dist/martyrs/src/components/Loader/Loader.vue2.cjs.map +1 -1
  55. package/dist/martyrs/src/components/Loader/Loader.vue2.js +1 -1
  56. package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +1 -1
  57. package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.cjs → LocationMarker.vue.cjs} +2 -2
  58. package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.js.map → LocationMarker.vue.cjs.map} +1 -1
  59. package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.js → LocationMarker.vue.js} +2 -2
  60. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js.map +1 -0
  61. package/dist/martyrs/src/components/Select/{Select.vue2.cjs → Select.vue.cjs} +2 -2
  62. package/dist/martyrs/src/components/Select/{Select.vue2.js.map → Select.vue.cjs.map} +1 -1
  63. package/dist/martyrs/src/components/Select/{Select.vue2.js → Select.vue.js} +2 -2
  64. package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -0
  65. package/dist/martyrs/src/modules/auth/views/components/blocks/CardUser.vue.cjs +2 -2
  66. package/dist/martyrs/src/modules/auth/views/components/blocks/CardUser.vue.js +2 -2
  67. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs +1 -1
  68. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs.map +1 -1
  69. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +1 -1
  70. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js.map +1 -1
  71. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +2 -2
  72. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs.map +1 -1
  73. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +4 -4
  74. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js.map +1 -1
  75. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +41 -51
  76. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs.map +1 -1
  77. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +59 -69
  78. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
  79. package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.cjs +11 -13
  80. package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.cjs.map +1 -1
  81. package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js +11 -13
  82. package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js.map +1 -1
  83. package/dist/martyrs/src/modules/auth/views/store/auth.cjs +10 -1
  84. package/dist/martyrs/src/modules/auth/views/store/auth.cjs.map +1 -1
  85. package/dist/martyrs/src/modules/auth/views/store/auth.js +10 -1
  86. package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
  87. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs +6 -0
  88. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs.map +1 -1
  89. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +6 -0
  90. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +1 -1
  91. package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.cjs +27 -11
  92. package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.cjs.map +1 -1
  93. package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js +28 -12
  94. package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js.map +1 -1
  95. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs +62 -0
  96. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs.map +1 -1
  97. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js +63 -1
  98. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js.map +1 -1
  99. package/dist/martyrs/src/modules/chats/store/chat.store.cjs +60 -1
  100. package/dist/martyrs/src/modules/chats/store/chat.store.cjs.map +1 -1
  101. package/dist/martyrs/src/modules/chats/store/chat.store.js +60 -1
  102. package/dist/martyrs/src/modules/chats/store/chat.store.js.map +1 -1
  103. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
  104. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
  105. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs +3 -3
  106. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs.map +1 -1
  107. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +3 -3
  108. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js.map +1 -1
  109. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +2 -2
  110. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -2
  111. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
  112. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
  113. package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs +50 -368
  114. package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs.map +1 -1
  115. package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js +53 -371
  116. package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js.map +1 -1
  117. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +1 -1
  118. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +1 -1
  119. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
  120. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
  121. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
  122. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs.map +1 -1
  123. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
  124. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js.map +1 -1
  125. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +2 -3
  126. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
  127. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -3
  128. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
  129. package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +2 -2
  130. package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs.map +1 -1
  131. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +2 -2
  132. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js.map +1 -1
  133. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +3 -3
  134. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +3 -3
  135. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
  136. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
  137. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +2 -2
  138. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +2 -2
  139. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +2 -2
  140. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs.map +1 -1
  141. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +2 -2
  142. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js.map +1 -1
  143. package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.cjs +2 -2
  144. package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.js +2 -2
  145. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
  146. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
  147. package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.cjs +16 -3
  148. package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.cjs.map +1 -1
  149. package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.js +17 -4
  150. package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.js.map +1 -1
  151. package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs +1 -1
  152. package/dist/martyrs/src/modules/globals/views/mixins/mixins.cjs +7 -0
  153. package/dist/martyrs/src/modules/globals/views/mixins/mixins.cjs.map +1 -1
  154. package/dist/martyrs/src/modules/globals/views/mixins/mixins.js +7 -0
  155. package/dist/martyrs/src/modules/globals/views/mixins/mixins.js.map +1 -1
  156. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +1 -1
  157. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +67 -43
  158. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs.map +1 -1
  159. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +68 -44
  160. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js.map +1 -1
  161. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs +22 -7
  162. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs.map +1 -1
  163. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +23 -8
  164. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js.map +1 -1
  165. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs +47 -32
  166. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs.map +1 -1
  167. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +48 -33
  168. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js.map +1 -1
  169. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +47 -26
  170. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs.map +1 -1
  171. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +48 -27
  172. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js.map +1 -1
  173. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +42 -52
  174. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs.map +1 -1
  175. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +43 -53
  176. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js.map +1 -1
  177. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +18 -18
  178. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs.map +1 -1
  179. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +3 -3
  180. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js.map +1 -1
  181. package/dist/martyrs/src/modules/inventory/store/{ inventory.store.cjs → inventory.store.cjs} +46 -2
  182. package/dist/martyrs/src/modules/inventory/store/inventory.store.cjs.map +1 -0
  183. package/dist/martyrs/src/modules/inventory/store/{ inventory.store.js → inventory.store.js} +46 -2
  184. package/dist/martyrs/src/modules/inventory/store/inventory.store.js.map +1 -0
  185. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +180 -19
  186. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs.map +1 -1
  187. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +181 -20
  188. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js.map +1 -1
  189. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
  190. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
  191. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
  192. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
  193. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +1 -1
  194. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
  195. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +1 -1
  196. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
  197. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +1 -1
  198. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
  199. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +1 -1
  200. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
  201. package/dist/martyrs/src/modules/music/router/music.cjs +1 -2
  202. package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
  203. package/dist/martyrs/src/modules/music/router/music.js +1 -2
  204. package/dist/martyrs/src/modules/music/router/music.js.map +1 -1
  205. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs +2 -2
  206. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs.map +1 -1
  207. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js +2 -2
  208. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js.map +1 -1
  209. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +1 -1
  210. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
  211. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +1 -1
  212. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +1 -1
  213. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
  214. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
  215. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +3 -4
  216. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs.map +1 -1
  217. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +3 -4
  218. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js.map +1 -1
  219. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.cjs +1 -1
  220. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
  221. package/dist/martyrs/src/modules/orders/orders.client.cjs +2 -2
  222. package/dist/martyrs/src/modules/orders/orders.client.cjs.map +1 -1
  223. package/dist/martyrs/src/modules/orders/orders.client.js +2 -2
  224. package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
  225. package/dist/martyrs/src/modules/orders/router/customers.router.cjs +1 -1
  226. package/dist/martyrs/src/modules/orders/router/customers.router.cjs.map +1 -1
  227. package/dist/martyrs/src/modules/orders/router/customers.router.js +1 -1
  228. package/dist/martyrs/src/modules/orders/router/customers.router.js.map +1 -1
  229. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +2 -24
  230. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs.map +1 -1
  231. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +5 -27
  232. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js.map +1 -1
  233. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
  234. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
  235. package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.cjs +4 -1
  236. package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.cjs.map +1 -1
  237. package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js +4 -1
  238. package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js.map +1 -1
  239. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +3 -3
  240. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs.map +1 -1
  241. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +3 -3
  242. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js.map +1 -1
  243. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs +195 -0
  244. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs.map +1 -0
  245. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +195 -0
  246. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js.map +1 -0
  247. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +402 -0
  248. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs.map +1 -0
  249. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +402 -0
  250. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js.map +1 -0
  251. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs +86 -0
  252. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs.map +1 -0
  253. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +86 -0
  254. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js.map +1 -0
  255. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +10 -10
  256. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs.map +1 -1
  257. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +11 -11
  258. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
  259. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +279 -191
  260. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs.map +1 -1
  261. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +285 -197
  262. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js.map +1 -1
  263. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +7 -7
  264. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
  265. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +7 -7
  266. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
  267. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
  268. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs.map +1 -1
  269. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -2
  270. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
  271. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
  272. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs.map +1 -1
  273. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  274. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js.map +1 -1
  275. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
  276. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
  277. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +3 -3
  278. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs.map +1 -1
  279. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +3 -3
  280. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js.map +1 -1
  281. package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.cjs +4 -4
  282. package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.cjs.map +1 -1
  283. package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.js +4 -4
  284. package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.js.map +1 -1
  285. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs +42 -41
  286. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs.map +1 -1
  287. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js +53 -52
  288. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js.map +1 -1
  289. package/dist/martyrs/src/modules/organizations/organizations.client.cjs +23 -16
  290. package/dist/martyrs/src/modules/organizations/organizations.client.cjs.map +1 -1
  291. package/dist/martyrs/src/modules/organizations/organizations.client.js +35 -28
  292. package/dist/martyrs/src/modules/organizations/organizations.client.js.map +1 -1
  293. package/dist/martyrs/src/modules/organizations/router/departments.router.cjs +0 -18
  294. package/dist/martyrs/src/modules/organizations/router/departments.router.cjs.map +1 -1
  295. package/dist/martyrs/src/modules/organizations/router/departments.router.js +0 -18
  296. package/dist/martyrs/src/modules/organizations/router/departments.router.js.map +1 -1
  297. package/dist/martyrs/src/modules/organizations/store/departments.store.cjs +6 -0
  298. package/dist/martyrs/src/modules/organizations/store/departments.store.cjs.map +1 -0
  299. package/dist/martyrs/src/modules/organizations/store/departments.store.js +6 -0
  300. package/dist/martyrs/src/modules/organizations/store/departments.store.js.map +1 -0
  301. package/dist/martyrs/src/modules/organizations/store/invites.store.cjs +6 -0
  302. package/dist/martyrs/src/modules/organizations/store/invites.store.cjs.map +1 -0
  303. package/dist/martyrs/src/modules/organizations/store/invites.store.js +6 -0
  304. package/dist/martyrs/src/modules/organizations/store/invites.store.js.map +1 -0
  305. package/dist/martyrs/src/modules/organizations/store/memberships.store.cjs +20 -0
  306. package/dist/martyrs/src/modules/organizations/store/memberships.store.cjs.map +1 -0
  307. package/dist/martyrs/src/modules/organizations/store/memberships.store.js +20 -0
  308. package/dist/martyrs/src/modules/organizations/store/memberships.store.js.map +1 -0
  309. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +1 -1
  310. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +1 -1
  311. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +3 -4
  312. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
  313. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +3 -4
  314. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
  315. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -2
  316. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
  317. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +1 -1
  318. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
  319. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
  320. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
  321. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
  322. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
  323. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +2 -2
  324. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
  325. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
  326. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
  327. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  328. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  329. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +3 -3
  330. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs.map +1 -1
  331. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +3 -3
  332. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js.map +1 -1
  333. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
  334. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
  335. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
  336. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  337. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +3 -3
  338. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +3 -3
  339. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs +60 -272
  340. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs.map +1 -1
  341. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js +62 -274
  342. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js.map +1 -1
  343. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
  344. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
  345. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
  346. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
  347. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +4 -4
  348. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +4 -4
  349. package/dist/martyrs.cjs.js +1 -1
  350. package/dist/martyrs.css +1 -1
  351. package/dist/martyrs.es.js +1 -1
  352. package/dist/music.server.cjs +9 -9
  353. package/dist/music.server.js +9 -9
  354. package/dist/notifications.server.cjs +0 -24
  355. package/dist/notifications.server.js +0 -24
  356. package/dist/orders.server.cjs +3 -6
  357. package/dist/orders.server.js +3 -6
  358. package/dist/organizations.server.cjs +119 -43
  359. package/dist/organizations.server.js +119 -43
  360. package/dist/products.server.cjs +5 -5
  361. package/dist/products.server.js +5 -5
  362. package/dist/rents.server.cjs +3 -3
  363. package/dist/rents.server.js +3 -3
  364. package/dist/style.css +16 -17
  365. package/dist/wallet.server.cjs +2 -2
  366. package/dist/wallet.server.js +2 -2
  367. package/dist/{web-B5wZTKbK.cjs → web-B0cfxzgu.cjs} +1 -1
  368. package/dist/{web-520xCgXy.js → web-DVR8m2fm.js} +1 -1
  369. package/package.json +1 -1
  370. package/src/builder/modes/ssr.rspack.dev.js +20 -12
  371. package/src/builder/rspack/rspack.config.base.js +16 -15
  372. package/src/components/Button/Button.vue +1 -1
  373. package/src/components/Feed/Feed.old.vue +0 -1
  374. package/src/components/Feed/Feed.vue +1 -31
  375. package/src/components/Loader/Loader.vue +1 -1
  376. package/src/modules/auth/FIXES.md +61 -0
  377. package/src/modules/auth/PROMT.md +33 -0
  378. package/src/modules/auth/auth.server.js +1 -0
  379. package/src/modules/auth/views/components/blocks/CardUser.vue +2 -2
  380. package/src/modules/auth/views/components/layouts/Auth.vue +1 -1
  381. package/src/modules/auth/views/components/pages/Invite.vue +2 -2
  382. package/src/modules/auth/views/components/pages/Profile.vue +33 -48
  383. package/src/modules/auth/views/components/sections/SliderFeatures.vue +5 -7
  384. package/src/modules/auth/views/store/auth.js +16 -1
  385. package/src/modules/auth//320/220/320/240/320/245/320/230/320/242/320/225/320/232/320/242/320/243/320/240/320/220.md +445 -0
  386. package/src/modules/backoffice/components/partials/Sidebar.vue +6 -0
  387. package/src/modules/chats/CLAUDE.md +137 -0
  388. package/src/modules/chats/components/blocks/ChatMessage.vue +12 -0
  389. package/src/modules/chats/components/sections/ChatWindow.vue +84 -2
  390. package/src/modules/chats/controllers/chats.controller.js +187 -0
  391. package/src/modules/chats/models/chat.model.js +21 -0
  392. package/src/modules/chats/routes/chats.routes.js +46 -0
  393. package/src/modules/chats/store/chat.store.js +67 -0
  394. package/src/modules/community/components/layouts/Community.vue +2 -2
  395. package/src/modules/community/components/pages/Posts.vue +3 -328
  396. package/src/modules/events/components/pages/EditEventTickets.vue +1 -1
  397. package/src/modules/events/components/pages/Events.vue +2 -2
  398. package/src/modules/globals/controllers/classes/globals.cache.js +64 -55
  399. package/src/modules/globals/controllers/classes/globals.logger.js +40 -4
  400. package/src/modules/globals/controllers/classes/globals.observer.js +54 -4
  401. package/src/modules/globals/views/components/partials/Header.vue +1 -1
  402. package/src/modules/globals/views/components/partials/Sidebar.vue +17 -13
  403. package/src/modules/globals/views/mixins/mixins.js +7 -0
  404. package/src/modules/inventory/CLAUDE.md +330 -0
  405. package/src/modules/inventory/PROMT.md +25 -0
  406. package/src/modules/inventory/components/forms/AdjustmentForm.vue +53 -36
  407. package/src/modules/inventory/components/forms/ColumnSettingsMenu.vue +11 -6
  408. package/src/modules/inventory/components/forms/HistoryView.vue +21 -9
  409. package/src/modules/inventory/components/forms/StockAlertsForm.vue +33 -22
  410. package/src/modules/inventory/components/pages/Inventory.vue +40 -40
  411. package/src/modules/inventory/components/pages/InventoryEdit.vue +1 -1
  412. package/src/modules/inventory/docs/01-intro.md +126 -0
  413. package/src/modules/inventory/docs/02-architecture.md +266 -0
  414. package/src/modules/inventory/docs/03-components-and-relationships.md +338 -0
  415. package/src/modules/inventory/docs/04-business-logic-and-algorithms.md +376 -0
  416. package/src/modules/inventory/docs/05-api-specification.md +356 -0
  417. package/src/modules/inventory/docs/06-access-control.md +320 -0
  418. package/src/modules/inventory/inventory.server.js +6 -2
  419. package/src/modules/inventory/{services → middlewares}/inventory.verifier.js +5 -16
  420. package/src/modules/inventory/models/stock.availability.model.js +20 -7
  421. package/src/modules/inventory/routes/inventory.routes.js +14 -17
  422. package/src/modules/inventory/services/adjustment.service.js +137 -0
  423. package/src/modules/inventory/services/audit.service.js +160 -0
  424. package/src/modules/inventory/services/availability.service.js +323 -0
  425. package/src/modules/inventory/services/inventory.helpers.old.js +217 -0
  426. package/src/modules/inventory/store/{ inventory.store.js → inventory.store.js} +0 -14
  427. package/src/modules/inventory/workers/inventory.availability.worker.js +29 -30
  428. package/src/modules/marketplace/views/components/layouts/Marketplace.vue +160 -8
  429. package/src/modules/notifications/controllers/notifications.controller.js +0 -6
  430. package/src/modules/notifications/services/notification.service.js +1 -17
  431. package/src/modules/notifications/services/web-push.service.js +0 -2
  432. package/src/modules/orders/components/blocks/CardOrderBackoffice.vue +2 -2
  433. package/src/modules/orders/components/blocks/CardOrderVar1.vue +1 -1
  434. package/src/modules/orders/controllers/orders.controller.js +2 -4
  435. package/src/modules/orders/orders.client.js +2 -2
  436. package/src/modules/orders/router/customers.router.js +1 -1
  437. package/src/modules/organizations/CLAUDE.md +259 -0
  438. package/src/modules/organizations/components/blocks/CardDepartment.vue +1 -22
  439. package/src/modules/organizations/components/blocks/Socials.vue +1 -1
  440. package/src/modules/organizations/components/elements/ButtonToggleMembership.vue +3 -3
  441. package/src/modules/organizations/components/forms/AddExistingMembersForm.vue +191 -0
  442. package/src/modules/organizations/components/forms/DepartmentForm.vue +390 -0
  443. package/src/modules/organizations/components/forms/InviteForm.vue +81 -0
  444. package/src/modules/organizations/components/pages/Department.vue +10 -10
  445. package/src/modules/organizations/components/pages/DepartmentEdit.vue +8 -8
  446. package/src/modules/organizations/components/pages/Members.vue +265 -171
  447. package/src/modules/organizations/components/pages/Organization.new.vue +172 -183
  448. package/src/modules/organizations/components/pages/Organization.vue +6 -6
  449. package/src/modules/organizations/components/pages/OrganizationEdit.vue +1 -1
  450. package/src/modules/organizations/components/pages/Organizations.vue +1 -1
  451. package/src/modules/organizations/components/sections/Organizations.vue +2 -2
  452. package/src/modules/organizations/components/sections/Publics.vue +4 -4
  453. package/src/modules/organizations/configs/navigation.organization.config.js +40 -39
  454. package/src/modules/organizations/controllers/departments.controller.js +53 -34
  455. package/src/modules/organizations/controllers/invites.controller.js +44 -5
  456. package/src/modules/organizations/controllers/memberships.controller.js +43 -4
  457. package/src/modules/organizations/organizations.client.js +24 -15
  458. package/src/modules/organizations/router/departments.router.js +0 -18
  459. package/src/modules/organizations/routes/departments.routes.js +6 -8
  460. package/src/modules/organizations/routes/invites.routes.js +6 -4
  461. package/src/modules/organizations/routes/memberships.routes.js +6 -5
  462. package/src/modules/organizations/routes/organizations.routes.js +1 -1
  463. package/src/modules/organizations/store/departments.store.js +5 -0
  464. package/src/modules/organizations/store/invites.store.js +5 -0
  465. package/src/modules/organizations/store/memberships.store.js +23 -0
  466. package/src/modules/products/components/pages/Products.vue +0 -1
  467. package/src/modules/spots/components/blocks/CardSpot.vue +1 -1
  468. package/src/modules/spots/components/pages/Spots.vue +3 -203
  469. package/src/styles/base/all.scss +0 -15
  470. package/src/styles/responsive.scss +1 -31
  471. package/src/styles/typography.scss +20 -5
  472. package/dist/main-CSzPfQYR.cjs +0 -11
  473. package/dist/martyrs/src/components/Address/Address.vue2.cjs.map +0 -1
  474. package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +0 -1
  475. package/dist/martyrs/src/components/Chips/Chips.vue.js.map +0 -1
  476. package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +0 -1
  477. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.cjs.map +0 -1
  478. package/dist/martyrs/src/components/Select/Select.vue2.cjs.map +0 -1
  479. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.cjs +0 -76
  480. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.cjs.map +0 -1
  481. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.js +0 -76
  482. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.js.map +0 -1
  483. package/dist/martyrs/src/modules/inventory/store/ inventory.store.cjs.map +0 -1
  484. package/dist/martyrs/src/modules/inventory/store/ inventory.store.js.map +0 -1
  485. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +0 -280
  486. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs.map +0 -1
  487. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +0 -280
  488. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js.map +0 -1
  489. package/dist/martyrs/src/modules/organizations/store/departments.cjs +0 -121
  490. package/dist/martyrs/src/modules/organizations/store/departments.cjs.map +0 -1
  491. package/dist/martyrs/src/modules/organizations/store/departments.js +0 -121
  492. package/dist/martyrs/src/modules/organizations/store/departments.js.map +0 -1
  493. package/dist/martyrs/src/modules/organizations/store/invites.cjs +0 -64
  494. package/dist/martyrs/src/modules/organizations/store/invites.cjs.map +0 -1
  495. package/dist/martyrs/src/modules/organizations/store/invites.js +0 -64
  496. package/dist/martyrs/src/modules/organizations/store/invites.js.map +0 -1
  497. package/dist/martyrs/src/modules/organizations/store/memberships.cjs +0 -87
  498. package/dist/martyrs/src/modules/organizations/store/memberships.cjs.map +0 -1
  499. package/dist/martyrs/src/modules/organizations/store/memberships.js +0 -87
  500. package/dist/martyrs/src/modules/organizations/store/memberships.js.map +0 -1
  501. package/src/modules/globals/controllers/classes/globals.websocket.ws.js +0 -102
  502. package/src/modules/globals/views/components/blocks/BlockFilter.vue +0 -60
  503. package/src/modules/inventory/docs/README.md +0 -291
  504. package/src/modules/inventory/models/stock.balance.model.js +0 -43
  505. package/src/modules/inventory/services/inventory.crud.js +0 -710
  506. package/src/modules/inventory/tests/inventory.test.js +0 -281
  507. package/src/modules/organizations/store/departments.js +0 -137
  508. package/src/modules/organizations/store/invites.js +0 -76
  509. package/src/modules/organizations/store/memberships.js +0 -110
@@ -0,0 +1,376 @@
1
+ # 4. Бизнес-логика и алгоритмы
2
+
3
+ ## Алгоритм расчета доступности товаров
4
+
5
+ ### Концепция On-Demand сборки
6
+
7
+ Ключевой особенностью системы является поддержка **on-demand производства** товаров из ингредиентов. Это означает, что товар может быть доступен для продажи даже при отсутствии готовых единиц на складе, если есть достаточно ингредиентов для его сборки.
8
+
9
+ ### Алгоритм recalculateAvailability
10
+
11
+ Функция `recalculateAvailability` в файле `inventory.helpers.js` реализует сложную логику расчета доступности:
12
+
13
+ ```javascript
14
+ async function recalculateAvailability(variantIds, storage, session) {
15
+ // 1. Загрузка вариантов и их ингредиентов
16
+ const variants = await db.variant.find({
17
+ _id: { $in: variantIds }
18
+ }).session(session).lean();
19
+
20
+ // 2. Сбор всех ID ингредиентов из всех вариантов
21
+ const allIngredientIds = new Set();
22
+ variants.forEach(v => {
23
+ v.ingredients?.forEach(ing => {
24
+ allIngredientIds.add(ing._id.toString());
25
+ });
26
+ });
27
+
28
+ // 3. Загрузка данных о количестве одним запросом (оптимизация N+1 problem)
29
+ const availability = await db.stockAvailability.find({
30
+ storage,
31
+ $or: [
32
+ { variant: { $in: variantIds } }, // Прямые остатки вариантов
33
+ { product: { $in: Array.from(allIngredientIds) } } // Остатки ингредиентов
34
+ ]
35
+ }).session(session).lean();
36
+ ```
37
+
38
+ **Почему именно такая последовательность**:
39
+ 1. **Batch loading**: Загружаем все данные минимальным количеством запросов
40
+ 2. **Memory indexing**: Создаем in-memory индексы для быстрого поиска
41
+ 3. **Bulk operations**: Обновляем все записи одной операцией
42
+
43
+ ### Логика определения доступности
44
+
45
+ ```javascript
46
+ variants.forEach(variant => {
47
+ const directStock = quantityByVariant.get(variantId) || 0;
48
+
49
+ // Начинаем с прямого остатка или Infinity для on-demand
50
+ let available = directStock > 0 ? directStock : Infinity;
51
+ const constraints = [];
52
+
53
+ // Проверяем каждый обязательный ингредиент
54
+ if (variant.ingredients?.length) {
55
+ for (const ing of variant.ingredients) {
56
+ if (ing.optional) continue; // Пропускаем optional ингредиенты
57
+
58
+ const stock = quantityByProduct.get(ing._id.toString()) || 0;
59
+ const canMake = Math.floor(stock / (ing.quantity || 1));
60
+
61
+ // Ограничиваем доступность минимальным ингредиентом
62
+ if (directStock === 0 || canMake < available) {
63
+ available = canMake;
64
+ }
65
+
66
+ // Сохраняем constraint для анализа
67
+ constraints.push({
68
+ ingredient: ing._id,
69
+ stock,
70
+ required: ing.quantity,
71
+ available: canMake
72
+ });
73
+ }
74
+ }
75
+
76
+ // Если нет обязательных ингредиентов, возвращаемся к прямому остатку
77
+ if (available === Infinity) {
78
+ available = directStock;
79
+ }
80
+ });
81
+ ```
82
+
83
+ **Принципы расчета**:
84
+ 1. **Прямой остаток приоритетен**: Если есть готовый товар, используем его количество
85
+ 2. **Ингредиентное ограничение**: Доступность = min(прямой остаток, возможность сборки из ингредиентов)
86
+ 3. **Optional ингредиенты игнорируются**: Не влияют на доступность
87
+ 4. **Constraint tracking**: Сохраняем детали для анализа узких мест
88
+
89
+ ### Примеры расчетов
90
+
91
+ **Сценарий 1: Только прямой остаток**
92
+ ```
93
+ Товар: Готовая пицца "Маргарита"
94
+ Прямой остаток: 5 шт
95
+ Ингредиенты: нет
96
+ Результат: available = 5
97
+ ```
98
+
99
+ **Сценарий 2: On-demand сборка**
100
+ ```
101
+ Товар: Пицца "Пепперони" (собирается из ингредиентов)
102
+ Прямой остаток: 0 шт
103
+ Ингредиенты:
104
+ - Тесто: остаток 10, требуется 1 → можно сделать 10 пицц
105
+ - Соус: остаток 5, требуется 1 → можно сделать 5 пицц
106
+ - Пепперони: остаток 8, требуется 2 → можно сделать 4 пиццы
107
+ Результат: available = min(10, 5, 4) = 4
108
+ ```
109
+
110
+ **Сценарий 3: Гибридный режим**
111
+ ```
112
+ Товар: Пицца "Гавайская"
113
+ Прямой остаток: 3 шт
114
+ Ингредиенты могут дать еще: 7 шт
115
+ Результат: available = 3 (приоритет прямого остатка)
116
+ ```
117
+
118
+ ## Система автоматических алертов
119
+
120
+ ### Интеграция алертов в расчет доступности
121
+
122
+ Алерты проверяются автоматически при каждом пересчете доступности:
123
+
124
+ ```javascript
125
+ // 7. Проверяем алерты после обновления availability
126
+ for (const variant of variants) {
127
+ const available = availabilityByVariant.get(variantId) || 0;
128
+
129
+ // Найти все подходящие алерты (по приоритету специфичности)
130
+ const alerts = await db.stockAlert.find({
131
+ product: variant.product,
132
+ enabled: true,
133
+ $or: [
134
+ { variant: null, storage: null }, // Глобальные
135
+ { variant: null, storage: storage }, // По складу
136
+ { variant: variant._id, storage: null }, // По варианту
137
+ { variant: variant._id, storage: storage } // Точечные
138
+ ]
139
+ }).session(session);
140
+
141
+ for (const alert of alerts) {
142
+ if (available < alert.threshold) {
143
+ // Отправка уведомления через внешний сервис
144
+ await fetch(`${process.env.API_URL}/api/notifications`, {
145
+ method: 'POST',
146
+ headers: {
147
+ 'Content-Type': 'application/json',
148
+ 'X-Service-Key': process.env.SERVICE_KEY,
149
+ },
150
+ body: JSON.stringify({
151
+ title: 'Low Stock Alert',
152
+ body: `Stock is low: ${available} units (threshold: ${alert.threshold})`,
153
+ type: 'stock_alert',
154
+ metadata: {
155
+ alertId: alert._id,
156
+ productId: variant.product,
157
+ variantId: variant._id,
158
+ storageId: storage,
159
+ currentStock: available,
160
+ threshold: alert.threshold
161
+ },
162
+ userId: alert.creator.target
163
+ })
164
+ });
165
+ }
166
+ }
167
+ }
168
+ ```
169
+
170
+ **Иерархия алертов**: Система проверяет алерты от общих к специфичным, что позволяет настраивать разные пороги для:
171
+ - Всех товаров глобально
172
+ - Товара на конкретном складе
173
+ - Конкретного варианта товара
174
+ - Конкретного варианта на конкретном складе
175
+
176
+ ## Транзакционный workflow создания adjustment
177
+
178
+ ### Атомарная операция изменения остатков
179
+
180
+ Функция `create` в `adjustment.service.js` демонстрирует сложный транзакционный workflow:
181
+
182
+ ```javascript
183
+ async create(req, res) {
184
+ const session = await db.mongoose.startSession();
185
+ session.startTransaction();
186
+
187
+ try {
188
+ // 1. Создание записи движения (audit trail)
189
+ const [adjustment] = await db.stockAdjustment.create([adjustmentData], { session });
190
+
191
+ // 2. Атомарное обновление количества в StockAvailability
192
+ const availability = await updateStockQuantity(
193
+ db,
194
+ adjustmentData.product,
195
+ adjustmentData.variant,
196
+ adjustmentData.storage,
197
+ adjustmentData.quantity,
198
+ adjustmentData.owner,
199
+ adjustmentData.creator,
200
+ session
201
+ );
202
+
203
+ // 3. Поиск всех затронутых вариантов
204
+ const affectedVariants = new Set();
205
+ if (adjustmentData.variant) {
206
+ affectedVariants.add(adjustmentData.variant.toString());
207
+ }
208
+
209
+ // Найти варианты, использующие изменяемый продукт как ингредиент
210
+ const dependentVariants = await db.variant.find({
211
+ 'ingredients._id': adjustmentData.product,
212
+ 'ingredients.optional': { $ne: true }
213
+ }).distinct('_id').session(session);
214
+
215
+ dependentVariants.forEach(v => affectedVariants.add(v.toString()));
216
+
217
+ // 4. Пересчет доступности для всех затронутых вариантов
218
+ if (affectedVariants.size) {
219
+ await recalculateAvailability(
220
+ Array.from(affectedVariants),
221
+ adjustmentData.storage,
222
+ session
223
+ );
224
+ }
225
+
226
+ await session.commitTransaction();
227
+
228
+ // 5. Post-commit операции (не влияют на транзакцию)
229
+ invalidateCache(cache, logger, ['adjustments', 'availability']);
230
+
231
+ setImmediate(() => {
232
+ observer.notify('stock.adjusted', {
233
+ adjustment,
234
+ availability,
235
+ affectedVariants
236
+ });
237
+ });
238
+
239
+ } catch (error) {
240
+ await session.abortTransaction();
241
+ throw error;
242
+ } finally {
243
+ session.endSession();
244
+ }
245
+ }
246
+ ```
247
+
248
+ ### Почему именно такая последовательность
249
+
250
+ **В рамках транзакции**:
251
+ 1. **StockAdjustment**: Создается первым для полного audit trail
252
+ 2. **StockAvailability update**: Обновляет quantity через helper функцию
253
+ 3. **Dependent variants search**: Находим все товары, которые могут быть затронуты
254
+ 4. **Availability recalculation**: Обновляем расчетные данные
255
+
256
+ **После транзакции**:
257
+ 5. **Cache invalidation**: Очищаем устаревшие данные
258
+ 6. **Observer events**: Уведомляем другие модули
259
+
260
+ **Критическая важность порядка**: Если availability пересчитывается до обновления quantity, то новые остатки не будут учтены в расчете.
261
+
262
+ ## Batch-обработка инвентаризации
263
+
264
+ ### Двухфазный commit для аудитов
265
+
266
+ Инвентаризация использует pattern двухфазного commit:
267
+
268
+ **Фаза 1 - Draft**:
269
+ ```javascript
270
+ // Создание audit в статусе draft
271
+ const audit = await db.stockAudit.create([{
272
+ storage: auditData.storage,
273
+ status: 'draft',
274
+ positions: auditData.positions, // Массив товарных позиций
275
+ comment: auditData.comment
276
+ }], { session });
277
+ ```
278
+
279
+ **Фаза 2 - Published** (при вызове `complete`):
280
+ ```javascript
281
+ // Создание adjustment для каждой позиции
282
+ const adjustmentPromises = inventory.positions.map(position => {
283
+ return db.stockAdjustment.create([{
284
+ product: position.product,
285
+ variant: position.variant,
286
+ storage: inventory.storage,
287
+ source: { type: 'Inventory', target: inventory._id },
288
+ reason: position.reason || 'custom',
289
+ quantity: position.quantity,
290
+ cost: position.cost,
291
+ creator: inventory.creator,
292
+ owner: inventory.owner
293
+ }], { session });
294
+ });
295
+
296
+ await Promise.all(adjustmentPromises);
297
+
298
+ // Batch обновление количества в StockAvailability
299
+ const bulkOps = inventory.positions.map(p => ({
300
+ updateOne: {
301
+ filter: {
302
+ product: p.product,
303
+ variant: p.variant || null,
304
+ storage: inventory.storage
305
+ },
306
+ update: {
307
+ $inc: { quantity: p.quantity },
308
+ $setOnInsert: {
309
+ owner: inventory.owner,
310
+ creator: inventory.creator,
311
+ available: 0,
312
+ constraints: []
313
+ }
314
+ },
315
+ upsert: true
316
+ }
317
+ }));
318
+
319
+ await db.stockAvailability.bulkWrite(bulkOps, { session });
320
+
321
+ // Обновление статуса audit
322
+ inventory.status = 'published';
323
+ await inventory.save({ session });
324
+ ```
325
+
326
+ **Преимущества двухфазного подхода**:
327
+ - **Безопасность**: можно создать черновик и проверить данные до применения
328
+ - **Атомарность**: либо все позиции обрабатываются, либо ни одна
329
+ - **Производительность**: bulk операции значительно быстрее отдельных update
330
+
331
+ ## Кеширование и производительность
332
+
333
+ ### Стратегия многоуровневого кеширования
334
+
335
+ ```javascript
336
+ const cache = new Cache({ ttlSeconds: 300 });
337
+
338
+ // Чтение с кешированием
339
+ async read(req, res) {
340
+ const cacheKey = JSON.stringify({ type: 'availability', ...req.verifiedQuery });
341
+ let data = await cache.get(cacheKey);
342
+
343
+ if (!data) {
344
+ // Сложный aggregation pipeline для join данных
345
+ const pipeline = [
346
+ { $match: { /* filters */ } },
347
+ { $lookup: { from: 'products', /* product data */ } },
348
+ { $lookup: { from: 'spots', /* storage data */ } },
349
+ { $limit: req.verifiedQuery.limit },
350
+ { $skip: req.verifiedQuery.skip }
351
+ ];
352
+
353
+ data = await db.stockAvailability.aggregate(pipeline).exec();
354
+ await cache.setWithTags(cacheKey, data, ['availability']);
355
+ }
356
+
357
+ res.json(data);
358
+ }
359
+
360
+ // Tag-based инвалидация (из inventory.helpers.js)
361
+ export function invalidateCache(cache, logger, tags) {
362
+ setImmediate(() => {
363
+ cache.delByTags(tags).catch(err =>
364
+ logger.error('Cache invalidation error', err)
365
+ );
366
+ });
367
+ }
368
+ ```
369
+
370
+ **Принципы кеширования**:
371
+ - **Query-based keys**: Кеш ключи включают все параметры запроса
372
+ - **Tag-based invalidation**: Связанные операции инвалидируют группы кеша
373
+ - **Fire-and-forget**: Инвалидация не блокирует основной поток
374
+ - **Error isolation**: Ошибки кеширования не влияют на функциональность
375
+
376
+ Эта бизнес-логика обеспечивает высокую производительность, надежность и точность расчетов в сложной многоскладской среде с поддержкой on-demand производства.