@ozdao/martyrs 0.2.602 → 0.2.604
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/{abac-BPl9Bmf9.js → abac-Blt8bUTL.js} +3 -3
- package/dist/{addUserStatusFields-Cc-JpmPo.js → addUserStatusFields-CjV_sbh7.js} +2 -2
- package/dist/auth.server.js +57 -2
- package/dist/builder.js +130 -81
- package/dist/community.server.js +11 -11
- package/dist/core.server.js +2 -2
- package/dist/{core.verifier-gPPX_jhf.js → core.verifier-DVB2a21y.js} +6 -3
- package/dist/{crud-DpOXTZep.js → crud-BT5FIvQC.js} +2 -3
- package/dist/engagement.schema-B-Cc_NsG.js +6 -0
- package/dist/events.server.js +3 -3
- package/dist/gallery.server.js +1 -1
- package/dist/governance.server.js +1632 -0
- package/dist/icons.server.js +267 -0
- package/dist/inventory.server.js +6 -6
- package/dist/martyrs/dist/martyrs.es3.js +116 -0
- package/dist/martyrs/dist/martyrs.es3.js.map +1 -0
- package/dist/martyrs/dist/martyrs.es39.js +124 -0
- package/dist/martyrs/dist/martyrs.es39.js.map +1 -0
- package/dist/martyrs/dist/martyrs.es43.js +30 -0
- package/dist/martyrs/dist/martyrs.es43.js.map +1 -0
- package/dist/martyrs/dist/martyrs.es44.js +28 -0
- package/dist/martyrs/dist/martyrs.es44.js.map +1 -0
- package/dist/martyrs/dist/martyrs.es46.js +10 -0
- package/dist/martyrs/dist/martyrs.es46.js.map +1 -0
- package/dist/martyrs/src/components/Address/{Address.vue.js → Address.vue2.js} +2 -2
- package/dist/martyrs/src/components/Address/Address.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Block/Block.vue.js +1 -1
- package/dist/martyrs/src/components/Block/Block.vue.js.map +1 -1
- package/dist/martyrs/src/components/Button/{Button.vue.js → Button.vue2.js} +8 -5
- package/dist/martyrs/src/components/Button/Button.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js → Dropdown.vue.js} +2 -2
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +1 -0
- package/dist/martyrs/src/components/Feed/Carousel.vue.js +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +2 -2
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +4 -4
- package/dist/martyrs/src/components/Loader/{Loader.vue2.js → Loader.vue.js} +2 -2
- package/dist/martyrs/src/components/Loader/Loader.vue.js.map +1 -0
- package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue.js → LocationMarker.vue2.js} +3 -3
- package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Media/Media.vue.js +1 -1
- package/dist/martyrs/src/components/Table/StatusBadge.vue.js +19 -10
- package/dist/martyrs/src/components/Table/StatusBadge.vue.js.map +1 -1
- package/dist/martyrs/src/components/Text/Text.vue.js +1 -1
- package/dist/martyrs/src/components/Text/Text.vue.js.map +1 -1
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +1 -1
- package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/blocks/OtpDialog.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/blocks/PopupAuth.vue.js +3 -3
- package/dist/martyrs/src/modules/auth/views/components/blocks/PopupAuth.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +17 -21
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +13 -13
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +41 -3
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js +34 -66
- package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/router/users.router.js +0 -53
- package/dist/martyrs/src/modules/auth/views/router/users.router.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.js +1 -1
- package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.js +515 -103
- package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js +1 -3
- package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js.map +1 -1
- package/dist/martyrs/src/modules/backoffice/router/backoffice.router.js +1 -32
- package/dist/martyrs/src/modules/backoffice/router/backoffice.router.js.map +1 -1
- package/dist/martyrs/src/modules/community/community.client.js +49 -8
- package/dist/martyrs/src/modules/community/community.client.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +10 -4
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js.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.js +3 -3
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +28 -17
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js +36 -28
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/sections/Comment.vue.js +2 -2
- package/dist/martyrs/src/modules/community/components/sections/Comment.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/sections/Comments.vue.js +1 -1
- package/dist/martyrs/src/modules/community/router/community.backoffice.router.js +21 -0
- package/dist/martyrs/src/modules/community/router/community.backoffice.router.js.map +1 -0
- package/dist/martyrs/src/modules/community/router/community.organization.router.js +70 -0
- package/dist/martyrs/src/modules/community/router/community.organization.router.js.map +1 -0
- package/dist/martyrs/src/modules/community/router/community.router.js +73 -0
- package/dist/martyrs/src/modules/community/router/community.router.js.map +1 -0
- package/dist/martyrs/src/modules/community/router/community.user.router.js +20 -0
- package/dist/martyrs/src/modules/community/router/community.user.router.js.map +1 -0
- package/dist/martyrs/src/modules/constructor/components/elements/Textarea.vue2.js +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Textarea.vue2.js.map +1 -1
- package/dist/martyrs/src/modules/constructor/components/sections/Constructor.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/classes/core.app.js +5 -3
- package/dist/martyrs/src/modules/core/views/classes/core.app.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/classes/i18n.manager.js +7 -2
- package/dist/martyrs/src/modules/core/views/classes/i18n.manager.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/classes/ws.manager.js +11 -5
- package/dist/martyrs/src/modules/core/views/classes/ws.manager.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/Card.vue.js +53 -18
- package/dist/martyrs/src/modules/core/views/components/blocks/Card.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +2 -2
- package/dist/martyrs/src/modules/core/views/components/blocks/CardStat.vue.js +44 -0
- package/dist/martyrs/src/modules/core/views/components/blocks/CardStat.vue.js.map +1 -0
- package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +6 -6
- package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js +2 -2
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +11 -8
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/BottomNavigationBar.vue.js +5 -5
- package/dist/martyrs/src/modules/core/views/components/partials/BottomNavigationBar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +14 -14
- package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/LocationSelection.vue.js +2 -2
- package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js +28 -29
- package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js +6 -6
- package/dist/martyrs/src/modules/core/views/components/partials/Sidebar.vue.js +5 -7
- package/dist/martyrs/src/modules/core/views/components/partials/Sidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js +27 -17
- package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/Walkthrough.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/mixins/mixins.js +3 -3
- package/dist/martyrs/src/modules/core/views/mixins/mixins.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/router/addRoutes.js +2 -3
- package/dist/martyrs/src/modules/core/views/router/addRoutes.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/store/core.store.js +1 -1
- package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js +10 -0
- package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +4 -4
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +3 -3
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +9 -9
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +1 -0
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +23 -33
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +13 -13
- package/dist/martyrs/src/modules/events/components/sections/Feed.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/sections/List.vue.js +3 -3
- package/dist/martyrs/src/modules/events/components/sections/List.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/events.client.js +37 -15
- package/dist/martyrs/src/modules/events/events.client.js.map +1 -1
- package/dist/martyrs/src/modules/events/router/events.backoffice.router.js +95 -0
- package/dist/martyrs/src/modules/events/router/events.backoffice.router.js.map +1 -0
- package/dist/martyrs/src/modules/events/router/events.organization.router.js +95 -0
- package/dist/martyrs/src/modules/events/router/events.organization.router.js.map +1 -0
- package/dist/martyrs/src/modules/events/router/events.router.js +73 -364
- package/dist/martyrs/src/modules/events/router/events.router.js.map +1 -1
- package/dist/martyrs/src/modules/events/router/events.user.router.js +65 -0
- package/dist/martyrs/src/modules/events/router/events.user.router.js.map +1 -0
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +3 -3
- package/dist/martyrs/src/modules/governance/configs/navigation.initiative.config.js +33 -0
- package/dist/martyrs/src/modules/governance/configs/navigation.initiative.config.js.map +1 -0
- package/dist/martyrs/src/modules/governance/governance.client.js +31 -0
- package/dist/martyrs/src/modules/governance/governance.client.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/blocks/CardInitiativeItem.vue.js +110 -0
- package/dist/martyrs/src/modules/governance/views/components/blocks/CardInitiativeItem.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/blocks/CardSprintItem.vue.js +105 -0
- package/dist/martyrs/src/modules/governance/views/components/blocks/CardSprintItem.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/blocks/CardTaskItem.vue.js +110 -0
- package/dist/martyrs/src/modules/governance/views/components/blocks/CardTaskItem.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/blocks/CardVotingItem.vue.js +106 -0
- package/dist/martyrs/src/modules/governance/views/components/blocks/CardVotingItem.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Governance.vue.js +52 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Governance.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Initiative.vue.js +684 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Initiative.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/InitiativeCreate.vue.js +78 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/InitiativeCreate.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/InitiativeSprints.vue.js +328 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/InitiativeSprints.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Initiatives.vue.js +145 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Initiatives.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Sprint.vue.js +258 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Sprint.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/SprintCreate.vue.js +72 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/SprintCreate.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Task.vue.js +769 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Task.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/TaskCreate.vue.js +88 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/TaskCreate.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Tasks.vue.js +291 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Tasks.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Voting.vue.js +267 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Voting.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/VotingCreate.vue.js +90 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/VotingCreate.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Votings.vue.js +68 -0
- package/dist/martyrs/src/modules/governance/views/components/pages/Votings.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/partials/EmptyState.vue.js +47 -0
- package/dist/martyrs/src/modules/governance/views/components/partials/EmptyState.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/partials/LinkedEntityCard.vue.js +164 -0
- package/dist/martyrs/src/modules/governance/views/components/partials/LinkedEntityCard.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/partials/TaskStatusBadge.vue.js +39 -0
- package/dist/martyrs/src/modules/governance/views/components/partials/TaskStatusBadge.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/partials/VoteForm.vue.js +112 -0
- package/dist/martyrs/src/modules/governance/views/components/partials/VoteForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/partials/VotingResults.vue.js +187 -0
- package/dist/martyrs/src/modules/governance/views/components/partials/VotingResults.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/sections/FormInitiativeDetails.vue.js +555 -0
- package/dist/martyrs/src/modules/governance/views/components/sections/FormInitiativeDetails.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/sections/FormSprintDetails.vue.js +187 -0
- package/dist/martyrs/src/modules/governance/views/components/sections/FormSprintDetails.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/sections/FormTaskDetails.vue.js +171 -0
- package/dist/martyrs/src/modules/governance/views/components/sections/FormTaskDetails.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/components/sections/FormVotingDetails.vue.js +179 -0
- package/dist/martyrs/src/modules/governance/views/components/sections/FormVotingDetails.vue.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/router/governance.router.js +502 -0
- package/dist/martyrs/src/modules/governance/views/router/governance.router.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/store/initiatives.js +119 -0
- package/dist/martyrs/src/modules/governance/views/store/initiatives.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/store/sprints.js +99 -0
- package/dist/martyrs/src/modules/governance/views/store/sprints.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/store/tasks.js +115 -0
- package/dist/martyrs/src/modules/governance/views/store/tasks.js.map +1 -0
- package/dist/martyrs/src/modules/governance/views/store/votings.js +155 -0
- package/dist/martyrs/src/modules/governance/views/store/votings.js.map +1 -0
- package/dist/martyrs/src/modules/icons/entities/IconCash.vue.js +70 -0
- package/dist/martyrs/src/modules/icons/entities/IconCash.vue.js.map +1 -0
- package/dist/martyrs/src/modules/icons/icons.client.js +1 -1
- package/dist/martyrs/src/modules/icons/icons.client.js.map +1 -1
- package/dist/martyrs/src/modules/icons/{icons.router.js → router/icons.router.js} +1 -1
- package/dist/martyrs/src/modules/icons/router/icons.router.js.map +1 -0
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +3 -3
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +3 -3
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +2 -2
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +3 -3
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +6 -6
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +9 -9
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +4 -4
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +4 -4
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +7 -7
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +4 -4
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +4 -4
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +10 -10
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +13 -13
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +11 -11
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +10 -10
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +18 -18
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +4 -4
- package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +10 -10
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +6 -6
- package/dist/martyrs/src/modules/music/components/sections/PopularTracks.vue.js +63 -0
- package/dist/martyrs/src/modules/music/components/sections/PopularTracks.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/music.client.js +29 -25
- package/dist/martyrs/src/modules/music/music.client.js.map +1 -1
- package/dist/martyrs/src/modules/music/{music.router.js → router/music.router.js} +16 -16
- package/dist/martyrs/src/modules/music/router/music.router.js.map +1 -0
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +26 -27
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js +119 -60
- package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/notifications.client.js +76 -56
- package/dist/martyrs/src/modules/notifications/notifications.client.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/{notifications.router.js → router/notifications.router.js} +3 -3
- package/dist/martyrs/src/modules/notifications/router/notifications.router.js.map +1 -0
- package/dist/martyrs/src/modules/notifications/store/notifications.store.js +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.js +34 -44
- package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.js +47 -57
- package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +3 -3
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +5 -5
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +7 -7
- package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.js +61 -54
- package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.js +43 -31
- package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +13 -13
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +3 -3
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +19 -19
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +7 -10
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +7 -10
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +4 -4
- package/dist/martyrs/src/modules/orders/orders.client.js +16 -16
- package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
- package/dist/martyrs/src/modules/orders/store/shopcart.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +11 -4
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +22 -15
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +63 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +9 -3
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +13 -7
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +24 -30
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/organizations.client.js +42 -6
- package/dist/martyrs/src/modules/organizations/organizations.client.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/router/organizations.backoffice.router.js +20 -0
- package/dist/martyrs/src/modules/organizations/router/organizations.backoffice.router.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/router/organizations.router.js +102 -0
- package/dist/martyrs/src/modules/organizations/router/organizations.router.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/router/organizations.user.router.js +20 -0
- package/dist/martyrs/src/modules/organizations/router/organizations.user.router.js.map +1 -0
- package/dist/martyrs/src/modules/pages/pages.client.js +1 -1
- package/dist/martyrs/src/modules/pages/pages.client.js.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +2 -2
- package/dist/martyrs/src/modules/pages/{pages.router.js → views/router/pages.router.js} +8 -8
- package/dist/martyrs/src/modules/pages/views/router/pages.router.js.map +1 -0
- package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +7 -7
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +21 -21
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +20 -20
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +4 -4
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +4 -4
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +3 -3
- package/dist/martyrs/src/modules/rents/rents.client.js +1 -1
- package/dist/martyrs/src/modules/rents/rents.client.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +6 -6
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +4 -4
- package/dist/martyrs/src/modules/rents/{rents.router.js → views/router/rents.router.js} +4 -4
- package/dist/martyrs/src/modules/rents/views/router/rents.router.js.map +1 -0
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
- package/dist/martyrs/src/modules/reports/reports.client.js +1 -1
- package/dist/martyrs/src/modules/reports/reports.client.js.map +1 -1
- package/dist/martyrs/src/modules/reports/{reports.router.js → router/reports.router.js} +1 -1
- package/dist/martyrs/src/modules/reports/router/reports.router.js.map +1 -0
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +11 -11
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +21 -21
- package/dist/martyrs/src/modules/wallet/views/components/pages/Payments.vue.js +68 -0
- package/dist/martyrs/src/modules/wallet/views/components/pages/Payments.vue.js.map +1 -0
- package/dist/martyrs/src/modules/wallet/views/router/wallet.router.js +48 -0
- package/dist/martyrs/src/modules/wallet/views/router/wallet.router.js.map +1 -0
- package/dist/martyrs/src/modules/wallet/views/store/payments.store.js +59 -0
- package/dist/martyrs/src/modules/wallet/views/store/payments.store.js.map +1 -0
- package/dist/martyrs/src/modules/wallet/wallet.client.js +20 -0
- package/dist/martyrs/src/modules/wallet/wallet.client.js.map +1 -0
- package/dist/martyrs.es.js +84 -41
- package/dist/martyrs.es10.js +126 -0
- package/dist/martyrs.es101.js +39 -0
- package/dist/martyrs.es102.js +31 -0
- package/dist/martyrs.es104.js +27 -0
- package/dist/martyrs.es105.js +8 -0
- package/dist/martyrs.es106.js +9 -0
- package/dist/martyrs.es107.js +79 -0
- package/dist/martyrs.es108.js +7 -0
- package/dist/martyrs.es109.js +121 -0
- package/dist/martyrs.es11.js +49 -0
- package/dist/martyrs.es112.js +4 -0
- package/dist/martyrs.es113.js +169 -0
- package/dist/martyrs.es114.js +460 -0
- package/dist/martyrs.es115.js +42 -0
- package/dist/martyrs.es116.js +12 -0
- package/dist/martyrs.es117.js +52 -0
- package/dist/martyrs.es118.js +14 -0
- package/dist/martyrs.es119.js +47 -0
- package/dist/martyrs.es12.js +94 -0
- package/dist/martyrs.es120.js +7 -0
- package/dist/martyrs.es121.js +131 -0
- package/dist/martyrs.es122.js +103 -0
- package/dist/martyrs.es123.js +89 -0
- package/dist/martyrs.es124.js +40 -0
- package/dist/martyrs.es125.js +14 -0
- package/dist/martyrs.es126.js +42 -0
- package/dist/martyrs.es127.js +11 -0
- package/dist/martyrs.es128.js +25 -0
- package/dist/martyrs.es129.js +7 -0
- package/dist/martyrs.es13.js +48 -0
- package/dist/martyrs.es130.js +10 -0
- package/dist/martyrs.es131.js +119 -0
- package/dist/martyrs.es132.js +20 -0
- package/dist/martyrs.es133.js +18 -0
- package/dist/martyrs.es134.js +6 -0
- package/dist/martyrs.es135.js +35 -0
- package/dist/martyrs.es136.js +12 -0
- package/dist/martyrs.es137.js +23 -0
- package/dist/martyrs.es138.js +12 -0
- package/dist/martyrs.es139.js +11 -0
- package/dist/martyrs.es14.js +101 -0
- package/dist/martyrs.es140.js +47 -0
- package/dist/martyrs.es141.js +483 -0
- package/dist/martyrs.es142.js +8 -0
- package/dist/martyrs.es143.js +4 -0
- package/dist/martyrs.es144.js +33 -0
- package/dist/martyrs.es145.js +14 -0
- package/dist/martyrs.es146.js +19 -0
- package/dist/martyrs.es147.js +22 -0
- package/dist/martyrs.es148.js +31 -0
- package/dist/martyrs.es149.js +23 -0
- package/dist/martyrs.es15.js +408 -0
- package/dist/martyrs.es16.js +58 -0
- package/dist/martyrs.es17.js +44 -0
- package/dist/martyrs.es18.js +42 -0
- package/dist/martyrs.es19.js +27 -0
- package/dist/martyrs.es2.js +88 -0
- package/dist/martyrs.es20.js +13 -0
- package/dist/martyrs.es21.js +57 -0
- package/dist/martyrs.es22.js +104 -0
- package/dist/martyrs.es23.js +178 -0
- package/dist/martyrs.es24.js +123 -0
- package/dist/martyrs.es25.js +139 -0
- package/dist/martyrs.es26.js +21 -0
- package/dist/martyrs.es27.js +60 -0
- package/dist/martyrs.es28.js +75 -0
- package/dist/martyrs.es29.js +36 -0
- package/dist/martyrs.es3.js +116 -0
- package/dist/martyrs.es30.js +348 -0
- package/dist/martyrs.es31.js +83 -0
- package/dist/martyrs.es32.js +148 -0
- package/dist/martyrs.es33.js +175 -0
- package/dist/martyrs.es34.js +66 -0
- package/dist/martyrs.es35.js +57 -0
- package/dist/martyrs.es36.js +76 -0
- package/dist/martyrs.es37.js +101 -0
- package/dist/martyrs.es38.js +39 -0
- package/dist/martyrs.es39.js +124 -0
- package/dist/martyrs.es4.js +85 -0
- package/dist/martyrs.es40.js +120 -0
- package/dist/martyrs.es41.js +229 -0
- package/dist/martyrs.es43.js +29 -0
- package/dist/martyrs.es44.js +27 -0
- package/dist/martyrs.es46.js +9 -0
- package/dist/martyrs.es48.js +18 -0
- package/dist/martyrs.es5.js +395 -0
- package/dist/martyrs.es50.js +42 -0
- package/dist/martyrs.es52.js +255 -0
- package/dist/martyrs.es54.js +8 -0
- package/dist/martyrs.es6.js +70 -0
- package/dist/martyrs.es61.js +139 -0
- package/dist/martyrs.es65.js +28 -0
- package/dist/martyrs.es68.js +33 -0
- package/dist/martyrs.es69.js +37 -0
- package/dist/martyrs.es7.js +17 -0
- package/dist/martyrs.es71.js +114 -0
- package/dist/martyrs.es73.js +83 -0
- package/dist/martyrs.es74.js +52 -0
- package/dist/martyrs.es75.js +75 -0
- package/dist/martyrs.es76.js +176 -0
- package/dist/martyrs.es77.js +31 -0
- package/dist/martyrs.es78.js +38 -0
- package/dist/martyrs.es8.js +127 -0
- package/dist/martyrs.es81.js +32 -0
- package/dist/martyrs.es86.js +37 -0
- package/dist/martyrs.es89.js +37 -0
- package/dist/martyrs.es9.js +396 -0
- package/dist/martyrs.es91.js +63 -0
- package/dist/martyrs.es92.js +35 -0
- package/dist/martyrs.es94.js +41 -0
- package/dist/martyrs.es95.js +59 -0
- package/dist/martyrs.es96.js +123 -0
- package/dist/martyrs.es97.js +43 -0
- package/dist/martyrs.es98.js +86 -0
- package/dist/martyrs.es99.js +33 -0
- package/dist/music.server.js +11 -11
- package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/index.js +1 -1
- package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js +1 -1
- package/dist/node_modules/.pnpm/capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/index.js +1 -1
- package/dist/node_modules/.pnpm/capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/web.js +1 -1
- package/dist/notifications.server.js +16 -6
- package/dist/orders.server.js +264 -145
- package/dist/organizations.server.js +22 -6
- package/dist/products.server.js +7 -7
- package/dist/rents.server.js +4 -3
- package/dist/style.css +970 -986
- package/package.json +13 -6
- package/src/builder/modes/ssr.rspack.dev.js +32 -20
- package/src/builder/rspack/rspack.config.api.js +3 -0
- package/src/builder/rspack/rspack.config.base.js +9 -1
- package/src/builder/rspack/rspack.config.ssr.client.js +8 -5
- package/src/components/Block/Block.vue +1 -1
- package/src/components/Button/Button.vue +4 -4
- package/src/components/Table/StatusBadge.vue +24 -18
- package/src/components/Text/Text.vue +1 -1
- package/src/jit/core.js +72 -35
- package/src/jit/plugin.js +4 -3
- package/src/jit/rules.js +15 -15
- package/src/modules/TASKS.MD +30 -0
- package/src/modules/TASK_ACTIVITY.md +60 -0
- package/src/modules/TASK_MODULE_ARCH.md +391 -0
- package/src/modules/auth/controllers/routes/users.routes.js +8 -0
- package/src/modules/auth/controllers/services/users.service.js +51 -1
- package/src/modules/auth/views/components/blocks/PopupAuth.vue +1 -1
- package/src/modules/auth/views/components/pages/ProfileBlogposts.vue +25 -24
- package/src/modules/auth/views/components/pages/SignIn.vue +10 -1
- package/src/modules/auth/views/components/pages/UserDashboard.vue +35 -62
- package/src/modules/auth/views/router/users.router.js +0 -44
- package/src/modules/backoffice/components/pages/Dashboard.vue +423 -120
- package/src/modules/backoffice/configs/navigation.backoffice.config.js +0 -2
- package/src/modules/backoffice/router/backoffice.router.js +0 -25
- package/src/modules/community/community.client.js +54 -9
- package/src/modules/community/components/blocks/CardBlogpost.vue +10 -3
- package/src/modules/community/components/layouts/Community.vue +3 -3
- package/src/modules/community/components/pages/BlogPost.vue +1 -1
- package/src/modules/community/components/pages/CreateBlogPost.vue +19 -20
- package/src/modules/community/components/pages/Posts.vue +43 -28
- package/src/modules/community/components/sections/Comment.vue +1 -1
- package/src/modules/community/controllers/blog.controller.js +4 -5
- package/src/modules/community/models/reaction.model.js +1 -0
- package/src/modules/community/router/community.backoffice.router.js +16 -0
- package/src/modules/community/router/community.organization.router.js +56 -0
- package/src/modules/community/router/community.router.js +58 -106
- package/src/modules/community/router/community.user.router.js +15 -0
- package/src/modules/constructor/components/elements/Textarea.vue +1 -1
- package/src/modules/constructor/components/sections/Constructor.vue +1 -1
- package/src/modules/core/controllers/classes/core.validator.js +7 -1
- package/src/modules/core/controllers/classes/core.verifier.js +0 -2
- package/src/modules/core/controllers/classes/crud/crud.controller.js +0 -4
- package/src/modules/core/controllers/classes/crud/crud.service.js +1 -0
- package/src/modules/core/models/schemas/engagement.schema.js +19 -22
- package/src/modules/core/views/classes/core.app.js +6 -4
- package/src/modules/core/views/classes/i18n.manager.js +9 -2
- package/src/modules/core/views/classes/ws.manager.js +17 -7
- package/src/modules/core/views/components/blocks/Card.vue +47 -24
- package/src/modules/core/views/components/blocks/CardStat.vue +27 -0
- package/src/modules/core/views/components/blocks/PopupAuth.vue +1 -1
- package/src/modules/core/views/components/layouts/Client.vue +5 -4
- package/src/modules/core/views/components/partials/BottomNavigationBar.vue +5 -5
- package/src/modules/core/views/components/partials/Header.vue +2 -2
- package/src/modules/core/views/components/partials/Navigation.vue +13 -14
- package/src/modules/core/views/components/partials/Sidebar.vue +4 -6
- package/src/modules/core/views/components/sections/SectionPageTitle.vue +23 -15
- package/src/modules/core/views/mixins/mixins.js +4 -3
- package/src/modules/core/views/router/addRoutes.js +1 -2
- package/src/modules/core/views/utils/vue-app-renderer.js +12 -0
- package/src/modules/events/components/pages/EditEventTickets.vue +1 -1
- package/src/modules/events/components/pages/Events.vue +1 -0
- package/src/modules/events/components/pages/EventsBackoffice.vue +23 -48
- package/src/modules/events/components/sections/List.vue +2 -2
- package/src/modules/events/events.client.js +44 -17
- package/src/modules/events/router/events.backoffice.router.js +80 -0
- package/src/modules/events/router/events.organization.router.js +80 -0
- package/src/modules/events/router/events.router.js +55 -325
- package/src/modules/events/router/events.user.router.js +49 -0
- package/src/modules/governance/TASK-TRACKER.MD +534 -39
- package/src/modules/governance/configs/navigation.initiative.config.js +30 -0
- package/src/modules/governance/controllers/routes/initiatives.routes.js +55 -8
- package/src/modules/governance/controllers/routes/{milestones.routes.js → sprints.routes.js} +22 -22
- package/src/modules/governance/controllers/routes/tasks.routes.js +2 -2
- package/src/modules/governance/governance.client.js +1 -4
- package/src/modules/governance/governance.server.js +6 -6
- package/src/modules/governance/middlewares/initiatives.verifier.js +60 -0
- package/src/modules/governance/middlewares/{milestones.verifier.js → sprints.verifier.js} +10 -10
- package/src/modules/governance/middlewares/tasks.verifier.js +4 -4
- package/src/modules/governance/middlewares/votings.verifier.js +25 -7
- package/src/modules/governance/models/{milestone.model.js → sprint.model.js} +11 -11
- package/src/modules/governance/models/task.model.js +4 -4
- package/src/modules/governance/models/voting.model.js +10 -5
- package/src/modules/governance/views/components/blocks/CardInitiativeItem.vue +8 -13
- package/src/modules/governance/views/components/blocks/{CardMilestoneItem.vue → CardSprintItem.vue} +16 -17
- package/src/modules/governance/views/components/blocks/CardTaskItem.vue +7 -9
- package/src/modules/governance/views/components/blocks/CardVotingItem.vue +7 -9
- package/src/modules/governance/views/components/pages/Governance.vue +13 -34
- package/src/modules/governance/views/components/pages/Initiative.vue +73 -154
- package/src/modules/governance/views/components/pages/InitiativeCreate.vue +44 -7
- package/src/modules/governance/views/components/pages/{Roadmap.vue → InitiativeSprints.vue} +70 -69
- package/src/modules/governance/views/components/pages/Initiatives.vue +23 -108
- package/src/modules/governance/views/components/pages/{Milestone.vue → Sprint.vue} +43 -41
- package/src/modules/governance/views/components/pages/SprintCreate.vue +55 -0
- package/src/modules/governance/views/components/pages/Task.vue +95 -88
- package/src/modules/governance/views/components/pages/TaskCreate.vue +47 -9
- package/src/modules/governance/views/components/pages/Tasks.vue +25 -21
- package/src/modules/governance/views/components/pages/Voting.vue +84 -68
- package/src/modules/governance/views/components/pages/VotingCreate.vue +48 -8
- package/src/modules/governance/views/components/pages/Votings.vue +12 -57
- package/src/modules/governance/views/components/partials/EmptyState.vue +1 -1
- package/src/modules/governance/views/components/partials/LinkedEntityCard.vue +23 -11
- package/src/modules/governance/views/components/partials/TaskStatusBadge.vue +1 -1
- package/src/modules/governance/views/components/partials/VoteForm.vue +3 -3
- package/src/modules/governance/views/components/partials/VotingResults.vue +13 -19
- package/src/modules/governance/views/components/sections/FormInitiativeDetails.vue +413 -15
- package/src/modules/governance/views/components/sections/FormSprintDetails.vue +156 -0
- package/src/modules/governance/views/components/sections/FormTaskDetails.vue +125 -21
- package/src/modules/governance/views/components/sections/FormVotingDetails.vue +136 -17
- package/src/modules/governance/views/components/sections/VoteForm.vue +2 -2
- package/src/modules/governance/views/router/governance.router.js +255 -151
- package/src/modules/governance/views/store/initiatives.js +23 -2
- package/src/modules/governance/views/store/sprints.js +102 -0
- package/src/modules/governance/views/store/tasks.js +25 -9
- package/src/modules/governance/views/store/votings.js +106 -27
- package/src/modules/icons/icons.client.js +1 -1
- package/src/modules/inventory/components/pages/InventoryEdit.vue +1 -1
- package/src/modules/music/components/sections/PopularTracks.vue +52 -0
- package/src/modules/music/music.client.js +8 -1
- package/src/modules/music/router/music.router.js +13 -1
- package/src/modules/notifications/components/elements/NotificationBadge.vue +8 -33
- package/src/modules/notifications/components/sections/NotificationPreferences.vue +110 -48
- package/src/modules/notifications/notifications.client.js +78 -57
- package/src/modules/notifications/router/notifications.router.js +32 -15
- package/src/modules/notifications/services/notification.service.js +15 -6
- package/src/modules/notifications/services/web-push.service.js +2 -0
- package/src/modules/orders/components/blocks/CardApplication.vue +20 -40
- package/src/modules/orders/components/blocks/CardCustomer.vue +35 -55
- package/src/modules/orders/components/blocks/CardOrderItem.vue +2 -2
- package/src/modules/orders/components/blocks/CardOrderUser.vue +2 -2
- package/src/modules/orders/components/forms/FormCustomerDetails.vue +2 -2
- package/src/modules/orders/components/pages/Applications.vue +59 -57
- package/src/modules/orders/components/pages/Customers.vue +40 -27
- package/src/modules/orders/components/pages/OrderCreate.vue +1 -1
- package/src/modules/orders/components/sections/ApplicationDetails.vue +1 -4
- package/src/modules/orders/components/sections/CustomerDetails.vue +1 -4
- package/src/modules/orders/controllers/orders.controller.js +113 -0
- package/src/modules/orders/middlewares/applications.verifier.js +13 -37
- package/src/modules/orders/middlewares/customers.verifier.js +44 -121
- package/src/modules/orders/models/customer.model.js +0 -1
- package/src/modules/orders/routes/applications.routes.js +108 -50
- package/src/modules/orders/routes/orders.routes.js +9 -1
- package/src/modules/organizations/components/blocks/CardOrganization.vue +12 -4
- package/src/modules/organizations/components/forms/DepartmentForm.vue +9 -4
- package/src/modules/organizations/components/pages/Members.vue +62 -1
- package/src/modules/organizations/components/pages/Organization.new.vue +17 -17
- package/src/modules/organizations/components/pages/Organization.vue +8 -1
- package/src/modules/organizations/components/pages/OrganizationBackoffice.vue +1 -1
- package/src/modules/organizations/components/pages/OrganizationEdit.vue +11 -4
- package/src/modules/organizations/components/pages/Organizations.vue +33 -46
- package/src/modules/organizations/controllers/invites.controller.js +19 -0
- package/src/modules/organizations/controllers/memberships.controller.js +1 -0
- package/src/modules/organizations/organizations.client.js +48 -7
- package/src/modules/organizations/router/organizations.backoffice.router.js +15 -0
- package/src/modules/organizations/router/organizations.router.js +72 -112
- package/src/modules/organizations/router/organizations.user.router.js +15 -0
- package/src/modules/pages/pages.client.js +1 -1
- package/src/modules/pages/views/router/pages.router.js +95 -15
- package/src/modules/products/components/blocks/CardPosition.vue +1 -1
- package/src/modules/products/components/pages/Products.vue +3 -3
- package/src/modules/rents/controllers/services/rents.services.js +1 -0
- package/src/modules/rents/rents.client.js +1 -1
- package/src/modules/rents/views/router/rents.router.js +93 -33
- package/src/modules/reports/reports.client.js +1 -1
- package/src/modules/wallet/wallet.client.js +1 -1
- package/src/styles/theme.scss +5 -3
- package/dist/engagement.schema-fh6W1fb_.js +0 -24
- package/dist/main-DQm5pwFO.js +0 -8213
- package/dist/martyrs/dist/main-DQm5pwFO.js +0 -1080
- package/dist/martyrs/dist/main-DQm5pwFO.js.map +0 -1
- package/dist/martyrs/dist/web-n_ivHO3v.js +0 -55
- package/dist/martyrs/dist/web-n_ivHO3v.js.map +0 -1
- package/dist/martyrs/node_modules/.pnpm/@capacitor_core@7.4.4/node_modules/@capacitor/core/dist/index.js +0 -487
- package/dist/martyrs/node_modules/.pnpm/@capacitor_core@7.4.4/node_modules/@capacitor/core/dist/index.js.map +0 -1
- package/dist/martyrs/node_modules/.pnpm/@capacitor_preferences@7.0.2_@capacitor_core@7.4.4/node_modules/@capacitor/preferences/dist/esm/index.js +0 -8
- package/dist/martyrs/node_modules/.pnpm/@capacitor_preferences@7.0.2_@capacitor_core@7.4.4/node_modules/@capacitor/preferences/dist/esm/index.js.map +0 -1
- package/dist/martyrs/node_modules/.pnpm/@capacitor_preferences@7.0.2_@capacitor_core@7.4.4/node_modules/@capacitor/preferences/dist/esm/web.js +0 -73
- package/dist/martyrs/node_modules/.pnpm/@capacitor_preferences@7.0.2_@capacitor_core@7.4.4/node_modules/@capacitor/preferences/dist/esm/web.js.map +0 -1
- package/dist/martyrs/src/components/Address/Address.vue.js.map +0 -1
- package/dist/martyrs/src/components/Button/Button.vue.js.map +0 -1
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.js.map +0 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +0 -1
- package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js.map +0 -1
- package/dist/martyrs/src/modules/community/community.router.js +0 -124
- package/dist/martyrs/src/modules/community/community.router.js.map +0 -1
- package/dist/martyrs/src/modules/icons/icons.router.js.map +0 -1
- package/dist/martyrs/src/modules/music/music.router.js.map +0 -1
- package/dist/martyrs/src/modules/notifications/notifications.router.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +0 -200
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/organizations.router.js +0 -145
- package/dist/martyrs/src/modules/organizations/organizations.router.js.map +0 -1
- package/dist/martyrs/src/modules/pages/pages.router.js.map +0 -1
- package/dist/martyrs/src/modules/rents/rents.router.js.map +0 -1
- package/dist/martyrs/src/modules/reports/reports.router.js.map +0 -1
- package/dist/martyrs.css +0 -1
- package/dist/node_modules/.pnpm/@capacitor_core@7.4.4/node_modules/@capacitor/core/dist/index.js +0 -487
- package/dist/node_modules/.pnpm/@capacitor_core@7.4.4/node_modules/@capacitor/core/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@capacitor_device@7.0.1_@capacitor_core@7.4.4/node_modules/@capacitor/device/dist/esm/index.js +0 -8
- package/dist/node_modules/.pnpm/@capacitor_device@7.0.1_@capacitor_core@7.4.4/node_modules/@capacitor/device/dist/esm/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@capacitor_device@7.0.1_@capacitor_core@7.4.4/node_modules/@capacitor/device/dist/esm/web.js +0 -146
- package/dist/node_modules/.pnpm/@capacitor_device@7.0.1_@capacitor_core@7.4.4/node_modules/@capacitor/device/dist/esm/web.js.map +0 -1
- package/dist/node_modules/.pnpm/@capacitor_keyboard@7.0.1_@capacitor_core@7.4.4/node_modules/@capacitor/keyboard/dist/esm/definitions.js +0 -18
- package/dist/node_modules/.pnpm/@capacitor_keyboard@7.0.1_@capacitor_core@7.4.4/node_modules/@capacitor/keyboard/dist/esm/definitions.js.map +0 -1
- package/dist/node_modules/.pnpm/@capacitor_keyboard@7.0.1_@capacitor_core@7.4.4/node_modules/@capacitor/keyboard/dist/esm/index.js +0 -9
- package/dist/node_modules/.pnpm/@capacitor_keyboard@7.0.1_@capacitor_core@7.4.4/node_modules/@capacitor/keyboard/dist/esm/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@capacitor_push-notifications@7.0.3_@capacitor_core@7.4.4/node_modules/@capacitor/push-notifications/dist/esm/index.js +0 -6
- package/dist/node_modules/.pnpm/@capacitor_push-notifications@7.0.3_@capacitor_core@7.4.4/node_modules/@capacitor/push-notifications/dist/esm/index.js.map +0 -1
- package/dist/web-n_ivHO3v.js +0 -54
- package/src/jit/.claude/settings.local.json +0 -10
- package/src/modules/community/community.router.js +0 -107
- package/src/modules/governance/governance.router.js +0 -350
- package/src/modules/governance/seed-governance.js +0 -348
- package/src/modules/governance/views/components/pages/InitiativeMilestones.vue +0 -159
- package/src/modules/governance/views/router/goverance.router.js +0 -290
- package/src/modules/governance/views/store/votes.js +0 -113
- package/src/modules/icons/icons.router.js +0 -29
- package/src/modules/marketplace/marketplace.router.js +0 -66
- package/src/modules/music/.claude/settings.local.json +0 -8
- package/src/modules/music/music.router.js +0 -188
- package/src/modules/notifications/notifications.router.js +0 -47
- package/src/modules/orders/orders.router.js +0 -255
- package/src/modules/organizations/organizations.router.js +0 -123
- package/src/modules/organizations/router/backoffice.router.js +0 -27
- package/src/modules/organizations/router/departments.router.js +0 -15
- package/src/modules/organizations/router/members.router.js +0 -20
- package/src/modules/pages/pages.router.js +0 -107
- package/src/modules/rents/rents.router.js +0 -115
- package/src/modules/reports/reports.router.js +0 -33
- package/src/modules/wallet/wallet.router.js +0 -45
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
## ТЗ: модуль управления инициативами OZ DAO (доработка с учетом архитектуры Martyrs)
|
|
2
2
|
|
|
3
3
|
### Назначение
|
|
4
|
-
Модуль обеспечивает управление
|
|
4
|
+
Модуль обеспечивает управление инициативами с интеграцией в экосистему Martyrs: инициативы с несколькими репозиториями, задачи (по умолчанию приватные для участников), merge requests, ревью и утверждение, выплаты исполнителям на внутренние кошельки, GitOps-раздел. Использует существующую инфраструктуру авторизации, организаций и ролей.
|
|
5
5
|
|
|
6
6
|
### Архитектурная интеграция
|
|
7
7
|
|
|
8
8
|
**Базовые модели и связи:**
|
|
9
|
-
- Расширение `db.organization` через связь с `db.
|
|
10
|
-
- Использование `db.membership` для управления участниками
|
|
11
|
-
- Интеграция с `db.department` для привязки
|
|
12
|
-
- Применение существующей системы `invites` для приглашений в
|
|
9
|
+
- Расширение `db.organization` через связь с `db.initiative` (owner.type: 'Organization')
|
|
10
|
+
- Использование `db.membership` для управления участниками инициативы с расширенными ролями
|
|
11
|
+
- Интеграция с `db.department` для привязки инициатив к подразделениям
|
|
12
|
+
- Применение существующей системы `invites` для приглашений в инициативы
|
|
13
13
|
|
|
14
14
|
**Ключевые файлы для просмотра:**
|
|
15
15
|
- `modules/organizations/models/membership.model.js` - базовая модель членства
|
|
@@ -19,17 +19,17 @@
|
|
|
19
19
|
- `modules/core/controllers/classes/abac/` - система контроля доступа
|
|
20
20
|
|
|
21
21
|
### Основной поток
|
|
22
|
-
Создание
|
|
22
|
+
Создание инициативы в организации → назначение department (опционально) → приглашение участников через invites → добавление репозиториев → создание задач → выполнение задач → открытие MR с привязкой к задаче → ревью и утверждение → закрытие задачи и приёмка → выплата через wallet модуль.
|
|
23
23
|
|
|
24
|
-
### Расширение модели Membership для
|
|
24
|
+
### Расширение модели Membership для инициатив
|
|
25
25
|
|
|
26
|
-
**Дополнительные поля в membership для контекста
|
|
26
|
+
**Дополнительные поля в membership для контекста инициативы:**
|
|
27
27
|
```
|
|
28
28
|
membership.context = {
|
|
29
|
-
type: '
|
|
30
|
-
target: ObjectId // ID
|
|
29
|
+
type: 'Initiative', // или 'Organization', 'Department'
|
|
30
|
+
target: ObjectId // ID инициативы
|
|
31
31
|
}
|
|
32
|
-
membership.
|
|
32
|
+
membership.initiativeRole: String // 'owner', 'management', 'contributor'
|
|
33
33
|
membership.permissions: {
|
|
34
34
|
merge: Boolean,
|
|
35
35
|
deploy: Boolean,
|
|
@@ -38,33 +38,33 @@ membership.permissions: {
|
|
|
38
38
|
}
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
### Роли
|
|
41
|
+
### Роли инициативы (через расширенный membership)
|
|
42
42
|
|
|
43
|
-
- **Owner
|
|
44
|
-
- Полный контроль через `membership.
|
|
43
|
+
- **Owner инициативы** — создатель инициативы или назначенный владелец из организации
|
|
44
|
+
- Полный контроль через `membership.initiativeRole === 'owner'`
|
|
45
45
|
- Автоматически получает все permissions: true
|
|
46
46
|
- Наследует права от `organizationHelpers.isOrganizationOwner()`
|
|
47
47
|
|
|
48
|
-
- **Management
|
|
49
|
-
- `membership.
|
|
48
|
+
- **Management инициативы** — участники с правами управления
|
|
49
|
+
- `membership.initiativeRole === 'management'`
|
|
50
50
|
- Настраиваемые permissions через `membership.permissions`
|
|
51
51
|
- По умолчанию: merge, deploy, budget = true; veto = false
|
|
52
52
|
|
|
53
|
-
- **Contributors
|
|
54
|
-
- `membership.
|
|
53
|
+
- **Contributors инициативы** — разработчики и исполнители
|
|
54
|
+
- `membership.initiativeRole === 'contributor'`
|
|
55
55
|
- Базовые права: создание задач и MR
|
|
56
56
|
- permissions по умолчанию все false
|
|
57
57
|
|
|
58
58
|
### Интеграция с ABAC системой
|
|
59
59
|
|
|
60
|
-
**Регистрация политик
|
|
60
|
+
**Регистрация политик инициативы:**
|
|
61
61
|
```
|
|
62
|
-
// В modules/
|
|
63
|
-
abacAccessControl.registerResourcePolicy('
|
|
62
|
+
// В modules/governance/policies/initiatives.policies.js
|
|
63
|
+
abacAccessControl.registerResourcePolicy('initiative', async context => {
|
|
64
64
|
// Использование organizationHelpers для проверки прав
|
|
65
|
-
const orgId = await
|
|
65
|
+
const orgId = await getInitiativeOrganization(context.currentResource);
|
|
66
66
|
const isOrgMember = await context.checkOrganizationMember(context.user, orgId);
|
|
67
|
-
// Проверка
|
|
67
|
+
// Проверка initiativeRole через membership
|
|
68
68
|
});
|
|
69
69
|
```
|
|
70
70
|
|
|
@@ -88,7 +88,7 @@ abac.registerFieldsPolicy('task', {
|
|
|
88
88
|
### Правила действий (через ABAC middleware)
|
|
89
89
|
|
|
90
90
|
- **Ветки и push** — проверка через `abac.middleware('repository', 'push')`
|
|
91
|
-
- Требует
|
|
91
|
+
- Требует initiativeRole: owner/management
|
|
92
92
|
- **MR создание** — открыто для всех с доступом к задаче
|
|
93
93
|
- **Merge** — требует permissions.merge === true
|
|
94
94
|
- **Выплаты** — требует permissions.budget === true
|
|
@@ -115,19 +115,19 @@ voting: {
|
|
|
115
115
|
|
|
116
116
|
**Интеграция с WebSocket:**
|
|
117
117
|
- События голосования транслируются через `WebSocketManager`
|
|
118
|
-
- Использование существующих каналов: `
|
|
118
|
+
- Использование существующих каналов: `initiative:{id}`, `task:{id}`
|
|
119
119
|
- Real-time обновления статусов через `globalswebsocket`
|
|
120
120
|
|
|
121
121
|
### Задачи (расширение governance/tasks)
|
|
122
122
|
|
|
123
|
-
**Дополнительные поля для
|
|
123
|
+
**Дополнительные поля для задач:**
|
|
124
124
|
```
|
|
125
|
-
task.
|
|
125
|
+
task.initiative: ObjectId // связь с инициативой
|
|
126
126
|
task.repository: String // целевой репозиторий
|
|
127
127
|
task.branch: String // целевая ветка
|
|
128
128
|
task.mergeRequests: [ObjectId] // связанные MR
|
|
129
129
|
task.visibility: {
|
|
130
|
-
type: String, // '
|
|
130
|
+
type: String, // 'initiative', 'public', 'custom'
|
|
131
131
|
allowList: [ObjectId], // для custom
|
|
132
132
|
denyList: [ObjectId]
|
|
133
133
|
}
|
|
@@ -143,23 +143,23 @@ task.passed: Boolean // флаг приёмки
|
|
|
143
143
|
|
|
144
144
|
**Использование notifications модуля:**
|
|
145
145
|
- Подключение к `modules/notifications/` для email/push уведомлений
|
|
146
|
-
- События
|
|
147
|
-
- Логирование через `core.logger` с категорией '
|
|
146
|
+
- События инициативы регистрируются через Observer pattern
|
|
147
|
+
- Логирование через `core.logger` с категорией 'initiative'
|
|
148
148
|
|
|
149
149
|
**WebSocket события:**
|
|
150
150
|
```javascript
|
|
151
151
|
// Используя WebSocketManager из globals
|
|
152
|
-
wss.broadcast(`
|
|
152
|
+
wss.broadcast(`initiative:${initiativeId}`, {
|
|
153
153
|
event: 'task.updated',
|
|
154
154
|
data: taskData,
|
|
155
|
-
permissions: ['
|
|
155
|
+
permissions: ['initiative.member'] // фильтрация по правам
|
|
156
156
|
});
|
|
157
157
|
```
|
|
158
158
|
|
|
159
159
|
### Инварианты и валидация
|
|
160
160
|
|
|
161
|
-
- **Owner контроль** — проверка через `organizationHelpers.isOrganizationOwner()` или `membership.
|
|
162
|
-
- **Cascade permissions** — права организации наследуются
|
|
161
|
+
- **Owner контроль** — проверка через `organizationHelpers.isOrganizationOwner()` или `membership.initiativeRole === 'owner'`
|
|
162
|
+
- **Cascade permissions** — права организации наследуются инициативой
|
|
163
163
|
- **Atomic operations** — использование транзакций MongoDB для критичных операций
|
|
164
164
|
- **Audit trail** — логирование всех действий через `db.log`
|
|
165
165
|
- **Cache invalidation** — сброс кеша при изменении прав через `Cache` из globals
|
|
@@ -168,7 +168,7 @@ wss.broadcast(`project:${projectId}`, {
|
|
|
168
168
|
|
|
169
169
|
| Действие | Owner | Management | Contributor | Условия |
|
|
170
170
|
|----------|-------|------------|-------------|---------|
|
|
171
|
-
| Создание
|
|
171
|
+
| Создание инициативы | ✓ | ✗ | ✗ | Требует прав в организации |
|
|
172
172
|
| Управление участниками | ✓ | ✗ | ✗ | - |
|
|
173
173
|
| Создание задач | ✓ | ✓ | ✓ | - |
|
|
174
174
|
| Создание MR | ✓ | ✓ | ✓ | Доступ к задаче |
|
|
@@ -178,15 +178,510 @@ wss.broadcast(`project:${projectId}`, {
|
|
|
178
178
|
| Deploy | ✓ | ✓* | ✗ | *При permissions.deploy |
|
|
179
179
|
| Наложение вето | ✓ | ✓* | ✗ | *При permissions.veto |
|
|
180
180
|
| Снятие вето | ✓ | ✗ | ✗ | Только owner |
|
|
181
|
-
| Удаление
|
|
181
|
+
| Удаление инициативы | ✓ | ✗ | ✗ | - |
|
|
182
182
|
|
|
183
183
|
### Интеграция с существующими модулями
|
|
184
184
|
|
|
185
185
|
- **auth** — использование `auth.state.user` для текущего пользователя
|
|
186
186
|
- **wallet** — интеграция для выплат через внутренние кошельки
|
|
187
|
-
- **notifications** — уведомления о событиях
|
|
187
|
+
- **notifications** — уведомления о событиях инициативы
|
|
188
188
|
- **globals/cache** — кеширование прав доступа
|
|
189
189
|
- **globals/logger** — аудит всех действий
|
|
190
190
|
- **organizations** — наследование структуры и прав
|
|
191
191
|
|
|
192
|
-
Этот подход максимально использует существующую инфраструктуру Martyrs, минимизируя дублирование кода и обеспечивая консистентность с остальной системой.
|
|
192
|
+
Этот подход максимально использует существующую инфраструктуру Martyrs, минимизируя дублирование кода и обеспечивая консистентность с остальной системой.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
### Статус реализации
|
|
197
|
+
|
|
198
|
+
#### Initiatives — миграция с mock на БД (выполнено)
|
|
199
|
+
|
|
200
|
+
**Проблема:** Страница инициативы (`/governance/initiatives/:id`) использовала хардкоженные данные из `data/mockData.js`. Форма создания содержала только 3 поля (name, description, status). Verifier не пропускал расширенные поля — они отбрасывались при create/update.
|
|
201
|
+
|
|
202
|
+
**Что сделано:**
|
|
203
|
+
|
|
204
|
+
1. **Verifier** (`middlewares/initiatives.verifier.js`) — добавлены optional поля в createVerifier и updateVerifier: `fullDescription`, `valueProposition`, `targetAudience`, `successCriteria`, `repositories`, `links`, `environments`, `releases`, `metrics`, `sprints`
|
|
205
|
+
|
|
206
|
+
2. **Store** (`views/store/initiatives.js`) — исправлена обработка ответа `getInitiativeById` (API возвращает массив, теперь берётся `[0]`). Расширен default state `current` всеми полями.
|
|
207
|
+
|
|
208
|
+
3. **Форма создания** (`views/components/sections/FormInitiativeDetails.vue`) — полная перестройка. Секции: Basic Info, Detailed Description (с динамическим списком successCriteria), Repositories (динамический список name+path), Links (5 категорий с динамическими URL), Environments (name, url, status, version), Releases (version, date, notes, status), Metrics (6 числовых/select полей).
|
|
209
|
+
|
|
210
|
+
4. **Страница создания** (`views/components/pages/InitiativeCreate.vue`) — добавлены стилизация, кнопка назад, инициализация всех полей, redirect после создания на `/governance/initiatives/:id`.
|
|
211
|
+
|
|
212
|
+
5. **Страница инициативы** (`views/components/pages/Initiative.vue`) — удалён импорт `mockData`. `initiative` читается напрямую из `initiativesState.current`. Milestones загружаются через `GET /api/initiatives/:id/milestones`. Votings загружаются через `GET /api/votings/read` с клиентской фильтрацией по initiative ID. Router-link переведены на path-based навигацию.
|
|
213
|
+
|
|
214
|
+
6. **Тестовые данные** — создана инициатива в БД (`_id: 698759840f5b375a233230cd`) со всеми полями из mockData.
|
|
215
|
+
|
|
216
|
+
**Известные ограничения:**
|
|
217
|
+
- `GET /api/votings/read?initiative=<id>` — параметр `initiative` проходит verifier, но `queryProcessor.getBasicOptions()` его не обрабатывает. Фильтрация выполняется на клиенте.
|
|
218
|
+
- `data/mockData.js` — не удалён, может использоваться другими компонентами.
|
|
219
|
+
- Модель `initiative.model.js` — `strict: false`, схема не расширялась (все поля сохраняются без валидации на уровне Mongoose).
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## ТЗ: Milestones, Tasks, Votings — миграция с mock на БД
|
|
224
|
+
|
|
225
|
+
### Проблема
|
|
226
|
+
|
|
227
|
+
8 страниц governance используют хардкоженные данные из `data/mockData.js`. Формы создания содержат 3-4 поля. Store-ы содержат баги (массив вместо объекта в `current`). Store для milestones отсутствует. Имена файлов store-ов перепутаны.
|
|
228
|
+
|
|
229
|
+
**Страницы с mock-зависимостью:**
|
|
230
|
+
|
|
231
|
+
| Страница | Файл | Какие mock-массивы использует |
|
|
232
|
+
|----------|------|-------------------------------|
|
|
233
|
+
| Milestone detail | `Milestone.vue` | mockMilestones, mockTasks |
|
|
234
|
+
| Task detail | `Task.vue` | mockTasks, mockInitiatives, mockMilestones, mockVotings |
|
|
235
|
+
| Tasks list | `Tasks.vue` | mockTasks |
|
|
236
|
+
| Voting detail | `Voting.vue` | mockVotings, mockTasks, mockInitiatives, mockMilestones |
|
|
237
|
+
| Votings list | `Votings.vue` | mockVotings |
|
|
238
|
+
| Roadmap | `Roadmap.vue` | mockInitiatives, mockMilestones |
|
|
239
|
+
| Initiative milestones | `InitiativeMilestones.vue` | mockInitiatives, mockMilestones |
|
|
240
|
+
| Task create | `TaskCreate.vue` | — (но использует `name` вместо `title`, статус `todo` вместо `not_started`) |
|
|
241
|
+
| Voting create | `VotingCreate.vue` | — (но сломан импорт: `votesActions` из `../../store/votings`) |
|
|
242
|
+
|
|
243
|
+
### Маппинг полей mock → БД
|
|
244
|
+
|
|
245
|
+
**Milestones:**
|
|
246
|
+
| Mock поле | БД поле | Примечание |
|
|
247
|
+
|-----------|---------|------------|
|
|
248
|
+
| `id` | `_id` | String → ObjectId |
|
|
249
|
+
| `initiativeId` | `initiative` | String → ObjectId ref |
|
|
250
|
+
| `owner` | `owner` | `{id, name, avatar}` → ObjectId ref, нужен populate |
|
|
251
|
+
| `contributors` | `contributors` | `[{id, name, avatar}]` → `[ObjectId]` ref, нужен populate |
|
|
252
|
+
| `taskCount` | — | Нет в модели, вычисляется через count tasks с `milestone: _id` |
|
|
253
|
+
|
|
254
|
+
**Tasks:**
|
|
255
|
+
| Mock поле | БД поле | Примечание |
|
|
256
|
+
|-----------|---------|------------|
|
|
257
|
+
| `id` | `_id` | String → ObjectId |
|
|
258
|
+
| `initiativeId` | `initiative` | String → ObjectId ref |
|
|
259
|
+
| `milestoneId` | `milestone` | String → ObjectId ref |
|
|
260
|
+
| `assignee` | `assignedTo` | `{id, name, avatar}` → ObjectId ref, нужен populate |
|
|
261
|
+
| `votingId` | — | Нет прямого поля, связь через Voting.targetId |
|
|
262
|
+
| `startVotingId` | `proposedByVoting` | String → ObjectId ref |
|
|
263
|
+
| `approvalVotingId` | `completionVoting` | String → ObjectId ref |
|
|
264
|
+
| `project` | `initiative` | В Task.vue секция показывает initiative.title |
|
|
265
|
+
| `repository` | — | Нет в модели task, данные из initiative.repositories |
|
|
266
|
+
| `branch` | — | Нет в модели task |
|
|
267
|
+
| `mergeRequests` | — | Нет в модели task |
|
|
268
|
+
| `visibility` | — | Нет в модели task |
|
|
269
|
+
| `budget` | — | Нет в модели task |
|
|
270
|
+
| `passed` | — | Нет в модели task |
|
|
271
|
+
| `permissions` | — | Нет в модели task |
|
|
272
|
+
|
|
273
|
+
**Votings:**
|
|
274
|
+
| Mock поле | БД поле | Примечание |
|
|
275
|
+
|-----------|---------|------------|
|
|
276
|
+
| `id` | `_id` | String → ObjectId |
|
|
277
|
+
| `status` | `result` | Mock `status` = approved/rejected/pending → DB `result` = approved/rejected/pending. DB также имеет `status` = pending/active/closed (статус процесса, не итог) |
|
|
278
|
+
| `linkedEntityType` | `targetModel` | `'initiative'/'task'` → `'Initiative'/'Task'/'Milestone'` (с большой буквы) |
|
|
279
|
+
| `linkedEntityId` | `targetId` | String → ObjectId |
|
|
280
|
+
| `threshold` | `threshold` | Mock: 0.6 (доля) → DB: 51 (проценты). Нужна конвертация `* 100` |
|
|
281
|
+
| `totalVotes` | — | Нет в модели, вычисляется из `votes.length` |
|
|
282
|
+
| `yesVotes` | — | Нет, вычисляется из votes |
|
|
283
|
+
| `noVotes` | — | Нет, вычисляется из votes |
|
|
284
|
+
| `abstainVotes` | — | Нет, вычисляется из votes |
|
|
285
|
+
| `votes` (inline) | `votes` | Mock: inline `[{userId, vote, comment}]` → DB: `[ObjectId]` refs на Vote модель |
|
|
286
|
+
|
|
287
|
+
### Баги и проблемы в текущем коде
|
|
288
|
+
|
|
289
|
+
1. **Перепутаны имена store файлов:**
|
|
290
|
+
- `views/store/votes.js` — экспортирует `votingsActions`, `votingsState` (это VOTINGS store)
|
|
291
|
+
- `views/store/votings.js` — экспортирует `votesActions`, `votesState` (это VOTES store)
|
|
292
|
+
|
|
293
|
+
2. **VotingCreate.vue сломан:** `import { votesActions } from '../../store/votings'` — импортирует `votesActions` (для голосов), но вызывает `votesActions.createVoting()` (метод которого нет в votesActions). Нужно: `import { votingsActions } from '../../store/votes'`
|
|
294
|
+
|
|
295
|
+
3. **TaskCreate.vue использует `name` вместо `title`:** БД модель и verifier используют `title`, а форма отправляет `name`. Статус `todo` не валиден (нужен `not_started`).
|
|
296
|
+
|
|
297
|
+
4. **Баг массива в getById:** `tasksState.current = response.data` и `votingsState.current = response.data` — API возвращает массив, нужно `Array.isArray(response.data) ? response.data[0] : response.data`.
|
|
298
|
+
|
|
299
|
+
5. **Нет store для milestones** — файл `views/store/milestones.js` не существует.
|
|
300
|
+
|
|
301
|
+
6. **queryProcessor не поддерживает фильтрацию** по `initiative`, `milestone`, `assignedTo` — только `_id, url, status, type, organization, owner, customer, creator, product, listing`. Фильтрация на клиенте.
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
### Шаг 1: Создать store для milestones
|
|
306
|
+
|
|
307
|
+
**Файл:** `views/store/milestones.js` (новый)
|
|
308
|
+
|
|
309
|
+
Паттерн аналогичен `tasks.js` и `votes.js`. Reactive state + actions + watch history.
|
|
310
|
+
|
|
311
|
+
```javascript
|
|
312
|
+
// State
|
|
313
|
+
milestonesState = reactive({
|
|
314
|
+
all: [],
|
|
315
|
+
current: {
|
|
316
|
+
name: '', description: '', status: 'not_started',
|
|
317
|
+
startDate: null, dueDate: null, completedDate: null,
|
|
318
|
+
progress: 0, owner: null, contributors: [],
|
|
319
|
+
initiative: null, priority: 'medium', tags: [],
|
|
320
|
+
dependencies: [], metadata: null,
|
|
321
|
+
createdAt: null, updatedAt: null,
|
|
322
|
+
},
|
|
323
|
+
})
|
|
324
|
+
|
|
325
|
+
// Actions
|
|
326
|
+
milestonesActions = {
|
|
327
|
+
getAllMilestones() // GET /api/milestones/read
|
|
328
|
+
getMilestoneById(id) // GET /api/milestones/read?_id=id → Array.isArray fix
|
|
329
|
+
createMilestone(data) // POST /api/milestones/create
|
|
330
|
+
updateMilestone(data) // PUT /api/milestones/update
|
|
331
|
+
deleteMilestone(id) // POST /api/milestones/delete
|
|
332
|
+
}
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Export: `{ milestonesActions, milestonesState }`
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
### Шаг 2: Исправить stores tasks и votings
|
|
340
|
+
|
|
341
|
+
**Файл:** `views/store/tasks.js`
|
|
342
|
+
|
|
343
|
+
1. Исправить `getTaskById` — обработка массива:
|
|
344
|
+
```javascript
|
|
345
|
+
tasksState.current = Array.isArray(response.data) ? response.data[0] : response.data;
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
2. Расширить default state `current`:
|
|
349
|
+
```javascript
|
|
350
|
+
current: {
|
|
351
|
+
title: '', description: '', status: 'not_started',
|
|
352
|
+
assignedTo: null, dueDate: null,
|
|
353
|
+
milestone: null, initiative: null,
|
|
354
|
+
priority: 'medium', tags: [],
|
|
355
|
+
proposedByVoting: null, completionVoting: null,
|
|
356
|
+
completedDate: null,
|
|
357
|
+
createdAt: null, updatedAt: null,
|
|
358
|
+
}
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
**Файл:** `views/store/votes.js` (это votings store!)
|
|
362
|
+
|
|
363
|
+
1. Исправить `getVotingById` — обработка массива:
|
|
364
|
+
```javascript
|
|
365
|
+
votingsState.current = Array.isArray(response.data) ? response.data[0] : response.data;
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
2. Расширить default state `current`:
|
|
369
|
+
```javascript
|
|
370
|
+
current: {
|
|
371
|
+
title: '', description: '', type: 'general',
|
|
372
|
+
targetModel: null, targetId: null,
|
|
373
|
+
threshold: 51, participants: [],
|
|
374
|
+
result: 'pending', initiative: null, milestone: null,
|
|
375
|
+
metadata: null, startDate: null, endDate: null,
|
|
376
|
+
status: 'pending', votes: [],
|
|
377
|
+
createdAt: null, updatedAt: null,
|
|
378
|
+
}
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
---
|
|
382
|
+
|
|
383
|
+
### Шаг 3: Создать FormMilestoneDetails.vue
|
|
384
|
+
|
|
385
|
+
**Файл:** `views/components/sections/FormMilestoneDetails.vue` (новый)
|
|
386
|
+
|
|
387
|
+
Компонент формы для создания/редактирования milestone. `v-model` паттерн как у `FormInitiativeDetails.vue`.
|
|
388
|
+
|
|
389
|
+
**Поля:**
|
|
390
|
+
- name (required, text)
|
|
391
|
+
- description (textarea)
|
|
392
|
+
- status (select: not_started, in_progress, completed, blocked, cancelled)
|
|
393
|
+
- startDate (date input)
|
|
394
|
+
- dueDate (date input)
|
|
395
|
+
- progress (number, 0-100)
|
|
396
|
+
- owner (text/ObjectId — на первом этапе просто text input)
|
|
397
|
+
- priority (select: low, medium, high, urgent)
|
|
398
|
+
- tags (динамический список строк)
|
|
399
|
+
- initiative (text/ObjectId — на первом этапе text input)
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
### Шаг 4: Перестроить FormTaskDetails.vue
|
|
404
|
+
|
|
405
|
+
**Файл:** `views/components/sections/FormTaskDetails.vue`
|
|
406
|
+
|
|
407
|
+
Текущее состояние: 4 bare HTML поля (name, description, status со значениями todo/inProgress/done, assignedTo).
|
|
408
|
+
|
|
409
|
+
**Нужно:**
|
|
410
|
+
- title (required, text) — не `name`!
|
|
411
|
+
- description (textarea)
|
|
412
|
+
- status (select: proposed, voting, not_started, in_progress, review, completed, blocked, cancelled)
|
|
413
|
+
- assignedTo (text/ObjectId)
|
|
414
|
+
- dueDate (date input)
|
|
415
|
+
- milestone (text/ObjectId)
|
|
416
|
+
- initiative (text/ObjectId)
|
|
417
|
+
- priority (select: low, medium, high, urgent)
|
|
418
|
+
- tags (динамический список строк)
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
### Шаг 5: Перестроить FormVotingDetails.vue
|
|
423
|
+
|
|
424
|
+
**Файл:** `views/components/sections/FormVotingDetails.vue`
|
|
425
|
+
|
|
426
|
+
Текущее состояние: 4 bare HTML поля (title, description, startDate, endDate).
|
|
427
|
+
|
|
428
|
+
**Нужно:**
|
|
429
|
+
- title (required, text)
|
|
430
|
+
- description (textarea)
|
|
431
|
+
- type (required, select: create_task, approve_task, create_initiative, update_milestone, general)
|
|
432
|
+
- targetModel (select: Task, Initiative, Milestone, — пустое)
|
|
433
|
+
- targetId (text/ObjectId)
|
|
434
|
+
- threshold (number, 1-100, default 51)
|
|
435
|
+
- initiative (text/ObjectId)
|
|
436
|
+
- milestone (text/ObjectId)
|
|
437
|
+
- startDate (date input)
|
|
438
|
+
- endDate (date input)
|
|
439
|
+
- status (select: pending, active, closed)
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
### Шаг 6: Перестроить TaskCreate.vue
|
|
444
|
+
|
|
445
|
+
**Файл:** `views/components/pages/TaskCreate.vue`
|
|
446
|
+
|
|
447
|
+
Текущее: bare div, 4 поля, `name` вместо `title`, статус `todo`, нет redirect.
|
|
448
|
+
|
|
449
|
+
**Нужно:**
|
|
450
|
+
- Стилизация как в `InitiativeCreate.vue` (pd-medium, кнопка назад, bg-main кнопка)
|
|
451
|
+
- Полный `newTask` ref со всеми полями:
|
|
452
|
+
```javascript
|
|
453
|
+
newTask = ref({
|
|
454
|
+
title: '', description: '', status: 'not_started',
|
|
455
|
+
assignedTo: '', dueDate: null,
|
|
456
|
+
milestone: '', initiative: '',
|
|
457
|
+
priority: 'medium', tags: [],
|
|
458
|
+
})
|
|
459
|
+
```
|
|
460
|
+
- Redirect после создания: `router.push('/governance/tasks/' + response._id)`
|
|
461
|
+
- Кнопка назад на `/governance/tasks`
|
|
462
|
+
- Импорт `tasksActions` из `../../store/tasks`
|
|
463
|
+
|
|
464
|
+
---
|
|
465
|
+
|
|
466
|
+
### Шаг 7: Перестроить VotingCreate.vue
|
|
467
|
+
|
|
468
|
+
**Файл:** `views/components/pages/VotingCreate.vue`
|
|
469
|
+
|
|
470
|
+
Текущее: сломан импорт (`votesActions` из `../../store/votings`), 4 поля, нет redirect.
|
|
471
|
+
|
|
472
|
+
**Нужно:**
|
|
473
|
+
- Исправить импорт: `import { votingsActions } from '../../store/votes'`
|
|
474
|
+
- Стилизация как в `InitiativeCreate.vue`
|
|
475
|
+
- Полный `newVoting` ref:
|
|
476
|
+
```javascript
|
|
477
|
+
newVoting = ref({
|
|
478
|
+
title: '', description: '', type: 'general',
|
|
479
|
+
targetModel: '', targetId: '',
|
|
480
|
+
threshold: 51, initiative: '', milestone: '',
|
|
481
|
+
startDate: null, endDate: null, status: 'pending',
|
|
482
|
+
})
|
|
483
|
+
```
|
|
484
|
+
- Redirect после создания: `router.push('/governance/votings/' + response._id)`
|
|
485
|
+
- Кнопка назад на `/governance/votings`
|
|
486
|
+
- Вызов: `votingsActions.createVoting(newVoting.value)`
|
|
487
|
+
|
|
488
|
+
---
|
|
489
|
+
|
|
490
|
+
### Шаг 8: Создать MilestoneCreate.vue
|
|
491
|
+
|
|
492
|
+
**Файл:** `views/components/pages/MilestoneCreate.vue` (новый)
|
|
493
|
+
|
|
494
|
+
Страница не существует, нужно создать. Паттерн аналогичен `InitiativeCreate.vue`.
|
|
495
|
+
|
|
496
|
+
- Кнопка назад на `/governance/milestones` (или `/governance/roadmap`)
|
|
497
|
+
- Полный `newMilestone` ref:
|
|
498
|
+
```javascript
|
|
499
|
+
newMilestone = ref({
|
|
500
|
+
name: '', description: '', status: 'not_started',
|
|
501
|
+
startDate: null, dueDate: null, progress: 0,
|
|
502
|
+
owner: '', initiative: '',
|
|
503
|
+
priority: 'medium', tags: [],
|
|
504
|
+
})
|
|
505
|
+
```
|
|
506
|
+
- Redirect после создания: `router.push('/governance/milestones/' + response._id)`
|
|
507
|
+
- Импорт `milestonesActions` из `../../store/milestones`
|
|
508
|
+
|
|
509
|
+
**Добавить роут** в `governance.client.js` и `global.config.js` если нужно.
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
### Шаг 9: Milestone.vue — убрать mock
|
|
514
|
+
|
|
515
|
+
**Файл:** `views/components/pages/Milestone.vue`
|
|
516
|
+
|
|
517
|
+
Текущее: `mockMilestones.find(m => m.id === route.params.id)` и `mockTasks.filter(t => t.milestoneId === route.params.id)`.
|
|
518
|
+
|
|
519
|
+
**Нужно:**
|
|
520
|
+
1. Удалить `import { mockMilestones, mockTasks } from '../../../data/mockData'`
|
|
521
|
+
2. Импортировать `{ milestonesActions, milestonesState }` из store
|
|
522
|
+
3. Импортировать `$axios` для запроса tasks
|
|
523
|
+
4. `milestone` = `computed(() => milestonesState.current)`
|
|
524
|
+
5. В `onMounted`:
|
|
525
|
+
- `milestonesActions.getMilestoneById(route.params.id)`
|
|
526
|
+
- `const res = await $axios.get('/api/tasks/read')` → фильтрация на клиенте: `.filter(t => t.milestone === route.params.id)`
|
|
527
|
+
6. Обработать отсутствие `taskCount` — вычислять из реального массива tasks
|
|
528
|
+
|
|
529
|
+
---
|
|
530
|
+
|
|
531
|
+
### Шаг 10: Task.vue — убрать mock
|
|
532
|
+
|
|
533
|
+
**Файл:** `views/components/pages/Task.vue`
|
|
534
|
+
|
|
535
|
+
Текущее: использует mockTasks, mockInitiatives, mockMilestones, mockVotings для отображения задачи, связанной инициативы, milestone, голосований.
|
|
536
|
+
|
|
537
|
+
**Нужно:**
|
|
538
|
+
1. Удалить все mock импорты
|
|
539
|
+
2. Импортировать stores:
|
|
540
|
+
- `{ tasksActions, tasksState }` из `../../store/tasks`
|
|
541
|
+
- `{ initiativesActions, initiativesState }` из `../../store/initiatives`
|
|
542
|
+
- `{ milestonesActions, milestonesState }` из `../../store/milestones`
|
|
543
|
+
- `{ votingsActions, votingsState }` из `../../store/votes`
|
|
544
|
+
3. `task` = `computed(() => tasksState.current)`
|
|
545
|
+
4. В `onMounted`:
|
|
546
|
+
- `await tasksActions.getTaskById(route.params.id)`
|
|
547
|
+
- Загрузить связанную initiative: `initiativesActions.getInitiativeById(task.value.initiative)` (если initiative не null)
|
|
548
|
+
- Загрузить связанный milestone: `milestonesActions.getMilestoneById(task.value.milestone)` (если milestone не null)
|
|
549
|
+
- Загрузить связанные votings: `votingsActions.getAllVotings()` → `computed` фильтрация по `targetId === task._id`
|
|
550
|
+
5. Секция "Repository Information" показывает `initiativesState.current.title`. Секции repository/branch/mergeRequests/budget/permissions — обернуть в v-if (полей пока нет в модели task)
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
### Шаг 11: Tasks.vue — убрать mock
|
|
555
|
+
|
|
556
|
+
**Файл:** `views/components/pages/Tasks.vue`
|
|
557
|
+
|
|
558
|
+
Текущее: `ref(mockTasks)`, группировка по статусам.
|
|
559
|
+
|
|
560
|
+
**Нужно:**
|
|
561
|
+
1. Удалить `import { mockTasks }`
|
|
562
|
+
2. Импортировать `{ tasksActions, tasksState }`
|
|
563
|
+
3. В `onMounted`: `tasksActions.getAllTasks()`
|
|
564
|
+
4. `tasks` = `computed(() => tasksState.all)`
|
|
565
|
+
5. Группировка по статусам остаётся, но использовать реальные статусы из модели
|
|
566
|
+
|
|
567
|
+
---
|
|
568
|
+
|
|
569
|
+
### Шаг 12: Voting.vue — убрать mock
|
|
570
|
+
|
|
571
|
+
**Файл:** `views/components/pages/Voting.vue`
|
|
572
|
+
|
|
573
|
+
Текущее: mockVotings + резолвинг linkedEntity через mockTasks/mockInitiatives/mockMilestones.
|
|
574
|
+
|
|
575
|
+
**Нужно:**
|
|
576
|
+
1. Удалить все mock импорты
|
|
577
|
+
2. Импортировать `{ votingsActions, votingsState }` из `../../store/votes`
|
|
578
|
+
3. `voting` = `computed(() => votingsState.current)`
|
|
579
|
+
4. В `onMounted`:
|
|
580
|
+
- `votingsActions.getVotingById(route.params.id)`
|
|
581
|
+
- Загрузить linked entity через `targetModel`/`targetId`:
|
|
582
|
+
```javascript
|
|
583
|
+
if (voting.targetModel && voting.targetId) {
|
|
584
|
+
const endpoint = voting.targetModel.toLowerCase() + 's'; // 'tasks', 'initiatives', 'milestones'
|
|
585
|
+
const res = await $axios.get(`/api/${endpoint}/read`, { params: { _id: voting.targetId } });
|
|
586
|
+
linkedEntity.value = Array.isArray(res.data) ? res.data[0] : res.data;
|
|
587
|
+
}
|
|
588
|
+
```
|
|
589
|
+
- Загрузить votes: `votesActions.getVotesForVoting(route.params.id)` (или `$axios.get('/api/votes/read', { params: { voting: id } })`)
|
|
590
|
+
5. Маппинг полей: mock `status` = DB `result`, mock `linkedEntityType` = DB `targetModel`, mock `threshold` = DB threshold (уже в %)
|
|
591
|
+
6. Подсчёт yesVotes/noVotes/abstainVotes — вычислять из массива votes
|
|
592
|
+
|
|
593
|
+
---
|
|
594
|
+
|
|
595
|
+
### Шаг 13: Votings.vue — убрать mock
|
|
596
|
+
|
|
597
|
+
**Файл:** `views/components/pages/Votings.vue`
|
|
598
|
+
|
|
599
|
+
Текущее: `ref(mockVotings)`, фильтрация по type/status.
|
|
600
|
+
|
|
601
|
+
**Нужно:**
|
|
602
|
+
1. Удалить mock импорт
|
|
603
|
+
2. Импортировать `{ votingsActions, votingsState }` из `../../store/votes`
|
|
604
|
+
3. В `onMounted`: `votingsActions.getAllVotings()`
|
|
605
|
+
4. `votings` = `computed(() => votingsState.all)`
|
|
606
|
+
5. Фильтрация: mock `status` → DB `result` для фильтра по итогу, DB `status` для фильтра по процессу
|
|
607
|
+
|
|
608
|
+
---
|
|
609
|
+
|
|
610
|
+
### Шаг 14: Roadmap.vue и InitiativeMilestones.vue — убрать mock
|
|
611
|
+
|
|
612
|
+
**Файл:** `views/components/pages/Roadmap.vue`
|
|
613
|
+
|
|
614
|
+
Текущее: mockInitiatives + mockMilestones, табы milestones/releases.
|
|
615
|
+
|
|
616
|
+
**Нужно:**
|
|
617
|
+
1. Удалить mock импорты
|
|
618
|
+
2. Импортировать stores: initiatives, milestones
|
|
619
|
+
3. В `onMounted`: загрузить все initiatives и milestones
|
|
620
|
+
4. Использовать реальные данные из store state
|
|
621
|
+
|
|
622
|
+
**Файл:** `views/components/pages/InitiativeMilestones.vue`
|
|
623
|
+
|
|
624
|
+
Аналогично Roadmap.vue — убрать mock, использовать stores.
|
|
625
|
+
|
|
626
|
+
---
|
|
627
|
+
|
|
628
|
+
### Шаг 15: Создать тестовые данные в БД
|
|
629
|
+
|
|
630
|
+
Через API создать записи с данными из mockData.js (аналогично инициативе `698759840f5b375a233230cd`).
|
|
631
|
+
|
|
632
|
+
**Порядок создания (из-за зависимостей ObjectId):**
|
|
633
|
+
1. Milestones (5 шт) — ссылаются на initiative `698759840f5b375a233230cd`
|
|
634
|
+
2. Tasks (10 шт) — ссылаются на milestones и initiative
|
|
635
|
+
3. Votings (6 шт) — ссылаются на tasks/initiatives через targetModel/targetId
|
|
636
|
+
|
|
637
|
+
**Конвертация при создании:**
|
|
638
|
+
- Milestone: `initiativeId: '1'` → `initiative: '698759840f5b375a233230cd'`, `owner: {id:'1',...}` → `owner: <реальный userId>`
|
|
639
|
+
- Task: `milestoneId` → `milestone: <ObjectId созданного milestone>`, `assignee` → `assignedTo: <userId>`, `name` поле не нужно (используется `title`)
|
|
640
|
+
- Voting: `linkedEntityType: 'task'` → `targetModel: 'Task'`, `linkedEntityId: '5'` → `targetId: <ObjectId task>`, `threshold: 0.6` → `threshold: 60`, `status: 'approved'` → `result: 'approved'`
|
|
641
|
+
|
|
642
|
+
---
|
|
643
|
+
|
|
644
|
+
### Файлы для модификации (сводка)
|
|
645
|
+
|
|
646
|
+
| # | Файл | Действие | Статус |
|
|
647
|
+
|---|------|----------|--------|
|
|
648
|
+
| 1 | `views/store/milestones.js` | **Создать** — новый store | ✅ Готово |
|
|
649
|
+
| 2 | `views/store/tasks.js` | Исправить getById массив, расширить default state | ✅ Готово |
|
|
650
|
+
| 3 | `views/store/votes.js` | Исправить getById массив, расширить default state | ✅ Готово |
|
|
651
|
+
| 4 | `views/components/sections/FormMilestoneDetails.vue` | **Создать** — форма milestone | ✅ Готово |
|
|
652
|
+
| 5 | `views/components/sections/FormTaskDetails.vue` | Перестроить — все поля из модели | ✅ Готово |
|
|
653
|
+
| 6 | `views/components/sections/FormVotingDetails.vue` | Перестроить — все поля из модели | ✅ Готово |
|
|
654
|
+
| 7 | `views/components/pages/TaskCreate.vue` | Перестроить — стилизация, правильные поля, redirect | ✅ Готово |
|
|
655
|
+
| 8 | `views/components/pages/VotingCreate.vue` | Перестроить — fix импорт, стилизация, все поля, redirect | ✅ Готово |
|
|
656
|
+
| 9 | `views/components/pages/MilestoneCreate.vue` | **Создать** — страница создания milestone | ✅ Готово |
|
|
657
|
+
| 10 | `views/components/pages/Milestone.vue` | Убрать mock, использовать store + API | ✅ Готово |
|
|
658
|
+
| 11 | `views/components/pages/Task.vue` | Убрать mock, использовать store + API | ✅ Готово |
|
|
659
|
+
| 12 | `views/components/pages/Tasks.vue` | Убрать mock, использовать store | ✅ Готово |
|
|
660
|
+
| 13 | `views/components/pages/Voting.vue` | Убрать mock, использовать store + API | ✅ Готово |
|
|
661
|
+
| 14 | `views/components/pages/Votings.vue` | Убрать mock, использовать store | ✅ Готово |
|
|
662
|
+
| 15 | `views/components/pages/Roadmap.vue` | Убрать mock, использовать stores | ✅ Готово |
|
|
663
|
+
| 16 | `views/components/pages/InitiativeMilestones.vue` | Убрать mock, использовать stores | ✅ Готово |
|
|
664
|
+
|
|
665
|
+
**Дополнительно исправлено (вне основного scope):**
|
|
666
|
+
- `views/store/votings.js` — убраны `|| .id` fallback-и
|
|
667
|
+
- `views/components/blocks/CardVotingItem.vue` — `_id` вместо `_id || id`, path-based router-link
|
|
668
|
+
- `views/components/blocks/CardMilestoneItem.vue` — `_id` вместо `_id || id`, path-based router-link
|
|
669
|
+
- `views/components/blocks/CardTaskItem.vue` — `_id` вместо `_id || id`, path-based router-link
|
|
670
|
+
- `views/components/blocks/CardInitiativeItem.vue` — `_id` вместо `_id || id`, path-based router-link
|
|
671
|
+
- `views/router/governance.router.js` — добавлен роут `milestones/create`
|
|
672
|
+
|
|
673
|
+
**Не модифицируем:**
|
|
674
|
+
- Модели (`milestone.model.js`, `task.model.js`, `voting.model.js`) — схемы достаточны для текущих данных
|
|
675
|
+
- Verifier-ы — уже содержат все нужные поля
|
|
676
|
+
- `data/mockData.js` — удалить после миграции всех страниц (отдельным шагом)
|
|
677
|
+
|
|
678
|
+
### Известные ограничения
|
|
679
|
+
|
|
680
|
+
- **queryProcessor** не поддерживает фильтрацию по `initiative`, `milestone`, `assignedTo` — все фильтрации на клиенте через `.filter()` после загрузки полного списка
|
|
681
|
+
- **owner/assignee** — бэкенд должен агрегировать (populate). Фронтенд ожидает объекты `{name, avatar}`. Если бэк не популейтит — будут отображаться ObjectId строки
|
|
682
|
+
- **votes** в mock voting = inline массив `[{userId, vote, comment}]`, в БД = `[ObjectId]` refs на Vote модель. В Voting.vue подсчёт голосов через отдельный запрос `GET /api/votes/read?voting=<id>`
|
|
683
|
+
- **Маппинг mock → DB полей в Voting.vue:** mock `status` (approved/rejected/pending) = DB `result`, mock `linkedEntityType` = DB `targetModel`, mock `linkedEntityId` = DB `targetId`. `isActive` проверяет `status === 'active'` (процесс голосования активен)
|
|
684
|
+
- Mock `task.project` соответствует `task.initiative` (ObjectId ref). В Task.vue секция показывает initiative.title
|
|
685
|
+
- Поля `repository`, `branch`, `mergeRequests`, `visibility`, `budget`, `passed`, `permissions` — нет в модели task. В UI обёрнуты в v-if
|
|
686
|
+
- Все router-link переведены на path-based навигацию (вместо name-based) из-за ленивой загрузки модулей
|
|
687
|
+
- Везде используется `_id` без fallback на `id`
|