@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,266 @@
1
+ # 2. Архитектура системы
2
+
3
+ ## Общие архитектурные принципы
4
+
5
+ Модуль Inventory построен на основе **многослойной архитектуры** с четким разделением ответственности между слоями. Система использует **materialized views** для оптимизированного хранения расчетных данных доступности товаров.
6
+
7
+ Ключевой особенностью архитектуры является **синхронная модель данных**, где изменения в остатках товаров автоматически запускают пересчет доступности с учетом ингредиентов в рамках той же транзакции.
8
+
9
+ ## Архитектурные слои
10
+
11
+ ```
12
+ ┌─────────────────────────────────────┐
13
+ │ UI Layer (Vue.js) │
14
+ │ components/pages/, components/forms/ │
15
+ └─────────────────┬───────────────────┘
16
+ │ API Calls
17
+ ┌─────────────────▼───────────────────┐
18
+ │ Store Layer (Vue 3 Reactive) │
19
+ │ store/inventory.store.js │
20
+ └─────────────────┬───────────────────┘
21
+ │ HTTP Requests
22
+ ┌─────────────────▼───────────────────┐
23
+ │ API Layer (Express) │
24
+ │ routes/inventory.routes.js │
25
+ └─────────────────┬───────────────────┘
26
+ │ Business Logic
27
+ ┌─────────────────▼───────────────────┐
28
+ │ Service Layer │
29
+ │ adjustment.service.js │
30
+ │ availability.service.js │
31
+ │ audit.service.js │
32
+ │ inventory.helpers.js │
33
+ └─────────────────┬───────────────────┘
34
+ │ Data Operations
35
+ ┌─────────────────▼───────────────────┐
36
+ │ Data Layer (MongoDB) │
37
+ │ models/*.model.js │
38
+ └─────────────────────────────────────┘
39
+ ```
40
+
41
+ ## Инициализация серверной части
42
+
43
+ Серверная инициализация происходит в файле `inventory.server.js` через функцию `initializeInventory`:
44
+
45
+ ```javascript
46
+ function initializeInventory(app, db, origins, publicPath) {
47
+ // 1. Регистрация моделей в глобальном объекте db
48
+ db.stockAdjustment = StockAdjustmentModel(db);
49
+ db.stockAvailability = StockAvailabilityModel(db);
50
+ db.stockAudit = StockAuditModel(db);
51
+ db.stockAlert = StockAlertModel(db);
52
+
53
+ // 2. Подключение маршрутов и политик безопасности
54
+ if (app) {
55
+ inventoryRoutes(app, db, origins, publicPath);
56
+ inventoryPolicies(db);
57
+
58
+ // 3. Инициализация Change Streams для автоматического пересчёта
59
+ const { cache, logger } = createSharedServices(db);
60
+ initChangeStreams(db, logger, recalculateAvailability, (tags) => invalidateCache(cache, logger, tags));
61
+ }
62
+ }
63
+ ```
64
+
65
+ **Почему такая последовательность**: Сначала регистрируются модели, чтобы они стали доступны через глобальный объект `db` во всех слоях приложения. Только после этого подключаются маршруты, которые зависят от наличия моделей. Политики безопасности инициализируются вместе с маршрутами. В конце запускаются Change Streams для автоматического пересчёта доступности при изменении ингредиентов товаров.
66
+
67
+ ## Инициализация клиентской части
68
+
69
+ Клиентская инициализация в `inventory.client.js` настраивает Vue-роутинг для двух различных контекстов:
70
+
71
+ ```javascript
72
+ function initializeInventory(app, store, router, options = {}) {
73
+ // Backoffice routes - полный доступ для администраторов
74
+ if (!options.withBackoffice) {
75
+ addRoutes(router, {
76
+ parentName: options.routeBackoffice || 'Backoffice Root',
77
+ basePath: 'inventory',
78
+ routes: routerInventory,
79
+ routeNamePrefix: 'Backoffice',
80
+ filterConfig: {
81
+ include: ['InventoryList', 'InventoryAudit']
82
+ },
83
+ meta: { context: 'backoffice' }
84
+ });
85
+ }
86
+
87
+ // Organization routes - ограниченный доступ для организаций
88
+ if (!options.withOrganizationRoutes) {
89
+ addRoutes(router, {
90
+ parentName: options.routeOrganizations || 'OrganizationRoot',
91
+ basePath: 'inventory',
92
+ routes: routerInventory,
93
+ routeNamePrefix: 'Organization',
94
+ filterConfig: {
95
+ include: ['InventoryList', 'InventoryAudit']
96
+ },
97
+ meta: { context: 'organization' }
98
+ });
99
+ }
100
+ }
101
+ ```
102
+
103
+ **Зачем два контекста**:
104
+ - **Backoffice context**: административный интерфейс с полным доступом ко всем функциям
105
+ - **Organization context**: клиентский интерфейс с ограничениями по ownership и функциональности
106
+
107
+ Фильтрация маршрутов через `filterConfig.include` позволяет включать только необходимые страницы для каждого контекста.
108
+
109
+ ## Синхронная система пересчета доступности
110
+
111
+ Пересчет доступности товаров происходит **синхронно** в рамках транзакций изменения остатков и **асинхронно** через Change Streams при изменении ингредиентов. Функция `recalculateAvailability` в `inventory.helpers.js` обновляет данные доступности в `StockAvailability`:
112
+
113
+ ```javascript
114
+ // В adjustment.service.js - create
115
+ async create(req, res) {
116
+ const session = await db.mongoose.startSession();
117
+ session.startTransaction();
118
+
119
+ try {
120
+ // 1. Создание adjustment
121
+ const [adjustment] = await db.stockAdjustment.create([adjustmentData], { session });
122
+
123
+ // 2. Обновление количества в StockAvailability
124
+ const availability = await updateStockQuantity(
125
+ db,
126
+ adjustmentData.product,
127
+ adjustmentData.variant,
128
+ adjustmentData.storage,
129
+ adjustmentData.quantity,
130
+ adjustmentData.owner,
131
+ adjustmentData.creator,
132
+ session
133
+ );
134
+
135
+ // 3. Пересчет доступности в той же транзакции
136
+ if (affectedVariants.length) {
137
+ await recalculateAvailability(db, logger, affectedVariants, adjustmentData.storage, session);
138
+ }
139
+
140
+ await session.commitTransaction();
141
+ } catch (error) {
142
+ await session.abortTransaction();
143
+ throw error;
144
+ }
145
+ }
146
+ ```
147
+
148
+ **Преимущества синхронного подхода**:
149
+ - **Консистентность данных**: доступность всегда соответствует текущим остаткам
150
+ - **Атомарность**: все изменения происходят в одной транзакции
151
+ - **Простота отладки**: нет асинхронных race conditions
152
+
153
+ ### Автоматический пересчёт через Change Streams
154
+
155
+ Система использует MongoDB Change Streams для автоматического пересчёта доступности при изменении ингредиентов товаров. Реализация находится в `inventory.helpers.js`:
156
+
157
+ ```javascript
158
+ // inventory.helpers.js - активно используется
159
+ export function initChangeStreams(db, logger, recalculateAvailability, invalidateCache) {
160
+ const pipeline = [
161
+ { $match: {
162
+ operationType: { $in: ['insert', 'update', 'replace', 'delete'] },
163
+ 'fullDocument.ingredients': { $exists: true }
164
+ }}
165
+ ];
166
+
167
+ const changeStream = db.variant.collection.watch(pipeline, {
168
+ fullDocument: 'updateLookup'
169
+ });
170
+
171
+ changeStream.on('change', async (change) => {
172
+ // Асинхронный пересчет при изменении ингредиентов
173
+ const variantId = change.documentKey._id;
174
+ const storages = await db.stockAvailability.distinct('storage', {
175
+ variant: variantId
176
+ });
177
+
178
+ for (const storage of storages) {
179
+ await recalculateAvailability(db, logger, [variantId], storage);
180
+ }
181
+
182
+ invalidateCache(['availability', `variant:${variantId}`]);
183
+ });
184
+ }
185
+ ```
186
+
187
+ **Преимущества интегрированной системы**:
188
+ - Автоматический пересчет при изменении рецептов без задержки основных операций
189
+ - Консистентность данных между ингредиентами и доступностью
190
+ - Асинхронная обработка не блокирует основные операции
191
+
192
+ ## Паттерн Observer для межмодульного взаимодействия
193
+
194
+ Система использует Observer pattern для уведомления других модулей о важных событиях:
195
+
196
+ ```javascript
197
+ // В adjustment.service.js
198
+ observer.notify('stock.adjusted', {
199
+ adjustment,
200
+ availability,
201
+ affectedVariants
202
+ });
203
+
204
+ // В audit.service.js
205
+ observer.notify('inventory.completed', {
206
+ inventory,
207
+ affectedVariants
208
+ });
209
+ ```
210
+
211
+ **Зачем Observer**: Прямые вызовы между модулями создают tight coupling. Observer позволяет:
212
+ - **Расширяемость**: новые модули могут подписываться на события без изменения inventory
213
+ - **Асинхронность**: события обрабатываются через `setImmediate()`, не блокируя основной поток
214
+ - **Отказоустойчивость**: падение одного обработчика не влияет на других
215
+
216
+ ## Кеширование и производительность
217
+
218
+ Архитектура включает многоуровневое кеширование для обеспечения производительности:
219
+
220
+ ```javascript
221
+ // Кеширование в service layer (availability.service.js)
222
+ const { cache, logger } = createSharedServices(db);
223
+ const cacheKey = JSON.stringify({ type: 'availability', ...req.verifiedQuery });
224
+
225
+ let data = await cache.get(cacheKey);
226
+ if (!data) {
227
+ data = await db.stockAvailability.aggregate(pipeline).exec();
228
+ await cache.setWithTags(cacheKey, data, ['availability']);
229
+ }
230
+ ```
231
+
232
+ **Стратегия инвалидации**: Используется tag-based invalidation через функцию `invalidateCache` из `inventory.helpers.js`:
233
+ - Изменение количества → инвалидация тегов `['availability']`
234
+ - Создание adjustment → инвалидация тегов `['adjustments', 'availability']`
235
+ - Завершение инвентаризации → инвалидация тегов `['adjustments', 'availability', 'inventories']`
236
+
237
+ ## Транзакционная целостность
238
+
239
+ Критические операции (adjustments, audit completion) выполняются в MongoDB транзакциях:
240
+
241
+ ```javascript
242
+ const session = await db.mongoose.startSession();
243
+ session.startTransaction();
244
+
245
+ try {
246
+ // 1. Создание adjustment
247
+ const [adjustment] = await db.stockAdjustment.create([adjustmentData], { session });
248
+
249
+ // 2. Обновление количества в StockAvailability
250
+ const availability = await updateStockQuantity(
251
+ db, product, variant, storage, quantity, owner, creator, session
252
+ );
253
+
254
+ // 3. Пересчет доступности с учётом ингредиентов
255
+ await recalculateAvailability(db, logger, affectedVariants, storage, session);
256
+
257
+ await session.commitTransaction();
258
+ } catch (error) {
259
+ await session.abortTransaction();
260
+ throw error;
261
+ } finally {
262
+ session.endSession();
263
+ }
264
+ ```
265
+
266
+ **Атомарность операций**: Без транзакций возможны race conditions, когда количество обновилось, но доступность еще не пересчиталась. Транзакции гарантируют, что система никогда не находится в inconsistent состоянии. Все операции изменения остатков выполняются атомарно вместе с пересчётом доступности.
@@ -0,0 +1,338 @@
1
+ # 3. Компоненты и их взаимодействие
2
+
3
+ ## Route Layer - HTTP API endpoints
4
+
5
+ ### Основные маршруты инвентаризации
6
+
7
+ Файл `inventory.routes.js` определяет основные HTTP endpoints с полной middleware цепочкой:
8
+
9
+ ```javascript
10
+ export default function(app, db) {
11
+ const jwt = jwtFactory(db);
12
+ const verifier = verifierFactory(db);
13
+ const abac = getInstance(db);
14
+ const adjustmentService = adjustmentServiceFactory(db);
15
+ const availabilityService = availabilityServiceFactory(db);
16
+ const auditService = auditServiceFactory(db);
17
+
18
+ // Типичная цепочка middleware: Auth → Validation → Authorization → Business Logic
19
+ app.post('/api/inventory/adjustments/create',
20
+ jwt.verifyToken(), // JWT аутентификация
21
+ verifier.verifyAdjustmentBody, // Валидация входных данных
22
+ abac.middleware('stockAdjustment', 'create'), // ABAC авторизация
23
+ adjustmentService.create // Бизнес-логика
24
+ );
25
+ }
26
+ ```
27
+
28
+ **Архитектурная особенность**: Каждый маршрут проходит через стандартизированную цепочку middleware, что обеспечивает:
29
+ - **Единообразие**: одинаковая схема безопасности для всех endpoints
30
+ - **Расширяемость**: легко добавить новые middleware без изменения бизнес-логики
31
+ - **Тестируемость**: каждый слой можно тестировать изолированно
32
+
33
+ ### Группировка endpoints по сущностям
34
+
35
+ ```javascript
36
+ // StockAdjustment routes
37
+ app.get('/api/inventory/adjustments', ...) // Чтение списка движений
38
+ app.post('/api/inventory/adjustments/create', ...) // Создание движения
39
+
40
+ // StockAvailability routes
41
+ app.get('/api/inventory/availability', ...) // Текущие остатки и доступность
42
+
43
+ // StockAudit routes
44
+ app.get('/api/inventory/audits', ...) // Список инвентаризаций
45
+ app.post('/api/inventory/audits/create', ...) // Создание инвентаризации
46
+ app.post('/api/inventory/audits/complete', ...) // Завершение инвентаризации
47
+ ```
48
+
49
+ **Зачем такая группировка**: Каждая группа endpoints соответствует отдельной бизнес-сущности, что упрощает:
50
+ - **API discovery**: разработчикам понятно, где искать нужную функциональность
51
+ - **Версионирование**: можно изменять API для одной сущности независимо от других
52
+ - **Мониторинг**: метрики можно собирать по типам операций
53
+
54
+ ### CRUD паттерн для Stock Alerts
55
+
56
+ Файл `stock.alerts.routes.js` демонстрирует использование универсального CRUD класса:
57
+
58
+ ```javascript
59
+ const stockAlertsCRUD = new CRUD({
60
+ app, db,
61
+ model: db.stockAlert,
62
+ modelName: 'stockAlert',
63
+ basePath: '/api/inventory/alerts',
64
+
65
+ auth: true, // Требует аутентификации
66
+
67
+ verifiers: { // Кастомные валидаторы для каждой операции
68
+ create: verifier.createVerifier,
69
+ read: verifier.readVerifier,
70
+ update: verifier.updateVerifier,
71
+ delete: verifier.deleteVerifier
72
+ },
73
+
74
+ abac: abac, // ABAC авторизация
75
+
76
+ cache: { // Конфигурация кеширования
77
+ enabled: true,
78
+ ttl: 300,
79
+ tags: ['stockAlerts', 'inventory']
80
+ },
81
+
82
+ events: { // Система событий
83
+ enabled: true,
84
+ logReads: false // Не логировать чтение (слишком много событий)
85
+ }
86
+ });
87
+ ```
88
+
89
+ **Преимущества CRUD паттерна**:
90
+ - **Стандартизация**: все CRUD операции работают одинаково
91
+ - **Конфигурируемость**: можно настроить кеширование, события, валидацию отдельно для каждой сущности
92
+ - **DRY принцип**: не нужно дублировать код для базовых операций
93
+
94
+ ## Store Layer - Клиентское состояние
95
+
96
+ ### Reactive State Management
97
+
98
+ Файл ` inventory.store.js` использует Vue 3 Composition API для управления состоянием:
99
+
100
+ ```javascript
101
+ const state = reactive({
102
+ // Основные коллекции данных
103
+ adjustments: [], // История движений товаров
104
+ availability: [], // Текущие остатки и доступность для продажи
105
+ inventories: [], // Список инвентаризаций
106
+
107
+ // Состояние текущей операции (например, создание инвентаризации)
108
+ current: {
109
+ storage: null, // Выбранный склад
110
+ positions: [], // Позиции в инвентаризации
111
+ comment: '', // Комментарий
112
+ status: 'draft' // Статус draft/published
113
+ },
114
+
115
+ // Фильтры для поиска и сортировки
116
+ filters: {
117
+ storage: null, // Фильтр по складу
118
+ product: null, // Фильтр по товару
119
+ dateStart: null, // Период от
120
+ dateEnd: null // Период до
121
+ }
122
+ });
123
+ ```
124
+
125
+ **Почему reactive**: Vue 3 reactive обеспечивает автоматическое обновление UI при изменении данных без необходимости вызывать специальные методы обновления.
126
+
127
+ ### Actions - API Integration
128
+
129
+ ```javascript
130
+ const actions = {
131
+ async createAdjustment(data) {
132
+ try {
133
+ const response = await $axios.post('/api/inventory/adjustments/create', data);
134
+ state.adjustments.unshift(response.data); // Добавляем в начало списка
135
+ return response.data;
136
+ } catch (error) {
137
+ setError(error); // Глобальная обработка ошибок
138
+ throw error; // Пробрасываем для компонента
139
+ }
140
+ }
141
+ };
142
+ ```
143
+
144
+ **Паттерн обработки**: Каждый action выполняет три операции:
145
+ 1. **API запрос**: отправка данных на сервер
146
+ 2. **State update**: обновление локального состояния
147
+ 3. **Error handling**: обработка ошибок через глобальную систему
148
+
149
+ ### Mutations - State Modifications
150
+
151
+ ```javascript
152
+ const mutations = {
153
+ addPosition(position) {
154
+ state.current.positions.push(position); // Добавление позиции в инвентаризацию
155
+ },
156
+
157
+ removePosition(index) {
158
+ state.current.positions.splice(index, 1); // Удаление позиции
159
+ },
160
+
161
+ resetCurrent() { // Сброс текущей операции
162
+ state.current = {
163
+ storage: null,
164
+ positions: [],
165
+ comment: '',
166
+ status: 'draft'
167
+ };
168
+ }
169
+ };
170
+ ```
171
+
172
+ **Separation of Concerns**: Mutations отвечают только за изменение состояния, а actions - за взаимодействие с API. Это упрощает тестирование и отладку.
173
+
174
+ ## Component Layer - UI интеграция
175
+
176
+ ### Context-Aware Navigation
177
+
178
+ Компонент `Inventory.vue` адаптируется к контексту выполнения:
179
+
180
+ ```vue
181
+ <template>
182
+ <header class="mn-b-medium flex-v-center flex-nowrap flex">
183
+ <h2>Inventory</h2>
184
+
185
+ <!-- Кнопка создания инвентаризации - зависит от контекста -->
186
+ <button
187
+ v-if="route.meta.context === 'backoffice'"
188
+ @click="router.push({ name: 'BackofficeInventoryAudit' })"
189
+ class="mn-l-small radius-100 i-big hover-scale-1 cursor-pointer t-white bg-second"
190
+ />
191
+
192
+ <button
193
+ v-if="route.meta.context === 'organization'"
194
+ @click="router.push({ name: 'OrganizationInventoryAudit', params: { _id: route.params._id } })"
195
+ class="mn-l-small radius-100 i-big hover-scale-1 cursor-pointer t-white bg-second"
196
+ />
197
+ </header>
198
+ </template>
199
+ ```
200
+
201
+ **Адаптивность**: Один компонент работает в двух режимах:
202
+ - **Backoffice**: полные админские права без привязки к конкретной организации
203
+ - **Organization**: работа в рамках конкретной организации (параметр `_id`)
204
+
205
+ ### Feed Integration Pattern
206
+
207
+ ```vue
208
+ <Feed
209
+ :search="true"
210
+ v-model:sort="sort"
211
+ :store="{
212
+ read: (options) => products.actions.read(options), // Делегирование чтения в products store
213
+ state: products.state
214
+ }"
215
+ :options="{
216
+ limit: 15,
217
+ lookup: ['inventory','categories'], // Подключение инвентарных данных
218
+ owner: route.params._id, // Фильтрация по владельцу
219
+ sortParam: sort.param,
220
+ sortOrder: sort.order
221
+ }"
222
+ v-slot="{ items }"
223
+ >
224
+ ```
225
+
226
+ **Паттерн интеграции**: Компонент Inventory не работает напрямую с товарами, а делегирует это Products store. При этом он добавляет lookup для инвентарных данных, получая комбинированную информацию.
227
+
228
+ ### Table Customization
229
+
230
+ ```vue
231
+ <Table
232
+ :columns="columns.filter(col => col.visible)" // Динамические колонки
233
+ :items="items"
234
+ class="bg-white z-index-1 br-solid br-1px br-light radius-medium"
235
+ >
236
+ <!-- Кастомная ячейка для отображения доступности -->
237
+ <template #cell-available="{ row }">
238
+ <div class="flex-column flex">
239
+ <span class="d-block mn-b-thin">
240
+ {{ row.totalAvailable || 0 }}
241
+ </span>
242
+
243
+ <!-- Прогресс-бар уровня запасов -->
244
+ <div class="w-full h-0-5r bg-light radius-small overflow-hidden">
245
+ <div
246
+ class="h-full radius-small"
247
+ :class="getStockLevelClass(row.totalAvailable)"
248
+ :style="{ width: getStockLevelPercent(row.totalAvailable) + '%' }"
249
+ />
250
+ </div>
251
+ </div>
252
+ </template>
253
+
254
+ <!-- Кастомная ячейка для складов -->
255
+ <template #cell-storages="{ row }">
256
+ <div class="w-max-10r flex-nowrap flex t-trim">
257
+ <p
258
+ v-if="row.availabilityDetails?.length"
259
+ v-for="avail in row.availabilityDetails"
260
+ :key="avail._id"
261
+ class="w-max t-trim pd-small mn-r-micro radius-small bg-light t-small"
262
+ >
263
+ <span class="t-medium">{{ avail.available || 0 }}</span> ·
264
+ <span class="t-small">{{ avail.storageName || avail.storage }}:</span>
265
+ </p>
266
+ <p v-else>No stock</p>
267
+ </div>
268
+ </template>
269
+ </Table>
270
+ ```
271
+
272
+ **Rich Data Presentation**: Компонент не только отображает сырые данные, но и:
273
+ - **Визуализирует уровни запасов** через цветовые индикаторы и прогресс-бары
274
+ - **Группирует данные по складам** для удобного восприятия
275
+ - **Позволяет настраивать видимость колонок** через `columns.filter(col => col.visible)`
276
+
277
+ ## Межкомпонентное взаимодействие
278
+
279
+ ### Цепочка передачи данных
280
+
281
+ ```
282
+ User Action (click) → Component Event Handler → Store Action → API Request → Server Controller → Database → Response → Store State Update → Component Re-render
283
+ ```
284
+
285
+ **Конкретный пример - создание stock adjustment**:
286
+
287
+ 1. **User Action**: Пользователь заполняет `AdjustmentForm.vue` и нажимает "Save"
288
+ 2. **Component**: `AdjustmentForm.vue` эмитит событие `@save` с данными adjustment
289
+ 3. **Parent Component**: `Inventory.vue` получает событие и вызывает `inventory.actions.createAdjustment(data)`
290
+ 4. **Store Action**: Отправляет POST `/api/inventory/adjustments/create`
291
+ 5. **Server Route**: `jwt.verifyToken() → verifier.verifyAdjustmentBody → abac.middleware → adjustmentService.create`
292
+ 6. **Business Logic**: Создает adjustment, обновляет количество в StockAvailability, пересчитывает доступность
293
+ 7. **Response**: Возвращает созданный объekt adjustment
294
+ 8. **Store Update**: `state.adjustments.unshift(response.data)`
295
+ 9. **UI Update**: Таблица автоматически обновляется через reactive связь
296
+
297
+ ### Event Bus Pattern
298
+
299
+ ```javascript
300
+ // В adjustment.service.js
301
+ observer.notify('stock.adjusted', {
302
+ adjustment,
303
+ availability,
304
+ affectedVariants
305
+ });
306
+
307
+ // В другом модуле
308
+ observer.on('stock.adjusted', (data) => {
309
+ // Реакция на изменение остатков
310
+ updateRelatedData(data.affectedVariants);
311
+ });
312
+ ```
313
+
314
+ **Слабая связанность**: Компоненты не знают друг о друге напрямую, что позволяет:
315
+ - **Легко добавлять новые обработчики** без изменения основного кода
316
+ - **Изолировать ошибки**: падение одного обработчика не влияет на другие
317
+ - **Упрощать тестирование**: можно мокать события
318
+
319
+ ## Dependency Injection Pattern
320
+
321
+ ### Factory Pattern для Services
322
+
323
+ ```javascript
324
+ // В routes/inventory.routes.js
325
+ const jwt = jwtFactory(db); // Создание JWT service с доступом к db
326
+ const verifier = verifierFactory(db); // Создание validator service
327
+ const abac = getInstance(db); // Singleton ABAC instance
328
+ const adjustmentService = adjustmentServiceFactory(db); // Создание adjustment service
329
+ const availabilityService = availabilityServiceFactory(db); // Создание availability service
330
+ const auditService = auditServiceFactory(db); // Создание audit service
331
+ ```
332
+
333
+ **Преимущества**:
334
+ - **Тестируемость**: легко подставить моки вместо реальных services
335
+ - **Конфигурируемость**: можно передавать разные конфигурации через параметры
336
+ - **Отложенная инициализация**: services создаются только когда нужны
337
+
338
+ Эта архитектура обеспечивает высокую модульность и maintainability кода, позволяя легко тестировать, расширять и модифицировать отдельные компоненты без влияния на систему в целом.