@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.
- package/dist/_virtual/index.cjs +4 -4
- package/dist/_virtual/index.js +4 -4
- package/dist/_virtual/index2.cjs +4 -4
- package/dist/_virtual/index2.js +4 -4
- package/dist/{abac-Cf_9lCSh.js → abac-CnJsrv8S.js} +3 -3
- package/dist/{abac-6LjoG9u-.cjs → abac-DOyUjhee.cjs} +3 -3
- package/dist/builder.cjs +27 -25
- package/dist/builder.js +27 -25
- package/dist/chats.server.cjs +198 -1
- package/dist/chats.server.js +198 -1
- package/dist/{crud-sE7GLPbj.js → crud-BIFl1W1i.js} +6 -6
- package/dist/{crud-JN_LFj01.cjs → crud-CC6k6yY5.cjs} +6 -6
- package/dist/{globals.logger-CZMgIMlM.cjs → globals.logger-BuW7JHMY.cjs} +63 -53
- package/dist/{globals.logger-Bf6rRU7j.js → globals.logger-VRHh-WUW.js} +63 -53
- package/dist/{globals.observer-CV2wCzzh.cjs → globals.observer-C_FYclgV.cjs} +36 -1
- package/dist/{globals.observer-CDqUjVU5.js → globals.observer-MZsqaE6F.js} +36 -1
- package/dist/globals.server.cjs +1 -1
- package/dist/globals.server.js +1 -1
- package/dist/inventory.server.cjs +276 -376
- package/dist/inventory.server.js +276 -376
- package/dist/main-BM3GslOO.cjs +11 -0
- package/dist/{main-wmEhGVvD.js → main-Qcn7YlTx.js} +1834 -1830
- package/dist/martyrs/src/components/Address/{Address.vue2.cjs → Address.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Address/{Address.vue2.js.map → Address.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Address/{Address.vue2.js → Address.vue.js} +2 -2
- package/dist/martyrs/src/components/Address/Address.vue.js.map +1 -0
- package/dist/martyrs/src/components/Button/Button.vue.cjs +1 -1
- package/dist/martyrs/src/components/Button/Button.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Button/Button.vue.js +1 -1
- package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -1
- package/dist/martyrs/src/components/Chips/{Chips.vue.cjs → Chips.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Chips/{Chips.vue.js → Chips.vue2.js} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs → Dropdown.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.js → Dropdown.vue2.js} +2 -2
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs.map → Dropdown.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs +0 -93
- package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js +1 -94
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs +93 -0
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js +94 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +2 -3
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +2 -3
- package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.cjs +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.cjs.map +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.js +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +1 -1
- package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.cjs → LocationMarker.vue.cjs} +2 -2
- package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.js.map → LocationMarker.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.js → LocationMarker.vue.js} +2 -2
- package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js.map +1 -0
- package/dist/martyrs/src/components/Select/{Select.vue2.cjs → Select.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Select/{Select.vue2.js.map → Select.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Select/{Select.vue2.js → Select.vue.js} +2 -2
- package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -0
- package/dist/martyrs/src/modules/auth/views/components/blocks/CardUser.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/blocks/CardUser.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +4 -4
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +41 -51
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +59 -69
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.cjs +11 -13
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js +11 -13
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.cjs +10 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.js +10 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs +6 -0
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +6 -0
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.cjs +27 -11
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js +28 -12
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs +62 -0
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js +63 -1
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js.map +1 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.cjs +60 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.cjs.map +1 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.js +60 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs +3 -3
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +3 -3
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +2 -2
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -2
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs +50 -368
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js +53 -371
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +2 -3
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -3
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js.map +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +3 -3
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +3 -3
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.cjs +16 -3
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.js +17 -4
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/mixins/mixins.cjs +7 -0
- package/dist/martyrs/src/modules/globals/views/mixins/mixins.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/mixins/mixins.js +7 -0
- package/dist/martyrs/src/modules/globals/views/mixins/mixins.js.map +1 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +67 -43
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +68 -44
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs +22 -7
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +23 -8
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs +47 -32
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +48 -33
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +47 -26
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +48 -27
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +42 -52
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +43 -53
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +18 -18
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/store/{ inventory.store.cjs → inventory.store.cjs} +46 -2
- package/dist/martyrs/src/modules/inventory/store/inventory.store.cjs.map +1 -0
- package/dist/martyrs/src/modules/inventory/store/{ inventory.store.js → inventory.store.js} +46 -2
- package/dist/martyrs/src/modules/inventory/store/inventory.store.js.map +1 -0
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +180 -19
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +181 -20
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
- package/dist/martyrs/src/modules/music/router/music.cjs +1 -2
- package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/router/music.js +1 -2
- package/dist/martyrs/src/modules/music/router/music.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +3 -4
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +3 -4
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/orders.client.cjs +2 -2
- package/dist/martyrs/src/modules/orders/orders.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/orders.client.js +2 -2
- package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
- package/dist/martyrs/src/modules/orders/router/customers.router.cjs +1 -1
- package/dist/martyrs/src/modules/orders/router/customers.router.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/router/customers.router.js +1 -1
- package/dist/martyrs/src/modules/orders/router/customers.router.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +2 -24
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +5 -27
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.cjs +4 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js +4 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +3 -3
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs +195 -0
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +195 -0
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +402 -0
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +402 -0
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs +86 -0
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +86 -0
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +10 -10
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +11 -11
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +279 -191
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +285 -197
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +7 -7
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +7 -7
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.cjs +4 -4
- package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.js +4 -4
- package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs +42 -41
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js +53 -52
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/organizations.client.cjs +23 -16
- package/dist/martyrs/src/modules/organizations/organizations.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/organizations.client.js +35 -28
- package/dist/martyrs/src/modules/organizations/organizations.client.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/router/departments.router.cjs +0 -18
- package/dist/martyrs/src/modules/organizations/router/departments.router.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/router/departments.router.js +0 -18
- package/dist/martyrs/src/modules/organizations/router/departments.router.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/store/departments.store.cjs +6 -0
- package/dist/martyrs/src/modules/organizations/store/departments.store.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/departments.store.js +6 -0
- package/dist/martyrs/src/modules/organizations/store/departments.store.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/invites.store.cjs +6 -0
- package/dist/martyrs/src/modules/organizations/store/invites.store.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/invites.store.js +6 -0
- package/dist/martyrs/src/modules/organizations/store/invites.store.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/memberships.store.cjs +20 -0
- package/dist/martyrs/src/modules/organizations/store/memberships.store.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/memberships.store.js +20 -0
- package/dist/martyrs/src/modules/organizations/store/memberships.store.js.map +1 -0
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +3 -4
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +3 -4
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +3 -3
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +3 -3
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs +60 -272
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js +62 -274
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +4 -4
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +4 -4
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/music.server.cjs +9 -9
- package/dist/music.server.js +9 -9
- package/dist/notifications.server.cjs +0 -24
- package/dist/notifications.server.js +0 -24
- package/dist/orders.server.cjs +3 -6
- package/dist/orders.server.js +3 -6
- package/dist/organizations.server.cjs +119 -43
- package/dist/organizations.server.js +119 -43
- package/dist/products.server.cjs +5 -5
- package/dist/products.server.js +5 -5
- package/dist/rents.server.cjs +3 -3
- package/dist/rents.server.js +3 -3
- package/dist/style.css +16 -17
- package/dist/wallet.server.cjs +2 -2
- package/dist/wallet.server.js +2 -2
- package/dist/{web-B5wZTKbK.cjs → web-B0cfxzgu.cjs} +1 -1
- package/dist/{web-520xCgXy.js → web-DVR8m2fm.js} +1 -1
- package/package.json +1 -1
- package/src/builder/modes/ssr.rspack.dev.js +20 -12
- package/src/builder/rspack/rspack.config.base.js +16 -15
- package/src/components/Button/Button.vue +1 -1
- package/src/components/Feed/Feed.old.vue +0 -1
- package/src/components/Feed/Feed.vue +1 -31
- package/src/components/Loader/Loader.vue +1 -1
- package/src/modules/auth/FIXES.md +61 -0
- package/src/modules/auth/PROMT.md +33 -0
- package/src/modules/auth/auth.server.js +1 -0
- package/src/modules/auth/views/components/blocks/CardUser.vue +2 -2
- package/src/modules/auth/views/components/layouts/Auth.vue +1 -1
- package/src/modules/auth/views/components/pages/Invite.vue +2 -2
- package/src/modules/auth/views/components/pages/Profile.vue +33 -48
- package/src/modules/auth/views/components/sections/SliderFeatures.vue +5 -7
- package/src/modules/auth/views/store/auth.js +16 -1
- 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
- package/src/modules/backoffice/components/partials/Sidebar.vue +6 -0
- package/src/modules/chats/CLAUDE.md +137 -0
- package/src/modules/chats/components/blocks/ChatMessage.vue +12 -0
- package/src/modules/chats/components/sections/ChatWindow.vue +84 -2
- package/src/modules/chats/controllers/chats.controller.js +187 -0
- package/src/modules/chats/models/chat.model.js +21 -0
- package/src/modules/chats/routes/chats.routes.js +46 -0
- package/src/modules/chats/store/chat.store.js +67 -0
- package/src/modules/community/components/layouts/Community.vue +2 -2
- package/src/modules/community/components/pages/Posts.vue +3 -328
- package/src/modules/events/components/pages/EditEventTickets.vue +1 -1
- package/src/modules/events/components/pages/Events.vue +2 -2
- package/src/modules/globals/controllers/classes/globals.cache.js +64 -55
- package/src/modules/globals/controllers/classes/globals.logger.js +40 -4
- package/src/modules/globals/controllers/classes/globals.observer.js +54 -4
- package/src/modules/globals/views/components/partials/Header.vue +1 -1
- package/src/modules/globals/views/components/partials/Sidebar.vue +17 -13
- package/src/modules/globals/views/mixins/mixins.js +7 -0
- package/src/modules/inventory/CLAUDE.md +330 -0
- package/src/modules/inventory/PROMT.md +25 -0
- package/src/modules/inventory/components/forms/AdjustmentForm.vue +53 -36
- package/src/modules/inventory/components/forms/ColumnSettingsMenu.vue +11 -6
- package/src/modules/inventory/components/forms/HistoryView.vue +21 -9
- package/src/modules/inventory/components/forms/StockAlertsForm.vue +33 -22
- package/src/modules/inventory/components/pages/Inventory.vue +40 -40
- package/src/modules/inventory/components/pages/InventoryEdit.vue +1 -1
- package/src/modules/inventory/docs/01-intro.md +126 -0
- package/src/modules/inventory/docs/02-architecture.md +266 -0
- package/src/modules/inventory/docs/03-components-and-relationships.md +338 -0
- package/src/modules/inventory/docs/04-business-logic-and-algorithms.md +376 -0
- package/src/modules/inventory/docs/05-api-specification.md +356 -0
- package/src/modules/inventory/docs/06-access-control.md +320 -0
- package/src/modules/inventory/inventory.server.js +6 -2
- package/src/modules/inventory/{services → middlewares}/inventory.verifier.js +5 -16
- package/src/modules/inventory/models/stock.availability.model.js +20 -7
- package/src/modules/inventory/routes/inventory.routes.js +14 -17
- package/src/modules/inventory/services/adjustment.service.js +137 -0
- package/src/modules/inventory/services/audit.service.js +160 -0
- package/src/modules/inventory/services/availability.service.js +323 -0
- package/src/modules/inventory/services/inventory.helpers.old.js +217 -0
- package/src/modules/inventory/store/{ inventory.store.js → inventory.store.js} +0 -14
- package/src/modules/inventory/workers/inventory.availability.worker.js +29 -30
- package/src/modules/marketplace/views/components/layouts/Marketplace.vue +160 -8
- package/src/modules/notifications/controllers/notifications.controller.js +0 -6
- package/src/modules/notifications/services/notification.service.js +1 -17
- package/src/modules/notifications/services/web-push.service.js +0 -2
- package/src/modules/orders/components/blocks/CardOrderBackoffice.vue +2 -2
- package/src/modules/orders/components/blocks/CardOrderVar1.vue +1 -1
- package/src/modules/orders/controllers/orders.controller.js +2 -4
- package/src/modules/orders/orders.client.js +2 -2
- package/src/modules/orders/router/customers.router.js +1 -1
- package/src/modules/organizations/CLAUDE.md +259 -0
- package/src/modules/organizations/components/blocks/CardDepartment.vue +1 -22
- package/src/modules/organizations/components/blocks/Socials.vue +1 -1
- package/src/modules/organizations/components/elements/ButtonToggleMembership.vue +3 -3
- package/src/modules/organizations/components/forms/AddExistingMembersForm.vue +191 -0
- package/src/modules/organizations/components/forms/DepartmentForm.vue +390 -0
- package/src/modules/organizations/components/forms/InviteForm.vue +81 -0
- package/src/modules/organizations/components/pages/Department.vue +10 -10
- package/src/modules/organizations/components/pages/DepartmentEdit.vue +8 -8
- package/src/modules/organizations/components/pages/Members.vue +265 -171
- package/src/modules/organizations/components/pages/Organization.new.vue +172 -183
- package/src/modules/organizations/components/pages/Organization.vue +6 -6
- package/src/modules/organizations/components/pages/OrganizationEdit.vue +1 -1
- package/src/modules/organizations/components/pages/Organizations.vue +1 -1
- package/src/modules/organizations/components/sections/Organizations.vue +2 -2
- package/src/modules/organizations/components/sections/Publics.vue +4 -4
- package/src/modules/organizations/configs/navigation.organization.config.js +40 -39
- package/src/modules/organizations/controllers/departments.controller.js +53 -34
- package/src/modules/organizations/controllers/invites.controller.js +44 -5
- package/src/modules/organizations/controllers/memberships.controller.js +43 -4
- package/src/modules/organizations/organizations.client.js +24 -15
- package/src/modules/organizations/router/departments.router.js +0 -18
- package/src/modules/organizations/routes/departments.routes.js +6 -8
- package/src/modules/organizations/routes/invites.routes.js +6 -4
- package/src/modules/organizations/routes/memberships.routes.js +6 -5
- package/src/modules/organizations/routes/organizations.routes.js +1 -1
- package/src/modules/organizations/store/departments.store.js +5 -0
- package/src/modules/organizations/store/invites.store.js +5 -0
- package/src/modules/organizations/store/memberships.store.js +23 -0
- package/src/modules/products/components/pages/Products.vue +0 -1
- package/src/modules/spots/components/blocks/CardSpot.vue +1 -1
- package/src/modules/spots/components/pages/Spots.vue +3 -203
- package/src/styles/base/all.scss +0 -15
- package/src/styles/responsive.scss +1 -31
- package/src/styles/typography.scss +20 -5
- package/dist/main-CSzPfQYR.cjs +0 -11
- package/dist/martyrs/src/components/Address/Address.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/Chips/Chips.vue.js.map +0 -1
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +0 -1
- package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Select/Select.vue2.cjs.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.cjs +0 -76
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.js +0 -76
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.js.map +0 -1
- package/dist/martyrs/src/modules/inventory/store/ inventory.store.cjs.map +0 -1
- package/dist/martyrs/src/modules/inventory/store/ inventory.store.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +0 -280
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +0 -280
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/departments.cjs +0 -121
- package/dist/martyrs/src/modules/organizations/store/departments.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/departments.js +0 -121
- package/dist/martyrs/src/modules/organizations/store/departments.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/invites.cjs +0 -64
- package/dist/martyrs/src/modules/organizations/store/invites.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/invites.js +0 -64
- package/dist/martyrs/src/modules/organizations/store/invites.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/memberships.cjs +0 -87
- package/dist/martyrs/src/modules/organizations/store/memberships.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/memberships.js +0 -87
- package/dist/martyrs/src/modules/organizations/store/memberships.js.map +0 -1
- package/src/modules/globals/controllers/classes/globals.websocket.ws.js +0 -102
- package/src/modules/globals/views/components/blocks/BlockFilter.vue +0 -60
- package/src/modules/inventory/docs/README.md +0 -291
- package/src/modules/inventory/models/stock.balance.model.js +0 -43
- package/src/modules/inventory/services/inventory.crud.js +0 -710
- package/src/modules/inventory/tests/inventory.test.js +0 -281
- package/src/modules/organizations/store/departments.js +0 -137
- package/src/modules/organizations/store/invites.js +0 -76
- package/src/modules/organizations/store/memberships.js +0 -110
|
@@ -2,17 +2,19 @@ class Observer {
|
|
|
2
2
|
constructor() {
|
|
3
3
|
this.listeners = {};
|
|
4
4
|
}
|
|
5
|
+
|
|
5
6
|
subscribe(eventType, callback, once = false) {
|
|
6
7
|
if (!this.listeners[eventType]) {
|
|
7
8
|
this.listeners[eventType] = new Map();
|
|
8
9
|
}
|
|
9
10
|
this.listeners[eventType].set(callback, { once });
|
|
10
11
|
}
|
|
12
|
+
|
|
11
13
|
async notify(eventType, data) {
|
|
12
14
|
if (this.listeners[eventType]) {
|
|
13
15
|
const promises = [];
|
|
14
16
|
const callbacksToRemove = [];
|
|
15
|
-
|
|
17
|
+
|
|
16
18
|
for (const [callback, { once }] of this.listeners[eventType]) {
|
|
17
19
|
const promise = Promise.resolve()
|
|
18
20
|
.then(() => callback(data))
|
|
@@ -20,13 +22,14 @@ class Observer {
|
|
|
20
22
|
console.error('Error executing callback:', error);
|
|
21
23
|
});
|
|
22
24
|
promises.push(promise);
|
|
25
|
+
|
|
23
26
|
if (once) {
|
|
24
27
|
callbacksToRemove.push(callback);
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
|
-
|
|
30
|
+
|
|
28
31
|
await Promise.all(promises);
|
|
29
|
-
|
|
32
|
+
|
|
30
33
|
for (const callback of callbacksToRemove) {
|
|
31
34
|
this.listeners[eventType].delete(callback);
|
|
32
35
|
if (this.listeners[eventType].size === 0) {
|
|
@@ -35,6 +38,7 @@ class Observer {
|
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
}
|
|
41
|
+
|
|
38
42
|
remove(eventType, callback) {
|
|
39
43
|
if (this.listeners[eventType]?.has(callback)) {
|
|
40
44
|
this.listeners[eventType].delete(callback);
|
|
@@ -43,5 +47,51 @@ class Observer {
|
|
|
43
47
|
}
|
|
44
48
|
}
|
|
45
49
|
}
|
|
50
|
+
|
|
51
|
+
removeAll(eventType) {
|
|
52
|
+
if (eventType) {
|
|
53
|
+
delete this.listeners[eventType];
|
|
54
|
+
} else {
|
|
55
|
+
this.listeners = {};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
46
58
|
}
|
|
47
|
-
|
|
59
|
+
|
|
60
|
+
// Хранилище экземпляров по namespace
|
|
61
|
+
const instances = new Map();
|
|
62
|
+
|
|
63
|
+
// Экспортируем конструктор с поддержкой namespace
|
|
64
|
+
export default class ObserverNamespaced {
|
|
65
|
+
constructor(namespace = 'global') {
|
|
66
|
+
// Если экземпляр для namespace уже существует, возвращаем его
|
|
67
|
+
if (instances.has(namespace)) {
|
|
68
|
+
return instances.get(namespace);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Создаем новый экземпляр для namespace
|
|
72
|
+
const instance = new Observer();
|
|
73
|
+
instances.set(namespace, instance);
|
|
74
|
+
|
|
75
|
+
return instance;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Статический метод для получения всех namespace'ов
|
|
79
|
+
static getNamespaces() {
|
|
80
|
+
return Array.from(instances.keys());
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Статический метод для очистки подписок в namespace
|
|
84
|
+
static clearNamespace(namespace) {
|
|
85
|
+
if (instances.has(namespace)) {
|
|
86
|
+
instances.get(namespace).removeAll();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Статический метод для удаления namespace (полностью)
|
|
91
|
+
static removeNamespace(namespace) {
|
|
92
|
+
if (instances.has(namespace)) {
|
|
93
|
+
instances.get(namespace).removeAll();
|
|
94
|
+
instances.delete(namespace);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
<script setup>
|
|
2
2
|
import { ref, watch } from 'vue'
|
|
3
|
-
import { useRouter } from 'vue-router'
|
|
3
|
+
import { useRouter, useRoute } from 'vue-router'
|
|
4
4
|
import { useGlobalMixins } from "@martyrs/src/modules/globals/views/mixins/mixins.js"
|
|
5
|
-
|
|
6
5
|
import * as globals from '@martyrs/src/modules/globals/views/store/globals.js'
|
|
7
6
|
|
|
8
7
|
const props = defineProps({
|
|
@@ -29,19 +28,30 @@ const emits = defineEmits([
|
|
|
29
28
|
])
|
|
30
29
|
|
|
31
30
|
const { isPhone, isTablet } = useGlobalMixins()
|
|
32
|
-
|
|
33
31
|
const router = useRouter()
|
|
32
|
+
const route = useRoute()
|
|
34
33
|
|
|
35
34
|
const toggleSidebar = () => {
|
|
36
35
|
emits('closeSidebar')
|
|
37
36
|
}
|
|
38
37
|
|
|
38
|
+
const handleMouseEnter = () => {
|
|
39
|
+
if (route.meta?.sidebar_hover && !isPhone() && !isTablet()) {
|
|
40
|
+
globals.state.isOpenSidebar = true
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const handleMouseLeave = () => {
|
|
45
|
+
if (route.meta?.sidebar_hover && !isPhone() && !isTablet()) {
|
|
46
|
+
globals.state.isOpenSidebar = false
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
39
50
|
router.beforeEach((to, from) => {
|
|
40
51
|
if (isPhone() || isTablet()) {
|
|
41
52
|
emits('closeSidebar')
|
|
42
53
|
}
|
|
43
54
|
})
|
|
44
|
-
|
|
45
55
|
</script>
|
|
46
56
|
|
|
47
57
|
<template>
|
|
@@ -56,11 +66,11 @@ router.beforeEach((to, from) => {
|
|
|
56
66
|
? 't-black bg-white br-light'
|
|
57
67
|
: 't-white bg-black br-dark'
|
|
58
68
|
]"
|
|
69
|
+
@mouseenter="handleMouseEnter"
|
|
70
|
+
@mouseleave="handleMouseLeave"
|
|
59
71
|
>
|
|
60
|
-
|
|
61
72
|
<!-- Slot for navigation content -->
|
|
62
73
|
<slot></slot>
|
|
63
|
-
|
|
64
74
|
<div v-if="MOBILE_APP" @click="() => toggleSidebar()" class="pos-relative">
|
|
65
75
|
<div class="bg-light radius-medium pd-medium">
|
|
66
76
|
<p class="t-medium t-black-transp-60">
|
|
@@ -68,7 +78,6 @@ router.beforeEach((to, from) => {
|
|
|
68
78
|
</p>
|
|
69
79
|
</div>
|
|
70
80
|
</div>
|
|
71
|
-
|
|
72
81
|
<div
|
|
73
82
|
class="br-solid w-100 br-t"
|
|
74
83
|
:class="{
|
|
@@ -106,27 +115,22 @@ router.beforeEach((to, from) => {
|
|
|
106
115
|
width: 0;
|
|
107
116
|
display: none;
|
|
108
117
|
}
|
|
109
|
-
|
|
110
118
|
.visible {
|
|
111
119
|
opacity: 1;
|
|
112
120
|
display: block;
|
|
113
121
|
}
|
|
114
|
-
|
|
115
122
|
/* Scrollbar styles */
|
|
116
123
|
::-webkit-scrollbar {
|
|
117
124
|
width: 6px;
|
|
118
125
|
}
|
|
119
|
-
|
|
120
126
|
::-webkit-scrollbar-track {
|
|
121
127
|
background: transparent;
|
|
122
128
|
}
|
|
123
|
-
|
|
124
129
|
::-webkit-scrollbar-thumb {
|
|
125
130
|
background-color: var(--grey-micro);
|
|
126
131
|
border-radius: 3px;
|
|
127
132
|
}
|
|
128
|
-
|
|
129
133
|
::-webkit-scrollbar-thumb:hover {
|
|
130
134
|
background-color: var(--grey-small);
|
|
131
135
|
}
|
|
132
|
-
</style>
|
|
136
|
+
</style>
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';
|
|
2
|
+
import { inject } from 'vue';
|
|
2
3
|
|
|
3
4
|
// useGlobalMixins.js
|
|
4
5
|
export function useGlobalMixins() {
|
|
6
|
+
const isModuleInstalled = (moduleName) => {
|
|
7
|
+
const store = inject('store');
|
|
8
|
+
if (!store || !store.modules) return false;
|
|
9
|
+
return store.modules.includes(moduleName);
|
|
10
|
+
};
|
|
5
11
|
const isAdmin = roles => {
|
|
6
12
|
if (roles) {
|
|
7
13
|
const isAdmin = roles.includes('ROLE_ADMIN') ? roles.includes('ROLE_ADMIN') : false;
|
|
@@ -287,6 +293,7 @@ export function useGlobalMixins() {
|
|
|
287
293
|
const isXXLDesktop = () => isMediaMin('--xxl-desktop-min');
|
|
288
294
|
|
|
289
295
|
return {
|
|
296
|
+
isModuleInstalled,
|
|
290
297
|
isAdmin,
|
|
291
298
|
hasAccess,
|
|
292
299
|
returnCurrency,
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
# Техническая документация: Модуль Inventory
|
|
2
|
+
|
|
3
|
+
## 1. Назначение модуля
|
|
4
|
+
|
|
5
|
+
Модуль `inventory` управляет складскими операциями в системе martyrs. Основные функции:
|
|
6
|
+
- **Учёт остатков и доступности** (stock availability) товаров с учётом ингредиентов
|
|
7
|
+
- **Корректировки остатков** (stock adjustments) с историей изменений
|
|
8
|
+
- **Инвентаризация** (stock audits) с пакетным обновлением остатков
|
|
9
|
+
- **Алерты** по критическим остаткам
|
|
10
|
+
- **Автоматический пересчёт** доступности через Change Streams
|
|
11
|
+
|
|
12
|
+
## 2. Общая архитектура (клиент ⇄ сервер)
|
|
13
|
+
|
|
14
|
+
### Инициализация модуля
|
|
15
|
+
|
|
16
|
+
**Клиентская сторона** (`inventory.client.js`):
|
|
17
|
+
```
|
|
18
|
+
Vue App → initializeInventory() → Router + Components
|
|
19
|
+
↓
|
|
20
|
+
addRoutes() для backoffice/organization контекстов
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Серверная сторона** (`inventory.server.js`):
|
|
24
|
+
```
|
|
25
|
+
Express App → initializeInventory() → Models + Routes + Policies
|
|
26
|
+
↓
|
|
27
|
+
Регистрация моделей в db + настройка API endpoints
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Архитектура взаимодействий
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
Vue Components (UI)
|
|
34
|
+
↓ HTTP requests
|
|
35
|
+
Vue Store (inventory.store.js)
|
|
36
|
+
↓ axios calls
|
|
37
|
+
Express Routes (inventory.routes.js)
|
|
38
|
+
↓ middleware chain
|
|
39
|
+
[JWT] → [Verifier] → [ABAC] → [Service]
|
|
40
|
+
↓ business logic
|
|
41
|
+
Services (adjustment/availability/audit.service.js)
|
|
42
|
+
↓ shared helpers
|
|
43
|
+
Helpers (inventory.helpers.js)
|
|
44
|
+
↓ database operations
|
|
45
|
+
MongoDB Models + Cache + Observer + Change Streams
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 3. Потоки данных и точки входа
|
|
49
|
+
|
|
50
|
+
### Основные API endpoints:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
GET /api/inventory/adjustments - История корректировок
|
|
54
|
+
POST /api/inventory/adjustments/create - Создание корректировки
|
|
55
|
+
|
|
56
|
+
GET /api/inventory/availability - Доступность и остатки товаров
|
|
57
|
+
|
|
58
|
+
GET /api/inventory/audits - Список инвентаризаций
|
|
59
|
+
POST /api/inventory/audits/create - Создание инвентаризации
|
|
60
|
+
POST /api/inventory/audits/complete - Завершение инвентаризации
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Клиентские маршруты:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
/inventory/ → InventoryList (Inventory.vue)
|
|
67
|
+
/inventory/audit → InventoryAudit (InventoryEdit.vue)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Поддерживает два контекста:
|
|
71
|
+
- **backoffice**: `BackofficeInventoryList`, `BackofficeInventoryAudit`
|
|
72
|
+
- **organization**: `OrganizationInventoryList`, `OrganizationInventoryAudit`
|
|
73
|
+
|
|
74
|
+
## 4. Аутентификация и авторизация (пошагово)
|
|
75
|
+
|
|
76
|
+
### Middleware цепочка:
|
|
77
|
+
|
|
78
|
+
1. **JWT верификация** (`jwtFactory`):
|
|
79
|
+
```js
|
|
80
|
+
jwt.verifyToken() // обязательная аутентификация
|
|
81
|
+
jwt.verifyToken(true) // опциональная аутентификация
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
2. **Валидация входных данных** (`verifierFactory`):
|
|
85
|
+
```js
|
|
86
|
+
verifier.verifyAdjustmentQuery // GET параметры
|
|
87
|
+
verifier.verifyAdjustmentBody // POST тело запроса
|
|
88
|
+
verifier.verifyBalanceQuery // фильтры остатков
|
|
89
|
+
verifier.verifyInventoryBody // данные инвентаризации
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
3. **ABAC авторизация** (`globalsabac`):
|
|
93
|
+
```js
|
|
94
|
+
abac.middleware('stockAdjustment', 'create') // для создания корректировок
|
|
95
|
+
abac.middleware('stockAudit', 'create') // для создания инвентаризации
|
|
96
|
+
abac.middleware('stockAudit', 'edit') // для завершения инвентаризации
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Политики безопасности:
|
|
100
|
+
|
|
101
|
+
В `inventory.policies.js` **закомментированы** стандартные политики:
|
|
102
|
+
- Создание корректировки: роли `warehouse`, `admin`, `moderator`
|
|
103
|
+
- Завершение инвентаризации: только создатель или `admin`
|
|
104
|
+
|
|
105
|
+
**Примечание**: Политики отключены - требуется настройка в зависимости от бизнес-требований.
|
|
106
|
+
|
|
107
|
+
## 5. Структура файлов и их связи
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
inventory/
|
|
111
|
+
├── inventory.client.js # Точка входа клиента
|
|
112
|
+
├── inventory.server.js # Точка входа сервера
|
|
113
|
+
├── router/
|
|
114
|
+
│ └── inventory.router.js # Клиентские маршруты
|
|
115
|
+
├── routes/
|
|
116
|
+
│ ├── inventory.routes.js # API endpoints
|
|
117
|
+
│ └── stock.alerts.routes.js # API для алертов
|
|
118
|
+
├── services/
|
|
119
|
+
│ ├── adjustment.service.js # Сервис корректировок
|
|
120
|
+
│ ├── availability.service.js # Сервис доступности
|
|
121
|
+
│ ├── audit.service.js # Сервис инвентаризаций
|
|
122
|
+
│ └── inventory.helpers.js # Общие функции и хелперы
|
|
123
|
+
├── middlewares/
|
|
124
|
+
│ ├── inventory.verifier.js # Валидация запросов
|
|
125
|
+
│ └── stock.alerts.verifier.js # Валидация алертов
|
|
126
|
+
├── models/
|
|
127
|
+
│ ├── stock.adjustment.model.js # История корректировок
|
|
128
|
+
│ ├── stock.availability.model.js # Остатки и доступность
|
|
129
|
+
│ ├── stock.audit.model.js # Инвентаризации
|
|
130
|
+
│ └── stock.alerts.model.js # Алерты по остаткам
|
|
131
|
+
├── store/
|
|
132
|
+
│ ├── inventory.store.js # Vue состояние
|
|
133
|
+
│ └── stock.alerts.store.js # Состояние алертов
|
|
134
|
+
├── components/
|
|
135
|
+
│ ├── pages/
|
|
136
|
+
│ │ ├── Inventory.vue # Список товаров с остатками
|
|
137
|
+
│ │ └── InventoryEdit.vue # Создание инвентаризации
|
|
138
|
+
│ └── forms/
|
|
139
|
+
│ ├── AdjustmentForm.vue # Форма корректировки
|
|
140
|
+
│ ├── HistoryView.vue # История движений
|
|
141
|
+
│ ├── ColumnSettingsMenu.vue # Настройки колонок
|
|
142
|
+
│ └── StockAlertsForm.vue # Настройка алертов
|
|
143
|
+
├── policies/
|
|
144
|
+
│ └── inventory.policies.js # ABAC политики (отключены)
|
|
145
|
+
└── workers/
|
|
146
|
+
└── inventory.availability.worker.js # Фоновый пересчёт
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Ключевые зависимости:
|
|
150
|
+
|
|
151
|
+
- **Глобальные модули**: `@martyrs/src/modules/globals/*` (cache, logger, validator, abac)
|
|
152
|
+
- **Аутентификация**: `@martyrs/src/modules/auth/controllers/middlewares/authJwt.js`
|
|
153
|
+
- **Vue компоненты**: Vue 3 Composition API + реактивное состояние
|
|
154
|
+
- **MongoDB Change Streams**: Автоматический пересчёт при изменении ингредиентов
|
|
155
|
+
|
|
156
|
+
## 6. Как интегрировать модуль в проект
|
|
157
|
+
|
|
158
|
+
### Серверная интеграция:
|
|
159
|
+
|
|
160
|
+
```js
|
|
161
|
+
import { initialize as initInventory } from './modules/inventory/inventory.server.js';
|
|
162
|
+
|
|
163
|
+
// В основном server.js
|
|
164
|
+
initInventory(app, db, origins, publicPath);
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
При инициализации автоматически запускаются Change Streams для отслеживания изменений в ингредиентах товаров.
|
|
168
|
+
|
|
169
|
+
### Клиентская интеграция:
|
|
170
|
+
|
|
171
|
+
```js
|
|
172
|
+
import inventoryModule from './modules/inventory/inventory.client.js';
|
|
173
|
+
|
|
174
|
+
// В Vue приложении
|
|
175
|
+
inventoryModule.initialize(app, store, router, {
|
|
176
|
+
routeBackoffice: 'Backoffice Root',
|
|
177
|
+
routeOrganizations: 'OrganizationRoot',
|
|
178
|
+
withBackoffice: false, // включить backoffice роуты
|
|
179
|
+
withOrganizationRoutes: false // включить organization роуты
|
|
180
|
+
});
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Экспорт компонентов:
|
|
184
|
+
|
|
185
|
+
```js
|
|
186
|
+
import {
|
|
187
|
+
Inventory,
|
|
188
|
+
InventoryEdit,
|
|
189
|
+
AdjustmentForm,
|
|
190
|
+
HistoryView,
|
|
191
|
+
ColumnSettingsMenu,
|
|
192
|
+
StockAlertsForm
|
|
193
|
+
} from './modules/inventory/inventory.client.js';
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## 7. Расширение модуля
|
|
197
|
+
|
|
198
|
+
### Добавление новой причины корректировки:
|
|
199
|
+
|
|
200
|
+
1. **Модель** (`stock.adjustment.model.js`):
|
|
201
|
+
```js
|
|
202
|
+
reason: {
|
|
203
|
+
enum: ['restock', 'sale', 'return', 'damage', 'transfer', 'custom', 'new_reason']
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
2. **Валидатор** (`middlewares/inventory.verifier.js`):
|
|
208
|
+
```js
|
|
209
|
+
validator: Validator.schema().string().oneOf([..., 'new_reason'])
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Добавление нового типа инвентаризации:
|
|
213
|
+
|
|
214
|
+
1. **Расширить схему** `stock.audit.model.js`
|
|
215
|
+
2. **Добавить валидацию** в `middlewares/inventory.verifier.js`
|
|
216
|
+
3. **Обновить бизнес-логику** в `services/audit.service.js`
|
|
217
|
+
4. **Создать UI компонент** в `components/forms/`
|
|
218
|
+
|
|
219
|
+
### Добавление кастомных политик ABAC:
|
|
220
|
+
|
|
221
|
+
```js
|
|
222
|
+
// В inventory.policies.js
|
|
223
|
+
abac.registerResourcePolicy('stockAdjustment', async context => {
|
|
224
|
+
const { user, action, data } = context;
|
|
225
|
+
|
|
226
|
+
// Ваша логика авторизации
|
|
227
|
+
if (action === 'create' && data.reason === 'damage') {
|
|
228
|
+
// Только менеджеры могут списывать по браку
|
|
229
|
+
return await checkManagerRole(user);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return { allow: true };
|
|
233
|
+
});
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## 8. Безопасность
|
|
237
|
+
|
|
238
|
+
### Аутентификация:
|
|
239
|
+
- **JWT токены** через `authJwt.js` middleware
|
|
240
|
+
- **Опциональная аутентификация** для публичных endpoints (`availability`)
|
|
241
|
+
|
|
242
|
+
### Валидация данных:
|
|
243
|
+
- **Joi-схемы** через `globals.validator.js`
|
|
244
|
+
- **Строгая типизация** параметров и тела запросов
|
|
245
|
+
- **Санитизация** входных данных
|
|
246
|
+
|
|
247
|
+
### Авторизация:
|
|
248
|
+
- **ABAC система** через `globals.abac.js`
|
|
249
|
+
- **Контекстная авторизация** (resource + action)
|
|
250
|
+
- **Роли и права доступа** настраиваются через политики
|
|
251
|
+
|
|
252
|
+
### Защита API:
|
|
253
|
+
- **CORS** настройки через `origins`
|
|
254
|
+
- **Rate limiting** на уровне Express
|
|
255
|
+
- **Логирование** всех операций через `globals.logger.js`
|
|
256
|
+
|
|
257
|
+
### Транзакции:
|
|
258
|
+
- **MongoDB сессии** для атомарных операций
|
|
259
|
+
- **Rollback** при ошибках через `session.abortTransaction()`
|
|
260
|
+
|
|
261
|
+
## 9. Ключевые сценарии использования
|
|
262
|
+
|
|
263
|
+
### Сценарий 1: Корректировка остатков
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
1. Пользователь заходит в Inventory.vue
|
|
267
|
+
2. Нажимает "создать корректировку"
|
|
268
|
+
3. Заполняет AdjustmentForm.vue (товар, склад, количество, причина)
|
|
269
|
+
4. POST /api/inventory/adjustments/create
|
|
270
|
+
├── JWT проверка токена
|
|
271
|
+
├── Валидация данных
|
|
272
|
+
├── ABAC проверка прав ('stockAdjustment', 'create')
|
|
273
|
+
├── Создание StockAdjustment записи
|
|
274
|
+
├── Обновление StockAvailability (+quantity)
|
|
275
|
+
├── Пересчёт StockAvailability.доступности для затронутых вариантов
|
|
276
|
+
├── Проверка алертов по критическим остаткам
|
|
277
|
+
└── Инвалидация кеша
|
|
278
|
+
5. Обновление UI через reactive store
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Сценарий 2: Инвентаризация склада
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
1. Переход в InventoryEdit.vue
|
|
285
|
+
2. Выбор склада и добавление позиций
|
|
286
|
+
3. POST /api/inventory/audits/create (status: 'draft' | 'published')
|
|
287
|
+
4. Если status = 'published':
|
|
288
|
+
├── Создание StockAdjustment для каждой позиции
|
|
289
|
+
├── Batch update StockAvailability через bulkWrite
|
|
290
|
+
├── Пересчёт availability для всех затронутых товаров
|
|
291
|
+
└── Уведомления через Observer pattern
|
|
292
|
+
5. Если status = 'draft' - сохранение без применения
|
|
293
|
+
6. POST /api/inventory/audits/complete для применения draft инвентаризации
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Сценарий 3: Мониторинг доступности товаров
|
|
297
|
+
|
|
298
|
+
```
|
|
299
|
+
1. GET /api/inventory/availability?storage=X&details=true
|
|
300
|
+
2. Агрегация из Products с join к StockAvailability
|
|
301
|
+
3. Расчёт итоговой доступности:
|
|
302
|
+
├── Прямые остатки (quantity в StockAvailability)
|
|
303
|
+
├── On-demand производство (через ингредиенты)
|
|
304
|
+
└── Ограничения по ингредиентам
|
|
305
|
+
4. Кеширование результата на 5 минут
|
|
306
|
+
5. Real-time обновления через change streams на коллекции variants
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Сценарий 4: Автоматические алерты
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
1. При любом изменении остатков (adjustment/inventory)
|
|
313
|
+
2. Поиск активных алертов для товара/склада
|
|
314
|
+
3. Проверка threshold vs текущий остаток
|
|
315
|
+
4. Если остаток < порога:
|
|
316
|
+
├── HTTP запрос в /api/notifications
|
|
317
|
+
├── Метаданные: alertId, productId, currentStock, threshold
|
|
318
|
+
└── Уведомление создателю алерта
|
|
319
|
+
5. Логирование ошибок, но не прерывание основной операции
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
**Заключение**: Модуль inventory реализует полноценную систему складского учёта с поддержкой сложных сценариев (on-demand производство, пакетные операции, real-time уведомления). Архитектура построена на принципах разделения ответственности, транзакционности и масштабируемости.
|
|
325
|
+
|
|
326
|
+
Основные особенности архитектуры:
|
|
327
|
+
- **Модульность**: сервисы разделены по бизнес-функциям (adjustment, availability, audit)
|
|
328
|
+
- **Единая модель StockAvailability**: хранит и остатки (quantity) и доступность (available)
|
|
329
|
+
- **Change Streams**: автоматический пересчёт при изменении ингредиентов
|
|
330
|
+
- **Общие хелперы**: переиспользуемые функции вынесены в inventory.helpers.js
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
Перепиши документацию по модулю inventory, но сделай это как полноценную техническую документацию, ориентированную на разработчиков.
|
|
2
|
+
|
|
3
|
+
❗️Не делай сжатый конспект — структура и стиль должны соответствовать документации настоящих продакшн-модулей.
|
|
4
|
+
|
|
5
|
+
Требования к результату:
|
|
6
|
+
Разделы: Общее описание, Архитектура, Компоненты и связи, Бизнес-логика, API спецификация, Права доступа, Точки расширения, Обработка ошибок, Примеры сценариев, Встраивание модуля, Безопасность и
|
|
7
|
+
ограничения
|
|
8
|
+
|
|
9
|
+
Объясни зачем нужны ключевые сущности (balance, availability, audit и т.д.), а не просто их перечисление
|
|
10
|
+
|
|
11
|
+
Распиши типовые сценарии в деталях, с шагами, примерами и последствиями
|
|
12
|
+
|
|
13
|
+
Покажи, как устроена клиент-серверная связка через конкретные примеры запросов и изменений данных
|
|
14
|
+
|
|
15
|
+
Отдельно опиши, как работают middleware, кеш, фоновые задачи
|
|
16
|
+
|
|
17
|
+
Запрещается:
|
|
18
|
+
Просто переписывать имена файлов и маршрутов
|
|
19
|
+
|
|
20
|
+
Ограничиваться поверхностным описанием
|
|
21
|
+
|
|
22
|
+
Пропускать связи между слоями (UI ⇄ Store ⇄ API ⇄ DB)
|
|
23
|
+
|
|
24
|
+
Если ты не можешь объяснить назначение и логику каждой части, значит ты не понял модуль — вернись и пересмотри код.
|
|
25
|
+
Делай, как если бы ты сам писал модуль через месяц по этой документации. Сначала составь план переделок для утверждения. Делай на русском.
|