@ozdao/martyrs 0.2.519 → 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/chats.server.cjs +198 -1
- package/dist/chats.server.js +198 -1
- package/dist/{main-Wr1_4rwl.cjs → main-BM3GslOO.cjs} +6 -6
- package/dist/{main-DgGUrhjT.js → main-Qcn7YlTx.js} +1832 -1828
- 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/Feed/Feed.vue.cjs +0 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +0 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.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 +40 -50
- 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 +9 -0
- package/dist/martyrs/src/modules/auth/views/store/auth.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.js +9 -0
- package/dist/martyrs/src/modules/auth/views/store/auth.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/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 +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.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/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 +0 -1
- 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 +0 -1
- 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 +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +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/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 +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
- 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/router/music.cjs +0 -1
- package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/router/music.js +0 -1
- 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 +2 -3
- 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 +2 -3
- 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/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/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 +5 -5
- 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 +5 -5
- 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/pages/CategoryEdit.vue.cjs +2 -3
- 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 +2 -3
- 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 +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
- 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 +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.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 +2 -2
- 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 +2 -2
- 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/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 +2 -2
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +2 -2
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/notifications.server.cjs +0 -24
- package/dist/notifications.server.js +0 -24
- package/dist/orders.server.cjs +1 -4
- package/dist/orders.server.js +1 -4
- package/dist/organizations.server.cjs +115 -39
- package/dist/organizations.server.js +115 -39
- package/dist/style.css +9 -9
- package/dist/{web-42I-Howt.cjs → web-B0cfxzgu.cjs} +1 -1
- package/dist/{web-ByhZ_fIu.js → web-DVR8m2fm.js} +1 -1
- package/package.json +1 -1
- package/src/components/Feed/Feed.old.vue +0 -1
- package/src/components/Feed/Feed.vue +0 -30
- package/src/modules/auth/FIXES.md +2 -26
- 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 +15 -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/views/mixins/mixins.js +7 -0
- 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/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/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/typography.scss +20 -5
- package/dist/martyrs/src/components/Address/Address.vue2.cjs.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/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/CLAUDE.MD +0 -15
- 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/organizations/store/departments.js +0 -137
- package/src/modules/organizations/store/invites.js +0 -76
- package/src/modules/organizations/store/memberships.js +0 -110
|
@@ -1,13 +1,127 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="cols-2-1_3 z-index-3 pos-relative radius-big">
|
|
3
3
|
|
|
4
|
-
<div class="o-y-scroll br-r br-solid br-light
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
<div class="o-y-scroll br-r br-solid br-light pd-medium z-index-2 desktop-only h-100 pos-relative">
|
|
5
|
+
<div class="w-100 o-y-scroll h-100">
|
|
6
|
+
<!-- Categories -->
|
|
7
|
+
<div class="mn-b-medium" v-if="currentCategories.length > 0">
|
|
8
|
+
<h4 class="mn-b-small">
|
|
9
|
+
{{ route.params.categoryPath ? 'Subcategories' : 'Categories' }}
|
|
10
|
+
</h4>
|
|
11
|
+
<div class="gap-micro">
|
|
12
|
+
<div
|
|
13
|
+
v-for="category in currentCategories"
|
|
14
|
+
:key="category._id"
|
|
15
|
+
@click="selectCategory(category)"
|
|
16
|
+
class="pd-small radius-small cursor-pointer hover-bg-light transition-all"
|
|
17
|
+
>
|
|
18
|
+
{{ category.name }}
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<!-- Location Filter -->
|
|
24
|
+
<Spoiler
|
|
25
|
+
class="o-hidden mn-b-medium"
|
|
26
|
+
:status="true"
|
|
27
|
+
>
|
|
28
|
+
<template #header="{ isOpen }">
|
|
29
|
+
<div class="cursor-pointer w-100 flex-v-center flex-nowrap flex">
|
|
30
|
+
<h4 class="w-100">Location</h4>
|
|
31
|
+
<div class="h-2r w-2r flex-child-auto aspect-1x1 flex-center flex bg-light radius-extra">
|
|
32
|
+
<IconChevronBottom :class="{ 'rotate-180 mn-t-micro-negative': isOpen }" fill="rgb(var(--black))" class="i-regular"/>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</template>
|
|
36
|
+
|
|
37
|
+
<template #content>
|
|
38
|
+
<div class="mn-t-small">
|
|
39
|
+
<Field
|
|
40
|
+
v-model="searchLocation"
|
|
41
|
+
placeholder="Search location..."
|
|
42
|
+
type="text"
|
|
43
|
+
class="w-100 bg-light pd-small radius-small mn-b-small"
|
|
44
|
+
/>
|
|
45
|
+
<Checkbox
|
|
46
|
+
v-for="location in locationOptions"
|
|
47
|
+
:key="location"
|
|
48
|
+
v-model:radio="selectedLocation"
|
|
49
|
+
:label="location"
|
|
50
|
+
:value="location"
|
|
51
|
+
mode="radio"
|
|
52
|
+
class="mn-b-micro"
|
|
53
|
+
/>
|
|
54
|
+
</div>
|
|
55
|
+
</template>
|
|
56
|
+
</Spoiler>
|
|
57
|
+
|
|
58
|
+
<!-- Delivery Options -->
|
|
59
|
+
<Spoiler
|
|
60
|
+
class="o-hidden mn-b-medium"
|
|
61
|
+
:status="true"
|
|
62
|
+
>
|
|
63
|
+
<template #header="{ isOpen }">
|
|
64
|
+
<div class="cursor-pointer w-100 flex-v-center flex-nowrap flex">
|
|
65
|
+
<h4 class="w-100">Delivery Options</h4>
|
|
66
|
+
<div class="h-2r w-2r flex-child-auto aspect-1x1 flex-center flex bg-light radius-extra">
|
|
67
|
+
<IconChevronBottom :class="{ 'rotate-180 mn-t-micro-negative': isOpen }" fill="rgb(var(--black))" class="i-regular"/>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</template>
|
|
71
|
+
|
|
72
|
+
<template #content>
|
|
73
|
+
<div class="mn-t-small">
|
|
74
|
+
<Checkbox
|
|
75
|
+
v-for="option in deliveryOptions"
|
|
76
|
+
:key="option.value"
|
|
77
|
+
v-model:checkbox="selectedDeliveryOptions"
|
|
78
|
+
:label="option.label"
|
|
79
|
+
:value="option.value"
|
|
80
|
+
mode="checkbox"
|
|
81
|
+
class="mn-b-micro"
|
|
82
|
+
/>
|
|
83
|
+
</div>
|
|
84
|
+
</template>
|
|
85
|
+
</Spoiler>
|
|
86
|
+
|
|
87
|
+
<!-- Payment Options -->
|
|
88
|
+
<Spoiler
|
|
89
|
+
class="o-hidden mn-b-medium"
|
|
90
|
+
:status="true"
|
|
91
|
+
>
|
|
92
|
+
<template #header="{ isOpen }">
|
|
93
|
+
<div class="cursor-pointer w-100 flex-v-center flex-nowrap flex">
|
|
94
|
+
<h4 class="w-100">Payment Options</h4>
|
|
95
|
+
<div class="h-2r w-2r flex-child-auto aspect-1x1 flex-center flex bg-light radius-extra">
|
|
96
|
+
<IconChevronBottom :class="{ 'rotate-180 mn-t-micro-negative': isOpen }" fill="rgb(var(--black))" class="i-regular"/>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</template>
|
|
100
|
+
|
|
101
|
+
<template #content>
|
|
102
|
+
<div class="mn-t-small">
|
|
103
|
+
<Checkbox
|
|
104
|
+
v-for="option in paymentOptions"
|
|
105
|
+
:key="option.value"
|
|
106
|
+
v-model:checkbox="selectedPaymentOptions"
|
|
107
|
+
:label="option.label"
|
|
108
|
+
:value="option.value"
|
|
109
|
+
mode="checkbox"
|
|
110
|
+
class="mn-b-micro"
|
|
111
|
+
/>
|
|
112
|
+
</div>
|
|
113
|
+
</template>
|
|
114
|
+
</Spoiler>
|
|
115
|
+
|
|
116
|
+
<!-- Clear Filters Button -->
|
|
117
|
+
<button
|
|
118
|
+
@click="clearFilters"
|
|
119
|
+
class="bg-main w-100 button mn-t-medium"
|
|
120
|
+
>
|
|
121
|
+
Clear Filters
|
|
122
|
+
</button>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
11
125
|
|
|
12
126
|
<!-- Catalog wrapper -->
|
|
13
127
|
<div class="pd-thin">
|
|
@@ -45,7 +159,10 @@
|
|
|
45
159
|
import { useRoute, useRouter,onBeforeRouteLeave } from 'vue-router'
|
|
46
160
|
import { useI18n } from 'vue-i18n'
|
|
47
161
|
|
|
48
|
-
import
|
|
162
|
+
import Spoiler from "@martyrs/src/components/Spoiler/Spoiler.vue"
|
|
163
|
+
import Field from "@martyrs/src/components/Field/Field.vue"
|
|
164
|
+
import Checkbox from "@martyrs/src/components/Checkbox/Checkbox.vue"
|
|
165
|
+
import IconChevronBottom from '@martyrs/src/modules/icons/navigation/IconChevronBottom.vue'
|
|
49
166
|
|
|
50
167
|
import * as globals from '@martyrs/src/modules/globals/views/store/globals.js'
|
|
51
168
|
import * as categories from '@martyrs/src/modules/products/store/categories.js';
|
|
@@ -65,6 +182,41 @@
|
|
|
65
182
|
|
|
66
183
|
const desktopFilters = ref(null)
|
|
67
184
|
|
|
185
|
+
// Categories
|
|
186
|
+
const currentCategories = ref([]);
|
|
187
|
+
const searchLocation = ref('');
|
|
188
|
+
const selectedLocation = ref('All');
|
|
189
|
+
const locationOptions = ref(['All', 'Phuket', 'Bangkok', 'Chiang Mai', 'Pattaya']);
|
|
190
|
+
|
|
191
|
+
// Delivery options
|
|
192
|
+
const deliveryOptions = ref([
|
|
193
|
+
{ label: 'Pickup', value: 'pickup' },
|
|
194
|
+
{ label: 'Delivery', value: 'delivery' },
|
|
195
|
+
{ label: 'Dine-in', value: 'dinein' }
|
|
196
|
+
]);
|
|
197
|
+
const selectedDeliveryOptions = ref([]);
|
|
198
|
+
|
|
199
|
+
// Payment options
|
|
200
|
+
const paymentOptions = ref([
|
|
201
|
+
{ label: 'Cash', value: 'cash' },
|
|
202
|
+
{ label: 'Card', value: 'card' },
|
|
203
|
+
{ label: 'Crypto', value: 'crypto' },
|
|
204
|
+
{ label: 'Bank Transfer', value: 'transfer' }
|
|
205
|
+
]);
|
|
206
|
+
const selectedPaymentOptions = ref([]);
|
|
207
|
+
|
|
208
|
+
const selectCategory = (category) => {
|
|
209
|
+
// Implementation for category selection
|
|
210
|
+
console.log('Category selected:', category);
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
const clearFilters = () => {
|
|
214
|
+
selectedLocation.value = 'All';
|
|
215
|
+
selectedDeliveryOptions.value = [];
|
|
216
|
+
selectedPaymentOptions.value = [];
|
|
217
|
+
searchLocation.value = '';
|
|
218
|
+
};
|
|
219
|
+
|
|
68
220
|
function denormalizeUrlParam(param) {
|
|
69
221
|
return param
|
|
70
222
|
.replace(/-/g, ' ') // Замена дефисов на пробелы
|
|
@@ -14,22 +14,16 @@ const NotificationsController = (db, wss, notificationService) => {
|
|
|
14
14
|
|
|
15
15
|
// Create multiple notifications at once
|
|
16
16
|
const createBatch = async (req, res) => {
|
|
17
|
-
console.log('=== Batch notifications endpoint ===');
|
|
18
|
-
console.log('Request body:', JSON.stringify(req.body, null, 2));
|
|
19
17
|
|
|
20
18
|
try {
|
|
21
19
|
const { notifications } = req.body;
|
|
22
20
|
|
|
23
21
|
if (!notifications || !Array.isArray(notifications)) {
|
|
24
|
-
console.error('Invalid request: notifications array is required');
|
|
25
22
|
return res.status(400).json({ message: 'notifications array is required' });
|
|
26
23
|
}
|
|
27
24
|
|
|
28
|
-
console.log('Creating notifications count:', notifications.length);
|
|
29
|
-
|
|
30
25
|
// Create all notifications
|
|
31
26
|
const createdNotifications = await db.notification.insertMany(notifications);
|
|
32
|
-
console.log('Created notifications:', createdNotifications.map(n => n._id));
|
|
33
27
|
|
|
34
28
|
// Fire and forget with error tracking
|
|
35
29
|
setImmediate(() => {
|
|
@@ -43,12 +43,6 @@ export default (function (db, wss) {
|
|
|
43
43
|
userId: new ObjectId(userId),
|
|
44
44
|
isActive: true,
|
|
45
45
|
});
|
|
46
|
-
console.log('=== CHANNEL SELECTION DEBUG ===');
|
|
47
|
-
console.log('userDevices found:', userDevices.length);
|
|
48
|
-
console.log('userDevices:', userDevices);
|
|
49
|
-
console.log('user.email:', user.email);
|
|
50
|
-
console.log('user.phoneNumber:', user.phoneNumber);
|
|
51
|
-
console.log('preferences.length:', preferences.length);
|
|
52
46
|
|
|
53
47
|
// Default channels if no preferences set
|
|
54
48
|
let channels = ['web']; // Web is always on by default
|
|
@@ -56,7 +50,6 @@ export default (function (db, wss) {
|
|
|
56
50
|
// If user has devices, add push to default channels
|
|
57
51
|
if (userDevices.length > 0) {
|
|
58
52
|
channels.push('push');
|
|
59
|
-
console.log('Added push channel - devices found');
|
|
60
53
|
} else {
|
|
61
54
|
console.log('No push channel - no devices found');
|
|
62
55
|
}
|
|
@@ -64,24 +57,20 @@ export default (function (db, wss) {
|
|
|
64
57
|
// If user has email, add it to default channels
|
|
65
58
|
if (user.email) {
|
|
66
59
|
channels.push('email');
|
|
67
|
-
console.log('Added email channel');
|
|
68
60
|
}
|
|
69
61
|
// If user has phone, add SMS to default channels
|
|
70
62
|
if (user.phoneNumber) {
|
|
71
63
|
channels.push('sms');
|
|
72
|
-
console.log('Added SMS channel');
|
|
73
64
|
}
|
|
74
65
|
// Override with user preferences if they exist
|
|
75
66
|
if (preferences.length > 0) {
|
|
76
67
|
channels = preferences.filter(pref => pref.isEnabled).map(pref => pref.channelType);
|
|
77
|
-
console.log('Overridden with user preferences:', channels);
|
|
78
68
|
}
|
|
79
|
-
|
|
69
|
+
|
|
80
70
|
// Send to each enabled channel - parallel processing
|
|
81
71
|
const channelPromises = [];
|
|
82
72
|
|
|
83
73
|
for (const channel of channels) {
|
|
84
|
-
console.log(`=== PREPARING CHANNEL: ${channel} ===`);
|
|
85
74
|
const sendFunc = channelRouters[channel];
|
|
86
75
|
if (!sendFunc) {
|
|
87
76
|
channelPromises.push(Promise.resolve({
|
|
@@ -93,17 +82,14 @@ export default (function (db, wss) {
|
|
|
93
82
|
}
|
|
94
83
|
|
|
95
84
|
if (channel === 'push') {
|
|
96
|
-
console.log(`Preparing push to ${userDevices.length} devices`);
|
|
97
85
|
// Each device as separate promise for true parallelism
|
|
98
86
|
for (const device of userDevices) {
|
|
99
87
|
channelPromises.push(
|
|
100
88
|
sendFunc(notification, user, device)
|
|
101
89
|
.then(() => {
|
|
102
|
-
console.log(`Push sent successfully to device ${device.deviceId}`);
|
|
103
90
|
return { channel: 'push', deviceId: device.deviceId, success: true };
|
|
104
91
|
})
|
|
105
92
|
.catch(err => {
|
|
106
|
-
console.error(`Push failed for device ${device.deviceId}:`, err);
|
|
107
93
|
return { channel: 'push', deviceId: device.deviceId, success: false, error: err.message };
|
|
108
94
|
})
|
|
109
95
|
);
|
|
@@ -123,7 +109,6 @@ export default (function (db, wss) {
|
|
|
123
109
|
}
|
|
124
110
|
}
|
|
125
111
|
|
|
126
|
-
console.log(`=== PROCESSING ${channelPromises.length} PARALLEL OPERATIONS ===`);
|
|
127
112
|
const results = await Promise.allSettled(channelPromises);
|
|
128
113
|
|
|
129
114
|
// Process results and create batch logs
|
|
@@ -180,7 +165,6 @@ export default (function (db, wss) {
|
|
|
180
165
|
};
|
|
181
166
|
// Send websocket notifications
|
|
182
167
|
const sendWebNotification = async (notification, user) => {
|
|
183
|
-
console.log(`[WebSocket][notification] sending to user ${user._id}`);
|
|
184
168
|
const result = await wss.sendToUserInModule('notification', user._id, {
|
|
185
169
|
type: 'notification',
|
|
186
170
|
data: notification,
|
|
@@ -17,10 +17,8 @@ const WebPushService = {
|
|
|
17
17
|
badge: process.env.NOTIFICATION_BADGE_URL || '/favicon.ico',
|
|
18
18
|
data: data,
|
|
19
19
|
});
|
|
20
|
-
console.log('payload is', payload);
|
|
21
20
|
// Send the notification
|
|
22
21
|
const result = await webpush.sendNotification(subscription, payload);
|
|
23
|
-
console.log('web push is', result);
|
|
24
22
|
return { success: true, statusCode: result.statusCode };
|
|
25
23
|
} catch (error) {
|
|
26
24
|
console.error('Web Push service error:', error);
|
|
@@ -55,13 +55,13 @@
|
|
|
55
55
|
<p class="t-medium mn-r-auto">{{formatDate(order.deadline)}}</p>
|
|
56
56
|
|
|
57
57
|
<span
|
|
58
|
-
class="flex-child flex-child-shrink-0 capitalize w-max t-medium radius-big pd-
|
|
58
|
+
class="flex-child flex-child-shrink-0 capitalize w-max t-medium radius-big pd-thin bg-main"
|
|
59
59
|
>
|
|
60
60
|
{{order.status}}
|
|
61
61
|
</span>
|
|
62
62
|
|
|
63
63
|
<span
|
|
64
|
-
class="flex-child flex-child-shrink-0 capitalize w-max t-medium radius-big pd-
|
|
64
|
+
class="flex-child flex-child-shrink-0 capitalize w-max t-medium radius-big pd-thin t-white bg-red"
|
|
65
65
|
>
|
|
66
66
|
{{order.payment.status || 'Not defined'}}
|
|
67
67
|
</span>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
Order: #{{order._id}}
|
|
27
27
|
|
|
28
28
|
<span
|
|
29
|
-
class="flex-child flex-child-shrink-0 capitalize w-max mn-r-thin t-medium radius-big pd-
|
|
29
|
+
class="flex-child flex-child-shrink-0 capitalize w-max mn-r-thin t-medium radius-big pd-thin bg-main"
|
|
30
30
|
>
|
|
31
31
|
{{order.status}}
|
|
32
32
|
</span>
|
|
@@ -505,11 +505,9 @@ const controllerFactory = db => {
|
|
|
505
505
|
console.log('Sending notification for status change...');
|
|
506
506
|
try {
|
|
507
507
|
const usersWithAccess = await getUsersWithOrdersConfirmAccess(order.owner.target);
|
|
508
|
-
const filteredUsers = usersWithAccess.filter(userId =>
|
|
509
|
-
userId.toString() !== order.creator.target.toString()
|
|
510
|
-
);
|
|
511
508
|
|
|
512
|
-
|
|
509
|
+
// Отправляем уведомления всем пользователям с доступом, включая создателя
|
|
510
|
+
await sendOrderNotifications(order, 'order_status', usersWithAccess, {
|
|
513
511
|
oldStatus: oldStatus,
|
|
514
512
|
newStatus: order.status,
|
|
515
513
|
organization: order.owner.target
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Module Overview
|
|
6
|
+
|
|
7
|
+
The organizations module is a Vue.js/Node.js module that manages organizations, departments, memberships, and invites within the Martyrs application. It follows a modular architecture with separate client and server components.
|
|
8
|
+
|
|
9
|
+
## Architecture
|
|
10
|
+
|
|
11
|
+
### Server-Side Structure
|
|
12
|
+
- **Entry Point**: `organizations.server.js` - Initializes models, routes, and policies
|
|
13
|
+
- **Models**: Mongoose schemas for Organization, Department, Membership, and Invite
|
|
14
|
+
- **Controllers**: Handle business logic with caching support using a custom Cache class
|
|
15
|
+
- **Routes**: Express routes for RESTful API endpoints
|
|
16
|
+
- **Middlewares**: Access verification middleware
|
|
17
|
+
- **Policies**: ABAC (Attribute-Based Access Control) policies
|
|
18
|
+
|
|
19
|
+
### Client-Side Structure
|
|
20
|
+
- **Entry Point**: `organizations.client.js` - Exports components and initializes stores/router
|
|
21
|
+
- **Components**: Vue 3 components organized by type:
|
|
22
|
+
- `pages/`: Full page components
|
|
23
|
+
- `forms/`: Popup forms (DepartmentForm, InviteForm, AddExistingMembersForm)
|
|
24
|
+
- `blocks/`: Reusable UI blocks
|
|
25
|
+
- `sections/`: Page sections
|
|
26
|
+
- `elements/`: Small UI elements
|
|
27
|
+
- **Store**: Uses Store class from globals module
|
|
28
|
+
- `membershipsStore` - manages memberships with handleMembershipUpdate method
|
|
29
|
+
- `departmentsStore` - manages departments
|
|
30
|
+
- `invitesStore` - manages invites
|
|
31
|
+
- **Router**: Vue Router configuration with nested routes
|
|
32
|
+
|
|
33
|
+
## Key Features
|
|
34
|
+
|
|
35
|
+
1. **Organization Management**: CRUD operations for organizations with owner/member relationships
|
|
36
|
+
2. **Department System**: Hierarchical department structure within organizations
|
|
37
|
+
3. **Membership System**: User roles and permissions within organizations
|
|
38
|
+
4. **Invite System**: Invitation workflow for adding members
|
|
39
|
+
5. **Access Control**: Fine-grained permissions using ABAC
|
|
40
|
+
6. **Caching**: Redis-like caching with tag-based invalidation
|
|
41
|
+
|
|
42
|
+
## API Endpoints
|
|
43
|
+
|
|
44
|
+
All modules now follow the standard Store class pattern:
|
|
45
|
+
|
|
46
|
+
### Organizations
|
|
47
|
+
- `GET /api/organizations` - List organizations with filters
|
|
48
|
+
- `POST /api/organizations/create` - Create new organization
|
|
49
|
+
- `POST /api/organizations/:_id/update` - Update organization
|
|
50
|
+
- `DELETE /api/organizations/:_id/delete` - Delete organization
|
|
51
|
+
|
|
52
|
+
### Departments
|
|
53
|
+
- `GET /api/departments/read` - Read with query parameters
|
|
54
|
+
- `POST /api/departments/create` - Create new department
|
|
55
|
+
- `PUT /api/departments/update` - Update department
|
|
56
|
+
- `POST /api/departments/delete` - Delete department (expects {_id} in body)
|
|
57
|
+
|
|
58
|
+
### Memberships
|
|
59
|
+
- `GET /api/memberships/read` - Read with query parameters
|
|
60
|
+
- `POST /api/memberships/create` - Create new membership
|
|
61
|
+
- `PUT /api/memberships/update` - Update membership
|
|
62
|
+
- `POST /api/memberships/delete` - Delete membership (expects {_id} in body)
|
|
63
|
+
|
|
64
|
+
### Invites
|
|
65
|
+
- `GET /api/invites/read` - Read with query parameters (owner, target, search)
|
|
66
|
+
- `POST /api/invites/create` - Create new invite
|
|
67
|
+
- `PUT /api/invites/update` - Update invite
|
|
68
|
+
- `POST /api/invites/delete` - Delete invite (expects {_id} in body)
|
|
69
|
+
|
|
70
|
+
## Important Patterns
|
|
71
|
+
|
|
72
|
+
1. **Aggregation Pipeline**: Complex queries use MongoDB aggregation with dynamic stages
|
|
73
|
+
2. **Caching Strategy**: Results cached with tags for selective invalidation
|
|
74
|
+
3. **Access Control**: Uses ABAC with policies defined in `organizations.policies.js`
|
|
75
|
+
4. **Lookup Configurations**: Modular lookup configs for related data
|
|
76
|
+
5. **Query Processing**: Utility functions for building dynamic queries
|
|
77
|
+
|
|
78
|
+
## Model Structures
|
|
79
|
+
|
|
80
|
+
### Organization Model
|
|
81
|
+
```javascript
|
|
82
|
+
{
|
|
83
|
+
owner: ObjectId (ref: 'User', required),
|
|
84
|
+
official: Boolean (default: false),
|
|
85
|
+
types: Array (required),
|
|
86
|
+
profile: {
|
|
87
|
+
photo: String,
|
|
88
|
+
name: String (required),
|
|
89
|
+
description: String,
|
|
90
|
+
tags: [String]
|
|
91
|
+
},
|
|
92
|
+
contacts: {
|
|
93
|
+
email: String,
|
|
94
|
+
website: String,
|
|
95
|
+
phone: String,
|
|
96
|
+
address: String
|
|
97
|
+
},
|
|
98
|
+
socials: {
|
|
99
|
+
telegram: String,
|
|
100
|
+
twitter: String,
|
|
101
|
+
facebook: String,
|
|
102
|
+
instagram: String,
|
|
103
|
+
youtube: String
|
|
104
|
+
},
|
|
105
|
+
rating: {
|
|
106
|
+
popularity: Number (0-1),
|
|
107
|
+
median: Number (0-5),
|
|
108
|
+
amount: Number
|
|
109
|
+
},
|
|
110
|
+
accesses: AccessesSchema,
|
|
111
|
+
views: Number (default: 0),
|
|
112
|
+
timestamps: true
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Department Model
|
|
117
|
+
```javascript
|
|
118
|
+
{
|
|
119
|
+
owner: ObjectId (ref: 'User'),
|
|
120
|
+
organization: ObjectId (ref: 'Organization'),
|
|
121
|
+
hidden: Boolean (default: false),
|
|
122
|
+
profile: {
|
|
123
|
+
photo: String,
|
|
124
|
+
name: String (required),
|
|
125
|
+
description: String,
|
|
126
|
+
categories: [String]
|
|
127
|
+
},
|
|
128
|
+
worktime: [{
|
|
129
|
+
day: String,
|
|
130
|
+
time: { start: String, end: String }
|
|
131
|
+
}],
|
|
132
|
+
delivery: [String],
|
|
133
|
+
payment: [String],
|
|
134
|
+
members: [{
|
|
135
|
+
user: ObjectId (ref: 'User'),
|
|
136
|
+
position: String (default: 'Member')
|
|
137
|
+
}],
|
|
138
|
+
subdepartments: [ObjectId (ref: 'Department')],
|
|
139
|
+
accesses: AccessesSchema,
|
|
140
|
+
timestamps: true
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Membership Model
|
|
145
|
+
```javascript
|
|
146
|
+
{
|
|
147
|
+
user: ObjectId (ref: 'User', required),
|
|
148
|
+
type: String (enum: ['organization', 'department', 'user'], required),
|
|
149
|
+
role: String (default: 'subscriber'),
|
|
150
|
+
label: String (default: 'subscriber'),
|
|
151
|
+
target: ObjectId (dynamic ref based on type),
|
|
152
|
+
timestamps: true
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Invite Model
|
|
157
|
+
```javascript
|
|
158
|
+
{
|
|
159
|
+
code: String (required, unique),
|
|
160
|
+
status: String (enum: ['active', 'used', 'deactivated']),
|
|
161
|
+
role: String (default: 'member'),
|
|
162
|
+
// From credentials schema:
|
|
163
|
+
phone: String,
|
|
164
|
+
email: String,
|
|
165
|
+
apple_id: String,
|
|
166
|
+
// From ownership schema:
|
|
167
|
+
owner: { type: String, target: ObjectId },
|
|
168
|
+
creator: { type: String, target: ObjectId, hidden: Boolean },
|
|
169
|
+
timestamps: true
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Accesses Schema
|
|
174
|
+
Permission structure for modules:
|
|
175
|
+
```javascript
|
|
176
|
+
{
|
|
177
|
+
categories: { create, read, edit, delete },
|
|
178
|
+
rents: { create, read, edit, delete },
|
|
179
|
+
spots: { create, read, edit, delete },
|
|
180
|
+
posts: { create, read, edit, delete },
|
|
181
|
+
events: { create, read, edit, delete },
|
|
182
|
+
tickets: { create, read, edit, delete },
|
|
183
|
+
gallery: { read, create, edit, delete },
|
|
184
|
+
members: { read, edit, delete },
|
|
185
|
+
inventory: { read, edit, delete },
|
|
186
|
+
products: { read, edit, delete },
|
|
187
|
+
departments: { read, edit, delete },
|
|
188
|
+
orders: { read, confirm, delete }
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
All permissions are Boolean fields defaulting to false.
|
|
192
|
+
|
|
193
|
+
## Key Interfaces
|
|
194
|
+
|
|
195
|
+
### API Request/Response Formats
|
|
196
|
+
|
|
197
|
+
#### Organization Query Parameters
|
|
198
|
+
- `_id`: Single organization ID
|
|
199
|
+
- `types`: Filter by organization types
|
|
200
|
+
- `official`: Filter official organizations
|
|
201
|
+
- `search`: Text search in organization names
|
|
202
|
+
- `sortParam`, `sortOrder`: Sorting options
|
|
203
|
+
- `skip`, `limit`: Pagination
|
|
204
|
+
- `user`: User ID for membership filtering
|
|
205
|
+
- `postable`: Filter by postable status
|
|
206
|
+
- `contain`: Filter by contained elements
|
|
207
|
+
- `prices`: Price range filtering (when products included)
|
|
208
|
+
|
|
209
|
+
#### Lookup Options
|
|
210
|
+
Request related data using query parameters:
|
|
211
|
+
- `memberships`: Include membership data
|
|
212
|
+
- `products`: Include products
|
|
213
|
+
- `spots`: Include locations
|
|
214
|
+
- `members`: Include member details
|
|
215
|
+
|
|
216
|
+
### Store Integration
|
|
217
|
+
|
|
218
|
+
All stores use the Store class from `@martyrs/src/modules/globals/views/classes/globals.store.js`:
|
|
219
|
+
|
|
220
|
+
```javascript
|
|
221
|
+
import Store from '@martyrs/src/modules/globals/views/classes/globals.store.js';
|
|
222
|
+
|
|
223
|
+
const membershipsStore = new Store('/api/memberships');
|
|
224
|
+
const departmentsStore = new Store('/api/departments');
|
|
225
|
+
const invitesStore = new Store('/api/invites');
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
#### membershipsStore.handleMembershipUpdate
|
|
229
|
+
Special method for updating user state when membership changes:
|
|
230
|
+
```javascript
|
|
231
|
+
membershipsStore.handleMembershipUpdate(user, membership, status, target, statusName, statusNumber)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Feed Component Integration
|
|
235
|
+
Use v-model:items pattern for reactive state:
|
|
236
|
+
```vue
|
|
237
|
+
<Feed
|
|
238
|
+
v-model:items="membersList"
|
|
239
|
+
:store="{
|
|
240
|
+
read: (options) => membershipsStore.read(options)
|
|
241
|
+
}"
|
|
242
|
+
:options="{
|
|
243
|
+
target: route.params._id,
|
|
244
|
+
role: ['member','owner']
|
|
245
|
+
}"
|
|
246
|
+
>
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Controller Response Format
|
|
250
|
+
- **Read operations**: Return array of items directly
|
|
251
|
+
- **Delete operations**: Return the deleted object
|
|
252
|
+
- **Create/Update**: Return the created/updated object
|
|
253
|
+
|
|
254
|
+
## Dependencies
|
|
255
|
+
|
|
256
|
+
- Mongoose for MongoDB ODM
|
|
257
|
+
- Express for routing
|
|
258
|
+
- Vue 3 with Composition API
|
|
259
|
+
- Custom modules from `@martyrs/src/modules/globals/`
|
|
@@ -3,28 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
<div class="pd-medium w-100">
|
|
5
5
|
|
|
6
|
-
<router-link
|
|
7
|
-
:to="{
|
|
8
|
-
name: 'Department Edit',
|
|
9
|
-
params: {
|
|
10
|
-
_id: props.organization,
|
|
11
|
-
department: department._id
|
|
12
|
-
}
|
|
13
|
-
}"
|
|
14
|
-
class="
|
|
15
|
-
cursor-pointer
|
|
16
|
-
pos-absolute pos-t-regular pos-r-regular
|
|
17
|
-
radius-extra pd-thin bg-second
|
|
18
|
-
"
|
|
19
|
-
>
|
|
20
|
-
<IconEdit
|
|
21
|
-
class="i-regular"
|
|
22
|
-
classes="fill-white"
|
|
23
|
-
/>
|
|
24
|
-
</router-link>
|
|
25
|
-
|
|
26
6
|
<h3
|
|
27
|
-
@click="$router.push(`/organizations/${props.organization}/departments/${department._id}`)"
|
|
28
7
|
class="mn-b-small w-100"
|
|
29
8
|
v-html="department.profile.name"
|
|
30
9
|
/>
|
|
@@ -39,7 +18,7 @@
|
|
|
39
18
|
:photo="member.user.profile.photo"
|
|
40
19
|
:name="member.user.profile.name || member.user.phone || member.user.email || member.user._id"
|
|
41
20
|
:position="member.position"
|
|
42
|
-
@click="$router.push(
|
|
21
|
+
@click="$router.push({ name: 'User Profile', params: { _id: member.user._id } })"
|
|
43
22
|
/>
|
|
44
23
|
</ul>
|
|
45
24
|
</div>
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
target="_blank"
|
|
8
8
|
class="i-big bg-second t-white flex-nowrap flex-center flex radius-extra"
|
|
9
9
|
>
|
|
10
|
-
<component :is="resolveSocialIcon(social.name)" class="i-medium"></component>
|
|
10
|
+
<component :is="resolveSocialIcon(social.name)" :fill="'rgb(var(--white))'" class="i-medium"></component>
|
|
11
11
|
</a>
|
|
12
12
|
</div>
|
|
13
13
|
</template>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
import { ref } from 'vue'
|
|
15
15
|
import * as auth from '@martyrs/src/modules/auth/views/store/auth.js'
|
|
16
|
-
import
|
|
16
|
+
import membershipsStore from '@martyrs/src/modules/organizations/store/memberships.store.js'
|
|
17
17
|
|
|
18
18
|
const emits = defineEmits(['updateMembership'])
|
|
19
19
|
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
target: props.target
|
|
65
65
|
};
|
|
66
66
|
|
|
67
|
-
const response = await
|
|
67
|
+
const response = await membershipsStore.create(membershipData);
|
|
68
68
|
|
|
69
69
|
emits('updateMembership', {
|
|
70
70
|
membership: response,
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
};
|
|
87
87
|
|
|
88
88
|
try {
|
|
89
|
-
const response = await
|
|
89
|
+
const response = await membershipsStore.delete(membershipData);
|
|
90
90
|
|
|
91
91
|
emits('updateMembership', {
|
|
92
92
|
membership: response,
|