{"version":3,"file":"app.ca15530bb0051e89.bundle.js","mappings":"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","sources":["webpack://frontend/./src/App.vue","webpack://frontend/./src/components/NavBar.vue","webpack://frontend/src/components/NavBar.vue","webpack://frontend/./src/components/NavBar.vue?3121","webpack://frontend/./src/components/NavBar.vue?3457","webpack://frontend/./src/components/CustomFooter.vue","webpack://frontend/src/components/CustomFooter.vue","webpack://frontend/./src/components/CustomFooter.vue?8ed8","webpack://frontend/./src/components/CustomFooter.vue?ece7","webpack://frontend/src/App.vue","webpack://frontend/./src/App.vue?c036","webpack://frontend/./src/App.vue?0e40","webpack://frontend/./src/store/index.ts","webpack://frontend/./src/router/index.ts","webpack://frontend/./src/main.ts","webpack://frontend/./src/plugins/i18n.ts","webpack://frontend/./src/util/RequestFunc.ts","webpack://frontend/./src/util/classes.ts","webpack://frontend/./src/util/constants.ts","webpack://frontend/./src/util/helperFunc.ts","webpack://frontend/./src/util/sessionstorage.ts","webpack://frontend/webpack/bootstrap","webpack://frontend/webpack/runtime/chunk loaded","webpack://frontend/webpack/runtime/compat get default export","webpack://frontend/webpack/runtime/define property getters","webpack://frontend/webpack/runtime/ensure chunk","webpack://frontend/webpack/runtime/get javascript chunk filename","webpack://frontend/webpack/runtime/get mini-css chunk filename","webpack://frontend/webpack/runtime/getFullHash","webpack://frontend/webpack/runtime/global","webpack://frontend/webpack/runtime/hasOwnProperty shorthand","webpack://frontend/webpack/runtime/load script","webpack://frontend/webpack/runtime/make namespace object","webpack://frontend/webpack/runtime/publicPath","webpack://frontend/webpack/runtime/css loading","webpack://frontend/webpack/runtime/jsonp chunk loading","webpack://frontend/webpack/startup"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"app-body\"},[_c('NavBar',{key:_vm.$route.fullPath}),_c('router-view'),_c('CustomFooter'),(_vm.isLoading)?_c('b-overlay',{staticClass:\"overlay-classic\",attrs:{\"show\":_vm.isLoading,\"rounded\":\"sm\",\"variant\":\"dark\",\"opacity\":\"0.5\"},scopedSlots:_vm._u([{key:\"overlay\",fn:function(){return [_c('div',{staticClass:\"d-flex loader\"},[_c('img',{staticStyle:{\"width\":\"100px\",\"height\":\"100px\"},attrs:{\"src\":require(\"./assets/loader.gif\"),\"alt\":\"loading\"}})])]},proxy:true}],null,false,666746703)}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{attrs:{\"id\":\"navb\",\"toggleable\":\"lg\"}},[(_vm.isDevOrStaging)?_c('div',{staticClass:\"devBanner fw-bold text-center container\"},[_vm._v(\" \"+_vm._s(_vm.appMode)+\" \")]):_vm._e(),_c('div',{staticClass:\"container d-flex\",attrs:{\"id\":\"navbar-container\"}},[_vm._m(0),_vm._m(1),_c('div',{staticClass:\"col-lg col-1 d-lg-block d-flex\"},[_c('button',{staticClass:\"btn defaultTableButton d-flex d-lg-none align-self-center\",on:{\"click\":function($event){_vm.show = !_vm.show}}},[_c('img',{staticClass:\"mvIcon-md\",attrs:{\"src\":require(\"@/assets/menu-default.svg\")}})]),_c('div',{staticClass:\"justify-content-end d-none d-lg-flex text-white mb-3\"},[(_vm.username == '')?_c('router-link',{staticClass:\"cmr-1 cpr-1 mvNavItem mvNavItemBorder\",attrs:{\"custom\":\"\",\"to\":{ name: _vm.$routesNames.login }}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navLogin\"))+\" \")]):_vm._e(),(_vm.username == '')?_c('router-link',{staticClass:\"cml-1 cpr-1 mvNavItem\",attrs:{\"custom\":\"\",\"to\":{ name: _vm.$routesNames.register }}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navRegister\"))+\" \")]):_vm._e(),(_vm.username != '')?_c('span',{staticClass:\"cmr-1 cpr-1 mvNavItem mvNavItemBorder\",attrs:{\"disabled\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navbarGreeting\"))+_vm._s(_vm.username)+\" \")]):_vm._e(),(_vm.username != '')?_c('router-link',{staticClass:\"cmr-1 cpr-1 mvNavItem mvNavItemBorder\",attrs:{\"custom\":\"\",\"to\":{ name: _vm.$routesNames.editAccount }}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navAccount\"))+\" \")]):_vm._e(),(_vm.username != '')?_c('router-link',{staticClass:\"cmr-1 cpr-1 mvNavItem\",attrs:{\"custom\":\"\",\"to\":{ name: _vm.$routesNames.logout }}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navLogout\"))+\" \")]):_vm._e()],1),_c('div',{staticClass:\"justify-content-end d-none d-lg-flex\"},[_c('b-dropdown',{attrs:{\"toggle-class\":\"dropDownMenuButton\",\"no-caret\":\"\"},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.$t(\"navDropDownTitleMusiclibrary\"))+\" \"),_c('i',{staticClass:\"bi bi-chevron-down\",staticStyle:{\"color\":\"#ed008c\"}})]},proxy:true}])},_vm._l((_vm.navMusiclibraryDropDownDE),function(item,index){return _c('b-dropdown-item',{key:index,staticClass:\"text-uppercase\",attrs:{\"href\":item.route}},[_vm._v(\" \"+_vm._s(item.name)+\" \")])}),1),_c('b-dropdown',{attrs:{\"toggle-class\":\"dropDownMenuButton\",\"no-caret\":\"\"},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.$t(\"navDropDownTitleShoppingcart\"))+\" \"),_c('i',{staticClass:\"bi bi-chevron-down\",staticStyle:{\"color\":\"#ed008c\"}})]},proxy:true}])},_vm._l((_vm.navSammelkorbDropDownDE),function(item,index){return _c('b-dropdown-item',{key:index,staticClass:\"text-uppercase\",attrs:{\"href\":item.route}},[_vm._v(\" \"+_vm._s(item.name)+\" \")])}),1),_c('b-dropdown',{attrs:{\"toggle-class\":\"dropDownMenuButton\",\"no-caret\":\"\"},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.$t(\"navDropDownTitleMusikverlag\"))+\" \"),_c('i',{staticClass:\"bi bi-chevron-down\",staticStyle:{\"color\":\"#ed008c\"}})]},proxy:true}])},_vm._l((_vm.navMusikverlagDropDownDE),function(item,index){return _c('b-dropdown-item',{key:index,staticClass:\"text-uppercase\",attrs:{\"href\":item.route}},[_vm._v(\" \"+_vm._s(item.name)+\" \")])}),1),(_vm.isMVemployee)?_c('b-dropdown',{attrs:{\"toggle-class\":\"dropDownMenuButton\",\"no-caret\":\"\"},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.$t(\"navDropDownTitleAdmin\"))+\" \"),_c('i',{staticClass:\"bi bi-chevron-down\",staticStyle:{\"color\":\"#ed008c\"}})]},proxy:true}],null,false,18082424)},_vm._l((_vm.navAdminDropDownDe),function(item,index){return _c('b-dropdown-item',{key:index,staticClass:\"text-uppercase\",attrs:{\"href\":item.route}},[_vm._v(\" \"+_vm._s(item.name)+\" \")])}),1):_vm._e(),_c('b-dropdown',{attrs:{\"toggle-class\":\"dropDownMenuButton\",\"no-caret\":\"\"},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.$t(\"navDropDownTitleLabel\"))+\" \"),_c('i',{staticClass:\"bi bi-chevron-down\",staticStyle:{\"color\":\"#ed008c\"}})]},proxy:true}])},_vm._l((_vm.navLabelDropDownDE),function(item,index){return _c('b-dropdown-item',{key:index,staticClass:\"text-uppercase\",attrs:{\"href\":item.route}},[_vm._v(\" \"+_vm._s(item.name)+\" \")])}),1),_c('b-dropdown',{attrs:{\"offset\":\"-150\",\"toggle-class\":\"dropDownMenuButton\",\"no-caret\":\"\"},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.$t(\"navDropDownTitleHelp\"))+\" \"),_c('i',{staticClass:\"bi bi-chevron-down\",staticStyle:{\"color\":\"#ed008c\"}})]},proxy:true}])},_vm._l((_vm.navHelpDropDownDE),function(item,index){return _c('b-dropdown-item',{key:index,staticClass:\"text-uppercase\",attrs:{\"href\":item.route}},[_vm._v(\" \"+_vm._s(item.name)+\" \")])}),1)],1)])]),(_vm.show)?_c('div',{staticClass:\"d-lg-none d-flex flex-column text-left navbar-small\"},[_c('button',{staticClass:\"dropDownMenuButton-sm\",on:{\"click\":function($event){_vm.drowDownMenu2 = !_vm.drowDownMenu2}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navDropDownTitleMusiclibrary\"))+\" \"),(!_vm.drowDownMenu2)?_c('i',{staticClass:\"bi bi-chevron-down\",staticStyle:{\"color\":\"#ed008c\"}}):_vm._e(),(_vm.drowDownMenu2)?_c('i',{staticClass:\"bi bi-chevron-up\",staticStyle:{\"color\":\"#ed008c\"}}):_vm._e()]),(_vm.drowDownMenu2)?_c('div',{staticClass:\"d-flex flex-column\"},_vm._l((_vm.navMusiclibraryDropDownDE),function(item,index){return _c('a',{key:index,attrs:{\"href\":item.route}},[_vm._v(_vm._s(item.name))])}),0):_vm._e(),_c('button',{staticClass:\"dropDownMenuButton-sm\",on:{\"click\":function($event){_vm.drowDownMenu3 = !_vm.drowDownMenu3}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navDropDownTitleShoppingcart\"))+\" \"),(!_vm.drowDownMenu3)?_c('i',{staticClass:\"bi bi-chevron-down\",staticStyle:{\"color\":\"#ed008c\"}}):_vm._e(),(_vm.drowDownMenu3)?_c('i',{staticClass:\"bi bi-chevron-up\",staticStyle:{\"color\":\"#ed008c\"}}):_vm._e()]),(_vm.drowDownMenu3)?_c('div',{staticClass:\"d-flex flex-column\"},_vm._l((_vm.navSammelkorbDropDownDE),function(item,index){return _c('a',{key:index,attrs:{\"href\":item.route}},[_vm._v(_vm._s(item.name))])}),0):_vm._e(),_c('button',{staticClass:\"dropDownMenuButton-sm\",on:{\"click\":function($event){_vm.drowDownMenu1 = !_vm.drowDownMenu1}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navDropDownTitleMusikverlag\"))+\" \"),(!_vm.drowDownMenu1)?_c('i',{staticClass:\"bi bi-chevron-down\",staticStyle:{\"color\":\"#ed008c\"}}):_vm._e(),(_vm.drowDownMenu1)?_c('i',{staticClass:\"bi bi-chevron-up\",staticStyle:{\"color\":\"#ed008c\"}}):_vm._e()]),(_vm.drowDownMenu1)?_c('div',{staticClass:\"d-flex flex-column\"},_vm._l((_vm.navMusikverlagDropDownDE),function(item,index){return _c('a',{key:index,attrs:{\"href\":item.route}},[_vm._v(_vm._s(item.name))])}),0):_vm._e(),(_vm.isMVemployee)?_c('button',{staticClass:\"dropDownMenuButton-sm\",on:{\"click\":function($event){_vm.drowDownMenu6 = !_vm.drowDownMenu6}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navDropDownTitleAdmin\"))+\" \"),(!_vm.drowDownMenu6)?_c('i',{staticClass:\"bi bi-chevron-down\",staticStyle:{\"color\":\"#ed008c\"}}):_vm._e(),(_vm.drowDownMenu6)?_c('i',{staticClass:\"bi bi-chevron-up\",staticStyle:{\"color\":\"#ed008c\"}}):_vm._e()]):_vm._e(),(_vm.drowDownMenu6 && _vm.isMVemployee)?_c('div',{staticClass:\"d-flex flex-column\"},_vm._l((_vm.navAdminDropDownDe),function(item,index){return _c('a',{key:index,attrs:{\"href\":item.route}},[_vm._v(_vm._s(item.name))])}),0):_vm._e(),_c('button',{staticClass:\"dropDownMenuButton-sm\",on:{\"click\":function($event){_vm.drowDownMenu4 = !_vm.drowDownMenu4}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navDropDownTitleLabel\"))+\" \"),(!_vm.drowDownMenu4)?_c('i',{staticClass:\"bi bi-chevron-down\",staticStyle:{\"color\":\"#ed008c\"}}):_vm._e(),(_vm.drowDownMenu4)?_c('i',{staticClass:\"bi bi-chevron-up\",staticStyle:{\"color\":\"#ed008c\"}}):_vm._e()]),(_vm.drowDownMenu4)?_c('div',{staticClass:\"d-flex flex-column\"},_vm._l((_vm.navLabelDropDownDE),function(item,index){return _c('a',{key:index,attrs:{\"href\":item.route}},[_vm._v(_vm._s(item.name))])}),0):_vm._e(),_c('button',{staticClass:\"dropDownMenuButton-sm\",on:{\"click\":function($event){_vm.drowDownMenu5 = !_vm.drowDownMenu5}}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navDropDownTitleHelp\"))+\" \"),(!_vm.drowDownMenu5)?_c('i',{staticClass:\"bi bi-chevron-down\",staticStyle:{\"color\":\"#ed008c\"}}):_vm._e(),(_vm.drowDownMenu5)?_c('i',{staticClass:\"bi bi-chevron-up\",staticStyle:{\"color\":\"#ed008c\"}}):_vm._e()]),(_vm.drowDownMenu5)?_c('div',{staticClass:\"d-flex flex-column\"},_vm._l((_vm.navHelpDropDownDE),function(item,index){return _c('a',{key:index,attrs:{\"href\":item.route}},[_vm._v(_vm._s(item.name))])}),0):_vm._e(),(_vm.username == '')?_c('router-link',{attrs:{\"custom\":\"\",\"to\":{ name: _vm.$routesNames.login }}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navLogin\"))+\" \")]):_vm._e(),(_vm.username == '')?_c('router-link',{attrs:{\"custom\":\"\",\"to\":{ name: _vm.$routesNames.register }}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navRegister\"))+\" \")]):_vm._e(),(_vm.username != '')?_c('span',{attrs:{\"disabled\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navbarGreeting\"))+_vm._s(_vm.username)+\" \")]):_vm._e(),(_vm.username != '')?_c('router-link',{attrs:{\"custom\":\"\",\"to\":{ name: _vm.$routesNames.editAccount }}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navAccount\"))+\" \")]):_vm._e(),(_vm.username != '')?_c('router-link',{attrs:{\"custom\":\"\",\"to\":{ name: _vm.$routesNames.logout }}},[_vm._v(\" \"+_vm._s(_vm.$t(\"navLogout\"))+\" \")]):_vm._e()],1):_vm._e()])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"col-lg-1 col-3 col-sm-2\"},[_c('a',{attrs:{\"href\":\"https://musikverlag.orf.at/\"}},[_c('img',{staticClass:\"d-inline-block align-top\",attrs:{\"id\":\"logo\",\"src\":\"https://musikverlag.orf.at/typo3conf/ext/gd_theme/Resources/Public/images/logo.png\",\"alt\":\"Logo\",\"width\":\"72\",\"height\":\"72\"}})])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"col-sm col-auto d-flex align-items-center\"},[_c('a',{staticClass:\"navbar-brand text-white\",attrs:{\"href\":\"https://musikverlag.orf.at/\"}},[_vm._v(\"ORF-ENTERPRISE Musikverlag\")])])\n}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NavBar.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NavBar.vue?vue&type=script&lang=ts\"","import { render, staticRenderFns } from \"./NavBar.vue?vue&type=template&id=96a270e4\"\nimport script from \"./NavBar.vue?vue&type=script&lang=ts\"\nexport * from \"./NavBar.vue?vue&type=script&lang=ts\"\nimport style0 from \"./NavBar.vue?vue&type=style&index=0&id=96a270e4&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (!_vm.state)?_c('Footer',{attrs:{\"id\":\"footer\"},on:{\"ondrop\":function($event){$event.preventDefault();}}},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col\"},[_c('a',{attrs:{\"href\":\"https://enterprise.orf.at/\"}},[_c('img',{attrs:{\"src\":require(\"@/assets/logo-orf-enterprise.png\")}})]),_c('a',{attrs:{\"href\":\"https://musikverlag.orf.at/footer/agb/\"}},[_vm._v(\" AGB \")]),_c('a',{attrs:{\"href\":\"https://enterprise.orf.at/datenschutz/\"}},[_vm._v(\" DATENSCHUTZ \")]),_c('a',{attrs:{\"href\":\"https://enterprise.orf.at/impressum\"}},[_vm._v(\" Impressum / Offenlegung \")]),_c('a',{attrs:{\"href\":\"https://enterprise.orf.at/\"}},[_vm._v(\" enterprise.ORF.at \")])])])])]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomFooter.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomFooter.vue?vue&type=script&lang=ts\"","import { render, staticRenderFns } from \"./CustomFooter.vue?vue&type=template&id=696498ee\"\nimport script from \"./CustomFooter.vue?vue&type=script&lang=ts\"\nexport * from \"./CustomFooter.vue?vue&type=script&lang=ts\"\nimport style0 from \"./CustomFooter.vue?vue&type=style&index=0&id=696498ee&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=46608204\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=46608204&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\";\r\nimport Vuex from \"vuex\";\r\nimport { DropDownCartItem, SongInfo, TargetExportProp } from \"src/util/classes\";\r\nimport { CartInfo, ThemecartAdminInfo } from \"@/util/classes\";\r\nimport Funcs from \"@/util/helperFunc\";\r\n\r\n// Register the vuex store.\r\nVue.use(Vuex);\r\n\r\n// The interface of all objects stored.\r\nexport interface AppStates {\r\n target: null | TargetExportProp;\r\n draggingElements: boolean;\r\n currentSongs: SongInfo[];\r\n currentCart: null | CartInfo;\r\n totalResults: number;\r\n resultsPerPage: number;\r\n resultsPerPageSelector: number[];\r\n currentPage: number;\r\n currentCarts: CartInfo[];\r\n themeCarts: ThemecartAdminInfo[];\r\n cartDropDown: DropDownCartItem[];\r\n isAppLoading: boolean;\r\n showThemeCollectionPopup: boolean;\r\n songsDraggable: boolean;\r\n simSearchInput: string;\r\n simSearchError: string;\r\n}\r\n\r\n// The vuex store.\r\nexport default new Vuex.Store({\r\n // Contains the states of the given objects.\r\n state: {\r\n target: null,\r\n draggingElements: false,\r\n currentSongs: [],\r\n currentCart: null,\r\n totalResults: 0,\r\n resultsPerPage: 15,\r\n resultsPerPageSelector: [],\r\n currentPage: 1,\r\n currentCarts: [],\r\n themeCarts: [],\r\n cartDropDown: [],\r\n isAppLoading: false,\r\n showThemeCollectionPopup: false,\r\n songsDraggable: false,\r\n simSearchInput: '',\r\n simSearchError: ''\r\n } as AppStates,\r\n // Contains the getters that return the state of the objects.\r\n // Use this to get values.\r\n getters: {\r\n getSimSearchInput: (state) => state.simSearchInput,\r\n getSimSearchError: (state) => state.simSearchError,\r\n getTarget: (state) => state.target,\r\n areElementsDragged: (state) => state.draggingElements,\r\n getCurrentSongs: (state) => state.currentSongs,\r\n getSongWithId: (state) => (id: number) =>\r\n state.currentSongs.find((x) => x.id == id),\r\n areAllSongsSelected: (state) =>\r\n state.currentSongs.every((s) => s.isSelected),\r\n hideAddButtonOnAll: (state) =>\r\n state.currentSongs.length == 0\r\n ? false\r\n : state.currentSongs.every((s) => s.isInCart),\r\n getCurrentCart: (state) => state.currentCart,\r\n getCurrentCartDropdown: (state) =>\r\n state.currentCart === null\r\n ? null\r\n : { shoppingCartId: state.currentCart.shoppingCartId },\r\n getCurrentCartId: (state) =>\r\n state.currentCart === null ? -1 : state.currentCart.shoppingCartId,\r\n getCurrentCartName: (state) =>\r\n state.currentCart === null ? \"\" : state.currentCart?.name,\r\n getTotalResults: (state) => state.totalResults,\r\n getResultsPerPage: (state) => state.resultsPerPage,\r\n getResPerPageSelector: (state) => state.resultsPerPageSelector,\r\n getCurrentPage: (state) => state.currentPage,\r\n getCarts: (state) => state.currentCarts,\r\n getCartWithId: (state) => (id: number) =>\r\n state.currentCarts.find((x) => x.shoppingCartId == id),\r\n areAllCartsSelected: (state) =>\r\n state.currentCarts.every((s) => s.isSelected),\r\n getThemeCarts: (state) => state.themeCarts,\r\n getThemeCartWithId: (state) => (id: number) =>\r\n state.themeCarts.find((x) => x.id == id),\r\n areAllThemeCartsSelected: (state) =>\r\n state.themeCarts.every((s) => s.isSelected),\r\n getSelectedThemecarts: (state) =>\r\n state.themeCarts.filter((tc) => tc.isSelected),\r\n getCartDropDown: (state) => state.cartDropDown,\r\n getAppLoadingBool: (state) => state.isAppLoading,\r\n getThemeCollectionPopupBool: (state) => state.showThemeCollectionPopup,\r\n getSongsDragableBool: (state) => state.songsDraggable,\r\n },\r\n // These method changes the state.\r\n mutations: {\r\n SET_SIM_SEARCH_Error(state, input: string) {\r\n state.simSearchError = input;\r\n },\r\n SET_SIM_SEARCH_INPUT(state, input: string) {\r\n state.simSearchInput = input;\r\n },\r\n SET_TARGET(state, target: TargetExportProp) {\r\n state.target = target;\r\n },\r\n SET_DRAGGING_ELEMENT(state, isDragging: boolean) {\r\n state.draggingElements = isDragging;\r\n },\r\n SET_CURRENTCART(state, cart: CartInfo | null) {\r\n state.currentCart = cart;\r\n },\r\n SET_CURRENTSONGS(state, songs: SongInfo[]) {\r\n state.currentSongs = songs;\r\n },\r\n SET_ALL_SONGS_SELECTED(state, selected: boolean) {\r\n const cloned = Funcs.cloneObject(state.currentSongs);\r\n cloned.forEach((element: SongInfo) => {\r\n element.isSelected = selected as boolean;\r\n });\r\n\r\n state.currentSongs = cloned;\r\n },\r\n SET_SONG(state, song: SongInfo) {\r\n let i = -1;\r\n for (let index = 0; index < state.currentSongs.length; index++) {\r\n if (state.currentSongs[index].id == song.id) {\r\n i = index;\r\n break;\r\n }\r\n }\r\n\r\n if (i == -1) {\r\n return;\r\n }\r\n\r\n const cloned = Funcs.cloneObject(state.currentSongs);\r\n cloned[i] = song;\r\n state.currentSongs = cloned;\r\n },\r\n SET_TOTALRESULTS(state, res: number) {\r\n state.totalResults = res;\r\n },\r\n SET_RESULTS_PER_PAGE(state, res: number) {\r\n state.resultsPerPage = res;\r\n },\r\n SET_RESULT_PER_PAGE_SELECTOR(state, res: number[]) {\r\n state.resultsPerPageSelector = res;\r\n },\r\n SET_CURRENT_PAGE(state, res: number) {\r\n state.currentPage = res;\r\n },\r\n MOVE_SONGS(state, indexes: [number, number]) {\r\n const cloned: SongInfo[] = Funcs.cloneObject(\r\n state.currentSongs\r\n );\r\n const source = cloned[indexes[0]];\r\n\r\n cloned.splice(indexes[0], 1);\r\n cloned.splice(indexes[1], 0, source);\r\n\r\n state.currentSongs = cloned;\r\n },\r\n SET_CARTS(state, carts: CartInfo[]) {\r\n state.currentCarts = carts;\r\n },\r\n SET_ALL_CARTS_SELECTED(state, selected: boolean) {\r\n const cloned = Funcs.cloneObject(state.currentCarts);\r\n cloned.forEach((element: CartInfo) => {\r\n element.isSelected = selected;\r\n });\r\n\r\n state.currentCarts = cloned;\r\n },\r\n SET_CART(state, cart: CartInfo) {\r\n let i = -1;\r\n\r\n for (let index = 0; index < state.currentCarts.length; index++) {\r\n if (state.currentCarts[index].shoppingCartId == cart.shoppingCartId) {\r\n i = index;\r\n break;\r\n }\r\n }\r\n\r\n if (i == -1) {\r\n return;\r\n }\r\n\r\n const cloned = Funcs.cloneObject(state.currentCarts);\r\n cloned[i] = cart;\r\n state.currentCarts = cloned;\r\n },\r\n SET_CART_DROPDOWN(state, elements: DropDownCartItem[]) {\r\n state.cartDropDown = elements;\r\n },\r\n SET_THEME_CARTS(state, carts: ThemecartAdminInfo[]) {\r\n state.themeCarts = carts;\r\n },\r\n SET_THEME_CART(state, cart: ThemecartAdminInfo) {\r\n let i = -1;\r\n\r\n for (let index = 0; index < state.themeCarts.length; index++) {\r\n if (state.themeCarts[index].id == cart.id) {\r\n i = index;\r\n break;\r\n }\r\n }\r\n\r\n if (i == -1) {\r\n return;\r\n }\r\n\r\n const cloned = Funcs.cloneObject(state.themeCarts);\r\n cloned[i] = cart;\r\n state.themeCarts = cloned;\r\n },\r\n SET_ALL_THEME_CARTS_SELECTED(state, selected: boolean) {\r\n const cloned = Funcs.cloneObject(state.themeCarts);\r\n cloned.forEach((element: ThemecartAdminInfo) => {\r\n element.isSelected = selected;\r\n });\r\n\r\n state.themeCarts = cloned;\r\n },\r\n SET_APP_LOADING_BOOL(state, isLoading: boolean) {\r\n state.isAppLoading = isLoading;\r\n },\r\n SET_THEMEPOPUP_BOOL(state, show: boolean) {\r\n state.showThemeCollectionPopup = show;\r\n },\r\n SET_SONGS_DRAGABLE(state, draggable: boolean) {\r\n state.songsDraggable = draggable;\r\n },\r\n },\r\n // These method are called to access the mutations and thus change the vuex storage from outside of the file.\r\n actions: {\r\n setSimSearchError({ commit }, input: string) {\r\n commit(\"SET_SIM_SEARCH_Error\", input);\r\n },\r\n setSimSearchInput({ commit }, input: string) {\r\n commit(\"SET_SIM_SEARCH_INPUT\", input);\r\n },\r\n setTarget({ commit }, target: TargetExportProp) {\r\n commit(\"SET_TARGET\", target);\r\n },\r\n setDragging({ commit }, isDragging: boolean) {\r\n commit(\"SET_DRAGGING_ELEMENT\", isDragging);\r\n },\r\n setCurrentCart({ commit }, cart: CartInfo | null) {\r\n commit(\"SET_CURRENTCART\", cart);\r\n },\r\n setTotalResults({ commit }, totalResult: number) {\r\n if (totalResult < 0) {\r\n throw new Error(\"TotalResults can't be smaller than 0.\");\r\n }\r\n\r\n commit(\"SET_TOTALRESULTS\", totalResult);\r\n },\r\n setCurrentSongs({ commit }, songs: SongInfo[]) {\r\n commit(\"SET_CURRENTSONGS\", songs);\r\n },\r\n setSongsSelected({ commit }, selected: boolean) {\r\n commit(\"SET_ALL_SONGS_SELECTED\", selected);\r\n },\r\n setSongInSongs({ commit }, song: SongInfo) {\r\n commit(\"SET_SONG\", song);\r\n },\r\n setResultsPerPage({ commit }, res: number) {\r\n if (res < 0) {\r\n throw new Error(\"ResultsPerPage can't be smaller than 0.\");\r\n }\r\n\r\n commit(\"SET_RESULTS_PER_PAGE\", res);\r\n },\r\n setResultsPerPageSelector({ commit }, res: number[]) {\r\n commit(\"SET_RESULT_PER_PAGE_SELECTOR\", res);\r\n },\r\n setCurrentPage({ commit }, res: number) {\r\n if (res < 1) {\r\n throw new Error(\"CurrentPage can't be smaller than 1.\");\r\n }\r\n\r\n commit(\"SET_CURRENT_PAGE\", res);\r\n },\r\n moveItemPos({ commit }, indexes: [number, number]) {\r\n indexes.forEach((element) => {\r\n if (element < 0) {\r\n throw new Error(\"Index can't be smaller than 0.\");\r\n }\r\n });\r\n\r\n commit(\"MOVE_SONGS\", indexes);\r\n },\r\n setCurrentCarts({ commit }, carts: CartInfo[]) {\r\n commit(\"SET_CARTS\", carts);\r\n },\r\n setCartsSelected({ commit }, selected: boolean) {\r\n commit(\"SET_ALL_CARTS_SELECTED\", selected);\r\n },\r\n setCartInCarts({ commit }, cart: CartInfo) {\r\n commit(\"SET_CART\", cart);\r\n },\r\n setCartDropdown({ commit }, cartDropDown: DropDownCartItem[]) {\r\n commit(\"SET_CART_DROPDOWN\", cartDropDown);\r\n },\r\n setThemeCarts({ commit }, themecarts: ThemecartAdminInfo[]) {\r\n commit(\"SET_THEME_CARTS\", themecarts);\r\n },\r\n setCartInThemeCarts({ commit }, themecart: ThemecartAdminInfo) {\r\n commit(\"SET_THEME_CART\", themecart);\r\n },\r\n setAllThemeCartsSelected({ commit }, selected: boolean) {\r\n commit(\"SET_ALL_THEME_CARTS_SELECTED\", selected);\r\n },\r\n setAppLoadingBool({ commit }, isLoading: boolean) {\r\n commit(\"SET_APP_LOADING_BOOL\", isLoading);\r\n },\r\n setThemePopupBool({ commit }, show: boolean) {\r\n commit(\"SET_THEMEPOPUP_BOOL\", show);\r\n },\r\n setSongsDraggableBool({ commit }, draggable: boolean) {\r\n commit(\"SET_SONGS_DRAGABLE\", draggable);\r\n },\r\n resetAll({ commit }) {\r\n commit(\"SET_CURRENTCART\", null);\r\n },\r\n },\r\n modules: {},\r\n});\r\n","import { routeNames, CREDENTIAL_COOKIE_IDENTIFIER_KEY } from \"@/util/constants\";\r\nimport Vue from \"vue\";\r\nimport VueRouter, { Route, RouteConfig } from \"vue-router\";\r\nimport Cookies from \"js-cookie\";\r\nimport { CredentialCookie } from \"@/util/classes\";\r\nimport store from \"../store/index\";\r\n\r\n// Register the router in the app.\r\nVue.use(VueRouter);\r\n\r\n// This constant holds all possible routes of the frontend.\r\nconst routes: Array = [\r\n {\r\n path: \"/shoppingcart/index\",\r\n name: routeNames.cartIndex,\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Cart.vue\"),\r\n props: (route) => ({ id: route.query.id }),\r\n meta: {\r\n requiresAuth: true,\r\n },\r\n },\r\n {\r\n path: \"/shoppingcart/management\",\r\n name: routeNames.cartsManagement,\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Carts.vue\"),\r\n meta: {\r\n requiresAuth: true,\r\n },\r\n },\r\n {\r\n path: \"/shoppingcart/public/:guid\",\r\n name: routeNames.publicCart,\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/PublicCart.vue\"),\r\n props: true,\r\n },\r\n {\r\n path: \"/shoppingcart/targetexport\",\r\n name: routeNames.targetExport,\r\n component: () => import(\"../views/TargetExport.vue\"),\r\n meta: {\r\n requiresAuth: true,\r\n },\r\n },\r\n {\r\n path: \"/song/lucenesearch\",\r\n name: routeNames.luceneSearch,\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/MusicSearchLucene.vue\"),\r\n meta: {\r\n requiresMvUser: true,\r\n },\r\n },\r\n {\r\n path: \"/song/index\",\r\n name: routeNames.musicIndex,\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/MusicSearch.vue\"),\r\n props: (route) => ({ lucenequery: route.query.lucenequery, simKokoId: route.query.simKokoId }),\r\n },\r\n {\r\n path: \"/song/index/popup\",\r\n name: routeNames.homeWithOpenPopup,\r\n redirect: (to) => {\r\n store.dispatch(\"setThemePopupBool\", true);\r\n return { path: \"/song/index\" };\r\n },\r\n },\r\n // {\r\n // path: \"/song/similarity-search\",\r\n // name: routeNames.similaritySearch,\r\n // component: () => import(\"../views/AdminSimilaritySearchView.vue\"),\r\n\r\n // },\r\n {\r\n path: \"/identity/login\",\r\n name: routeNames.login,\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Login.vue\"),\r\n },\r\n {\r\n path: \"/identity/logout\",\r\n name: routeNames.logout,\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Logout.vue\"),\r\n meta: {\r\n requiresAuth: true,\r\n },\r\n },\r\n {\r\n path: \"/identity/register\",\r\n name: routeNames.register,\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Register.vue\"),\r\n meta: {\r\n requiresAnon: true,\r\n },\r\n },\r\n {\r\n path: \"/identity/resetpassword/:id/:guid\",\r\n name: routeNames.resetPassword,\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/ResetPassword.vue\"),\r\n props: true,\r\n meta: {\r\n requiresAnon: true,\r\n },\r\n },\r\n {\r\n path: \"/identity/resetpassword\",\r\n name: routeNames.resetPasswordRequest,\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/ResetPasswordReq.vue\"),\r\n },\r\n {\r\n path: \"/account/edit\",\r\n name: routeNames.editAccount,\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Account.vue\"),\r\n meta: {\r\n requiresAuth: true,\r\n },\r\n },\r\n {\r\n path: \"/account/verify/:id/:guid\",\r\n name: routeNames.verifyAccount,\r\n props: true,\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Verify.vue\"),\r\n },\r\n {\r\n path: \"/account/emailverify/:id/:guid\",\r\n name: routeNames.verifyEmail,\r\n props: true,\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Verify.vue\"),\r\n },\r\n {\r\n path: \"/error/general\",\r\n name: routeNames.generalError,\r\n props: { errorCode: \"0\" },\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Error.vue\"),\r\n },\r\n {\r\n path: \"/error/500\",\r\n name: routeNames.internalError,\r\n props: { errorCode: \"1\" },\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Error.vue\"),\r\n },\r\n {\r\n path: \"/error/404\",\r\n name: routeNames.notFoundError,\r\n props: { errorCode: \"3\" },\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Error.vue\"),\r\n },\r\n {\r\n path: \"/error/notimplemented\",\r\n name: routeNames.notImplementedError,\r\n props: { errorCode: \"4\" },\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Error.vue\"),\r\n },\r\n {\r\n path: \"/error/emailverify\",\r\n name: routeNames.emailVerifyError,\r\n props: { errorCode: \"5\" },\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Error.vue\"),\r\n },\r\n {\r\n path: \"/error/verify\",\r\n name: routeNames.userVerifyError,\r\n props: { errorCode: \"5\" },\r\n component: () =>\r\n import(/* webpackChunkName: \"about\" */ \"../views/Error.vue\"),\r\n },\r\n {\r\n path: \"/info/emailupdate\",\r\n name: routeNames.emailUpdateInfo,\r\n props: { code: \"1\" },\r\n component: () => import(\"../views/GenericInfo.vue\"),\r\n },\r\n {\r\n path: \"/info/emailverify\",\r\n name: routeNames.emailVerifyInfo,\r\n props: { code: \"2\" },\r\n component: () => import(\"../views/GenericInfo.vue\"),\r\n },\r\n {\r\n path: \"/info/emailchange\",\r\n name: routeNames.emailChangeInfo,\r\n props: { code: \"3\" },\r\n component: () => import(\"../views/GenericInfo.vue\"),\r\n },\r\n {\r\n path: \"/info/verify\",\r\n name: routeNames.verifyUserInfo,\r\n props: { code: \"4\" },\r\n component: () => import(\"../views/GenericInfo.vue\"),\r\n },\r\n {\r\n path: \"/admin/collections\",\r\n name: routeNames.adminView,\r\n component: () => import(\"../views/AdminThemeCartsView.vue\"),\r\n meta: {\r\n requiresMvUser: true,\r\n },\r\n },\r\n {\r\n path: \"/admin/export\",\r\n name: routeNames.adminExportView,\r\n component: () => import(\"../views/AdminExcelView.vue\"),\r\n meta: {\r\n requiresMvUser: true,\r\n },\r\n },\r\n {\r\n path: \"/admin/maintainance\",\r\n name: routeNames.adminMaintainanceView,\r\n component: () => import(\"../views/AdminMaintainanceView.vue\"),\r\n meta: {\r\n requiresMvUser: true,\r\n },\r\n },\r\n {\r\n path: \"/admin/statistics\",\r\n name: routeNames.adminStatisticsView,\r\n component: () => import(\"../views/AdminStatisticView.vue\"),\r\n meta: {\r\n requiresMvUser: true,\r\n },\r\n },\r\n {\r\n path: \"/admin/users\",\r\n name: routeNames.adminUsersView,\r\n component: () => import(\"../views/AdminUserView.vue\"),\r\n meta: {\r\n requiresMvUser: true,\r\n },\r\n },\r\n {\r\n path: \"/admin/dropdowns\",\r\n name: routeNames.adminDropdownView,\r\n component: () => import(\"../views/AdminDefaultDropdownView.vue\"),\r\n meta: {\r\n requiresMvUser: true,\r\n },\r\n },\r\n // {\r\n // path: \"/admin/similarity-search\",\r\n // name: routeNames.similaritySearch,\r\n // component: () => import(\"../views/AdminSimilaritySearchView.vue\"),\r\n // meta: {\r\n // requiresMvUser: true,\r\n // },\r\n // },\r\n {\r\n path: \"/\",\r\n name: routeNames.home,\r\n redirect: \"/song/index\",\r\n },\r\n {\r\n path: \"*\",\r\n redirect: \"/error/404\",\r\n },\r\n];\r\n\r\nconst router = new VueRouter({\r\n mode: \"history\", // History mode vs hash mode\r\n routes,\r\n});\r\n\r\n// This method checks if the user is logged in, before routing.\r\nconst requiresAuthGuard = (to: Route, from: Route, next: any): boolean => {\r\n if (to.matched.some((record) => record.meta.requiresAuth)) {\r\n const isLoggedIn =\r\n Cookies.get(CREDENTIAL_COOKIE_IDENTIFIER_KEY) != undefined;\r\n if (!isLoggedIn) {\r\n next({\r\n name: routeNames.login,\r\n query: { redirect: to.fullPath },\r\n });\r\n } else {\r\n next();\r\n }\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\n// This method checks if the user is a mv employee.\r\nconst requiresMvUserGuard = (to: Route, from: Route, next: any): boolean => {\r\n if (to.matched.some((record) => record.meta.requiresMvUser)) {\r\n const credObj = Cookies.get(CREDENTIAL_COOKIE_IDENTIFIER_KEY);\r\n if (credObj == undefined) {\r\n next({\r\n name: routeNames.login,\r\n query: { redirect: to.fullPath },\r\n });\r\n }\r\n\r\n const credObj2 = JSON.parse(\r\n Cookies.get(CREDENTIAL_COOKIE_IDENTIFIER_KEY)!\r\n ) as CredentialCookie;\r\n if (!credObj2.isMVuser) {\r\n next({\r\n name: routeNames.login,\r\n query: { redirect: to.fullPath },\r\n });\r\n } else {\r\n next();\r\n }\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\n// This method checks if the user really is unauthenticated.\r\nconst requiresAnonymous = (to: Route, from: Route, next: any): boolean => {\r\n if (to.matched.some((record) => record.meta.requiresAnon)) {\r\n const credObj = Cookies.get(CREDENTIAL_COOKIE_IDENTIFIER_KEY);\r\n if (credObj == undefined) {\r\n next();\r\n } else {\r\n next({\r\n name: routeNames.login,\r\n });\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\n// This method contains all the guards.\r\nrouter.beforeEach(async (to, from, next) => {\r\n if (requiresAuthGuard(to, from, next)) {\r\n return;\r\n }\r\n if (requiresMvUserGuard(to, from, next)) {\r\n return;\r\n }\r\n if (requiresAnonymous(to, from, next)) {\r\n return;\r\n }\r\n next(); // make sure to always call next()!\r\n});\r\n\r\nexport default router;\r\n","import Vue from \"vue\";\r\nimport App from \"./App.vue\";\r\nimport router from \"./router/index\";\r\nimport store from \"./store/index\";\r\nimport i18n from \"@/plugins/i18n\";\r\nimport PortalVue from \"portal-vue\";\r\nimport { BootstrapVue } from \"bootstrap-vue\";\r\nimport VueToast from \"vue-toast-notification\";\r\nimport VueApexCharts from \"vue-apexcharts\";\r\nimport VueMeta from \"vue-meta\";\r\nimport vSelect from \"vue-select\";\r\nimport DateRangePicker from 'vue2-daterange-picker';\r\n\r\n\r\n// Adding custom css for the components.\r\nimport \"bootstrap/dist/css/bootstrap.css\";\r\nimport \"bootstrap-vue/dist/bootstrap-vue.css\";\r\nimport \"@/scss/global.scss\";\r\nimport \"vue-toast-notification/dist/theme-default.css\";\r\nimport \"bootstrap-icons/font/bootstrap-icons.css\";\r\nimport \"vue-select/dist/vue-select.css\";\r\nimport 'vue2-daterange-picker/dist/vue2-daterange-picker.css'\r\n\r\n// Adding the website routes.\r\nimport { routeNames } from \"./util/constants\";\r\nimport { IRoutesNames } from \"./util/interfaces\";\r\n\r\nVue.use(VueMeta);\r\nVue.use(PortalVue);\r\nVue.use(BootstrapVue);\r\nVue.use(VueToast);\r\nVue.use(VueApexCharts);\r\nVue.use(DateRangePicker);\r\nVue.component(\"ApexchartVue\", VueApexCharts);\r\nVue.component(\"VSelect\", vSelect);\r\nVue.component(\"VDate\", DateRangePicker);\r\n\r\nVue.filter('date', function (val: string) {\r\n\r\n const date = new Date(val);\r\n\r\n return date.toLocaleString();\r\n\r\n\r\n});\r\n\r\n// Adding Routenames to the Vue prototype\r\ndeclare module \"vue/types/vue\" {\r\n interface Vue {\r\n $routesNames: IRoutesNames;\r\n $window: Window;\r\n }\r\n}\r\n\r\nVue.prototype.$routesNames = routeNames;\r\n\r\nVue.config.productionTip = false;\r\n\r\nVue.prototype.$window = window;\r\n\r\nnew Vue({\r\n router,\r\n store,\r\n i18n,\r\n render: (h) => h(App),\r\n}).$mount(\"#app\");\r\n","import Vue from \"vue\";\r\nimport VueI18n from \"vue-i18n\";\r\n\r\n// Register i18n in the vue app.\r\nVue.use(VueI18n);\r\n\r\n// The localized messages.\r\nconst messages = {\r\n de: {\r\n testMsg: \"Test\",\r\n navLogin: \"Login\",\r\n navLogout: \"Logout\",\r\n navRegister: \"Registrieren\",\r\n navAccount: \"Benutzerkonto verwalten\",\r\n navDropDownTitleMusikverlag: \"Musikverlag\",\r\n navDropDownTitleMusiclibrary: \"Musiclibrary\",\r\n navDropDownTitleShoppingcart: \"Sammelkörbe\",\r\n navDropDownTitleLabel: \"Label & Lizenz\",\r\n navDropDownTitleHelp: \"Hilfe\",\r\n navDropDownTitleAdmin: \"Admin\",\r\n searchFormTitleMusicStyle: \"Musikstil\",\r\n searchFormTitleEmotion: \"Emotion/Stimmung\",\r\n searchFormTitleOccasion: \"Musik für...\",\r\n searchFormTitleInstrument: \"Instrument\",\r\n searchFormTitleTimeM: \"Min.\",\r\n searchFormTitleTimeS: \"Sek.\",\r\n searchFormTitleSearch: \"Volltextsuche\",\r\n searchFormSimSearch: \"Ähnlichkeitssuche mit URL (copy/paste von z.B. Youtube-Link) oder ArchivNr.\",\r\n searchFormFileSearch: \"Ähnlichkeitssuche mit Audio-Datei\",\r\n similaritySearch: \"Ähnlichkeitssuche\",\r\n searchCart: \"Sammelkorb suchen\",\r\n musicCollection: \"MUSIKSAMMLUNG\",\r\n searchSongInCart: \"Tracks im Sammelkorb suchen\",\r\n searchFormResetButton: \"Zurücksetzen\",\r\n searchFormSubmitButton: \"Suchen\",\r\n searchFormCurrentCart: \"Aktueller Sammelkorb\",\r\n searchFormLabelMinDuration: \"Dauer von\",\r\n searchFormLabelMaxDuration: \"Dauer bis\",\r\n searchFormEmployeeSearchLabel: \"Zur Such-Ansicht für MV-Mitarbeiter\",\r\n searchFormShowMask: \"Suche anzeigen\",\r\n loginViewHeader: \"Login\",\r\n loginViewEmailLabel: \"E-MAIL\",\r\n loginViewPasswordLabel: \"Kennwort\",\r\n loginViewLoginButton: \"Login\",\r\n loginViewResetPasswordText: \"Kennwort vergessen?\",\r\n loginViewResetPasswordButton: \"Jetzt zurücksetzen!\",\r\n loginViewNotRegisteredText: \"Noch nicht registriert?\",\r\n loginViewNotRegisteredTextAnchor: \"Jetzt registrieren!\",\r\n resetPasswordViewHeader: \"Kennwort zurücksetzen\",\r\n resetPasswordViewInfo:\r\n \"Um Ihr Kennwort zurückzusetzen, geben Sie hier Ihre Email-Adresse ein.\",\r\n registerViewHeader: \"Registrieren\",\r\n registerViewRepeatEmail: \"E-MAIL wiederholen\",\r\n registerViewRepeatPassword: \"Kennwort wiederholen\",\r\n registerViewTitleLabel: \"Titel\",\r\n registerViewNameLabel: \"Vorname\",\r\n registerViewSurNameLabel: \"Nachname\",\r\n registerViewCompanyLabel: \"Unternehmen\",\r\n registerViewJobLabel: \"Tätigkeit\",\r\n registerViewPhoneLabel: \"Telefonnummer\",\r\n registerViewInfoText:\r\n \"Hier können Sie sich als ORF-Produktionspartner, ORF-Gestalter oder Filmproduzent zur Nutzung der Musiclibrary registrieren. Als Nutzer der Musiclibrary können Sie Musiktitel speichern, downloaden, und gem. den {terms} nutzen. Die mit einem Stern gekennzeichneten Felder sind Pflichtfelder. Nach dem Senden der Daten wird Ihr Account von uns geprüft und schnellstmöglich freigeschalten. Sie erhalten eine Bestätigung an die angegebene E-Mail-Adresse. \",\r\n registerViewSubmitBtn: \"Registrieren\",\r\n termsOfUseAnchor: \"Nutzungsbedingungen/AGB\",\r\n findHere: \"hier\",\r\n registerViewCheckInfoText:\r\n \"Ich habe die {terms} gelesen und akzeptiert und stimme der Speicherung und Verarbeitung meiner Daten für die Registrierung bzw. Nutzung der ORF-Enterprise Musiclibrary (z.B. für den Download von Audio-Dateien) zu. Informationen gemäß Art. 13 DSGVO finden Sie {here}.\",\r\n navbarGreeting: \"Hallo, \",\r\n tHead0: \"Titel/ Komponist/ Dauer\",\r\n tHead1: \"Stichworte\",\r\n archiveNumber: \"ArchivNr.\",\r\n songItemAkmData: \"AKM-Daten\",\r\n songItemComposer: \"Komponist\",\r\n songItemEditor: \"Bearbeiter\",\r\n songItemInterpret: \"Interpret\",\r\n songItemTexter: \"Texter\",\r\n songItemLabel: \"Verlag / Label\",\r\n songItemDuration: \"Dauer\",\r\n songItemExtraData: \"Sonstige Daten\",\r\n songItemArchiveNumber: \"ArchivNr.\",\r\n songItemAlbumTitle: \"Albumtitel\",\r\n songItemGenre: \"Genre\",\r\n songItemInstruments: \"Instrumente\",\r\n songItemKeywords: \"Stichworte\",\r\n songItemRecordingYear: \"Aufnahmejahr\",\r\n addToCart: \"In Sammelkorb hinzufügen\",\r\n deleteFromCart: \"Aus Sammelkorb entfernen\",\r\n mp3DownloadLabel: \"Download MP3\",\r\n wavDownloadLabel: \"Download WAV\",\r\n itemsPerPage: \"Tracks pro Seite\",\r\n createCartModalTitle: \"Neuen Sammelkorb anlegen\",\r\n createCartModalName: \"Name\",\r\n createCartModalDefinition: \"Beschreibung\",\r\n cancelButton: \"Abbrechen\",\r\n createButton: \"Erstellen\",\r\n createCartSuccessMSG: \"Neuer Sammelkorb erfolgreich erstellt!\",\r\n copyCartSuccessMSG: \"Sammelkorb erfolgreich kopiert!\",\r\n editCartSuccessMSG: \"Sammelkorb erfolgreich gespeichert!\",\r\n createThemecartModalTitle: \"Themensammlung erstellen\",\r\n createThemecartModalOnlyPngText:\r\n \"Es können nur Dateien mit der Endung .png hochgeladen werden!\",\r\n editThemecartModalTitle: \"Themensammlung bearbeiten\",\r\n createThemecartSuccessMSG: \"Neue Themensammlung erfolgreich erstellt!\",\r\n editThemecartSuccessMSG: \"Themensammlung erfolgreich gespeichert!\",\r\n // editThemecartModalCoverUploadConflict:\r\n // \"Eine Datei mit dem selben Namen befindet sich bereits auf dem Server!\",\r\n // editThemecartModalCoverUploadSuccess: \"Datei erfolgreich hochgeladen.\",\r\n themecartModalCoverSelectorEmpty: \"Cover wählen\",\r\n noResults: \"Keine Treffer\",\r\n noResultsSearch: \"Versuchen Sie das Suchwort unter \\\"\\\" zu setzten um genauere Ergebnisse zu erzielen\",\r\n dataIsLoading: \"Daten werden geladen\",\r\n songSearchGreetings1: \"Die ORF-Musiclibrary - \",\r\n allSongs: \"Insgesamt\",\r\n luceneSearchFormTitle: \"Lucene Suchanleitung\",\r\n luceneSearchMSG:\r\n 'Dokumentation für die Lucene-Querysyntax finden Sie {here}. {end} Diese Suche ist unterschiedlich zu der Suche von normalen Benutzern, hier wird Ihr Suchtext direkt an Lucene (und unbearbeitet) an das Lucene-Framework weitergegeben. {end} Beispiel: Sie geben in das Suchfeld den Text \"Winter\" ein. Lucene wird nun in ALLEN Feldern (siehe Tabelle) nach exakten Treffern suchen (z.B. Lucene würde etwas finden wenn \"Winter\" in den Schlüsselwörtern eines Tracks vorkommt, allerdings nicht wenn \"Winterland\" vorkommt ). Wollen Sie ausschließlich nach \"Winter\" nur in den Schlüsselwörtern suchen, geben Sie \"Keywords:Winter\" in das Suchfeld ein. ',\r\n luceneSearchTableFieldname: \"Lucene-Feldname\",\r\n luceneSearchTableIndustryNumber: \"Industrienummer\",\r\n luceneSearchTableIndustryTrackName: \"Name des Tracks\",\r\n luceneSearchTableIndustryAlbum: \"Album\",\r\n luceneSearchTableIndustryGenre: \"Genre\",\r\n luceneSearchTableIndustryInstrument: \"Klangkörper\",\r\n luceneSearchTableIndustryKeywords: \"Schlüsselwörter\",\r\n luceneSearchTableIndustryArtists: \"Künstler, Komponisten, Bearbeiter\",\r\n copy: \"Kopieren\",\r\n edit: \"Bearbeiten\",\r\n delete: \"Löschen\",\r\n carts: \"Sammelkörbe\",\r\n tracks: \"Tracks\",\r\n similar: \"Ähnliche\",\r\n collections: \"Themensammlungen\",\r\n cartsManagement: \"Sammelkorb anlegen\",\r\n cartsManagementTitle: \"Verwaltung\",\r\n cartsManagementLoadCart: \"Sammelkorb laden\",\r\n cartsManagementCreated: \"Erstellt am\",\r\n cartsManagementTitleCount: \"Anzahl Titel\",\r\n cartsManagementTransferSongs: \"Tracks kopieren\",\r\n cartsManagementTransferSongsModalTitle: \"Ziel Sammelkorb auswählen\",\r\n cartsManagementTransferSongsSuccessMSG:\r\n \"Sammelkörbe wurden erfolgreich angepasst\",\r\n cartsManagementEmptyTitle: \"KEINER VORHANDEN\",\r\n save: \"Speichern\",\r\n mode: \"Modi\",\r\n export: \"Exportieren\",\r\n emptyCartMSG: \"Diesem Sammelkorb wurden noch keine Tracks hinzugefügt.\",\r\n emptyCartSearchMSG: \"Keine Tracks gefunden!\",\r\n editAccountTitle: \"Userdaten verwalten\",\r\n editAccountMsg: \"Hier können Sie Ihre Daten ändern.\",\r\n editAccountTabPersonalData: \"Personendaten\",\r\n editAccountTabEmail: \"Email\",\r\n editAccountSubmitBtn: \"Ändern\",\r\n errorEmailVerify: \"Die Email Addressen müssen identisch sein!\",\r\n errorPasswordVerify: \"Die Kennwörter müssen identisch sein!\",\r\n errorPasswordRegex:\r\n \"Dieses Kennwort entspricht nicht unseren Richtlinien. Bitte stellen Sie sicher, dass das Kennwort mindestens 6 Zeichen lang ist. Mindestens ein Groß- und Kleinbuchstabe, eine Ziffer (0-9) als auch ein Sonderzeichen (.*[#$^+=!*()@%&) müssen in dem Kennwort vorhanden sein.\",\r\n errorEmailEmpty: \"Sie müssen eine gültige Email Addresse angeben!\",\r\n errorMaxChar: \"Das Feld darf nur 255 Charaktere enthalten!\",\r\n errorMaxChar128: \"Das Feld darf nur 128 Charaktere enthalten!\",\r\n errorMaxChar512: \"Das Feld darf nur 512 Charaktere enthalten!\",\r\n errorMaxChar2048: \"Das Feld darf nur 2048 Charaktere enthalten!\",\r\n errorFieldEmpty: \"Sie müssen dieses Feld ausfüllen!\",\r\n errorCel: \"Sie müssen eine valide Telefonnummer angeben!\",\r\n errorTermsCheckbox: \"Sie müssen die AGB akzeptieren um fortzufahren.\",\r\n errorDatePeriodIsInvalid:\r\n \"Das Start Datum muss kleiner sein als das End Datum!\",\r\n errorDatePeriodEmpty: \"Die Datum Felder müssen ausgefüllt sein.\",\r\n errorDatePeriodMinValueStart:\r\n \"Das Start Datum muss größer gleich dem heutigen Datum sein!\",\r\n errorDatePeriodMinValueEnd:\r\n \"Das End Datum muss größer gleich dem heutigen Datum sein!\",\r\n errorDurationIsInvalid: \"Die Dauer darf nicht negativ sein\",\r\n errorMaxDurationIsInvalid:\r\n \"Die Minimum Dauer muss kleiner sein als die Maximal Dauer\",\r\n errorMinDurationIsInvalid:\r\n \"Die Maximal Dauer muss größer sein als die Minimal Dauer\",\r\n themecartIsNull: \"Unbekannter Sammelkorb\",\r\n perPage: \"pro Seite\",\r\n userExportModalTitle1: \"Sammelkorb\",\r\n userExportModalTitle2:\r\n \"teilen mit (REGISTRIERTE EMPFÄNGER SUCHEN, MEHRFACHAUSWAHL MÖGLICH):\",\r\n userExportModalResults: \"Resultate\",\r\n userExportModalSelection: \"Empfängerliste\",\r\n userExportModalSubmit: \"Teilen\",\r\n userExportModalSuccessMSG:\r\n \"Sammelkorb wurde erfolgreich mit den ausgewählten Usern geteilt.\",\r\n targetExportModalTitle: \"Zielauslieferung\",\r\n targetExportModalMsg:\r\n \"Bitte wählen sie aus, wohin sie den Sammelkorb {cart} ausliefern möchten.\",\r\n targetExportMSG:\r\n \"Ihr Auftrag zur Zielauslieferung wird bearbeitet, bitte schließen Sie dieses Fenster erst, wenn alle Tracks ausgeliefert wurden.\",\r\n productionNumber: \"Produktions-Nr.\",\r\n target: \"Ziel\",\r\n targetExportSuccessMSG:\r\n \"Alle Tracks erfolgreich ausgeliefert! Sie können diese Seite nun schließen!\",\r\n targetExportResult: \"Resultat\",\r\n targetExportModalSubmit: \"Ausliefern\",\r\n publicLinkModalTitle: \"ÖFFENTLICHER LINK\",\r\n publicLinkModalMSG:\r\n \"Dies ist ein öffentlicher Link für Ihren Sammelkorb {cart}, sie können diesen teilen und versenden. Auch unregistrierte Benutzer haben Einblick darauf.\",\r\n copyScsTxt: \"In die Zwischenablage kopiert!\",\r\n resetPasswordTitle: \"Kennwort zurücksetzen\",\r\n cartEditModalTitle: \"Sammelkorb bearbeiten\",\r\n change: \"Ändern\",\r\n deleteCartModalMsg: \"Wollen Sie wirklich den Sammelkorb {cart} löschen?\",\r\n deleteCartsModalMsg:\r\n \"Wollen Sie wirklich die ausgewählten Sammelkörbe löschen?\",\r\n deleteSongModalTitle: \"Track aus Sammelkorb löschen\",\r\n deleteSongsModalTitle: \"Tracks aus Sammelkorb löschen\",\r\n deleteSongModalMsg:\r\n \"Wollen Sie wirklich den Track {song} aus den Sammelkorb {cart} entfernen?\",\r\n deleteSongsModalMsg:\r\n \"Wollen Sie wirklich die ausgewählten Tracks aus den Sammelkorb {cart} entfernen?\",\r\n noCartsInSelect: \"Keine Sammelkörbe vorhanden\",\r\n deleteModalTitle: \"Sammelkorb löschen\",\r\n deleteCartsModalTitle: \"Sammelkörbe löschen\",\r\n deleteSongSuccessMSG: \"Track erfolgreich aus Sammelkorb entfernt!\",\r\n deleteSongsSuccessMSG: \"Tracks erfolgreich aus Sammelkorb entfernt!\",\r\n deleteCartSuccessMSG: \"Sammelkorb erfolgreich gelöscht!\",\r\n deleteCartsSuccessMSG: \"Sammelkörbe erfolgreich gelöscht!\",\r\n deleteThemecartModalTitle: \"Themensammlung löschen\",\r\n deleteThemecartModalMSG:\r\n \"Wollen sie wirklich die Themensammlung {themecart} löschen?\",\r\n deleteThemecartSuccessMSG: \"Themensammlung erfolgreich gelöscht!\",\r\n deleteThemecartsSuccessMSG: \"Themensammlungen erfolgreich gelöscht!\",\r\n deleteThemecartsModalTitle: \"Themensammlungen löschen\",\r\n deleteThemecartsModalMSG:\r\n \"Wollen sie wirklich folgende Themensammlungen löschen?\",\r\n deleteUserModalTitle: \"Benutzer löschen\",\r\n deleteUserModalMSG: \"Wollen sie wirklich den Benutzer {user} löschen?\",\r\n deleteUserModalSuccessMSG: \"Benutzer erfolgreich gelöscht!\",\r\n error_500_title: \"Interner Server Fehler\",\r\n error_general_title: \"Ups, etwas ist schief gegangen!\",\r\n error_internetExplorerNotSupported:\r\n \"Lieber Benutzer! Ihr verwendeter Browser wird leider nicht mehr unterstützt. Bitte benutzen Sie entweder Firefox, Microsoft Edge oder Google Chrome. Vielen Dank für Ihr Verständnis!\",\r\n error_internetExplorerNotSupported_title:\r\n \"Internet Explorer wird nicht mehr unterstützt\",\r\n // error_mailRecipientUnavailable:\r\n // \"Wir konnten Ihre neue Email Adresse leider nicht erreichen. Bitte überprüfen Sie Ihre Eingabe!\",\r\n found: \"Gefunden\",\r\n error_notFound_title:\r\n \"Leider konnten wir die Seite nicht finden, die Sie gesucht haben.\",\r\n error_notFound_message1: \"Was könnte das verursacht haben\",\r\n error_notFound_message2:\r\n \"Vielleicht haben wir eine Seite entfernt, als wir diese Webapplikation neu entwickelt haben.\",\r\n error_notFound_message3:\r\n \"Oder der Link den Sie geklickt haben könnte alt sein und funktioniert nicht mehr.\",\r\n error_notFound_message4:\r\n \"Oder vielleicht haben Sie die falsche URL in ihren Browser eingegeben.\",\r\n error_notImplemented_msg:\r\n \"Lieber Benutzer, die aufgerufene Funktion (oder ein Teil davon) befindet sich noch in Entwicklung. Bitte probieren Sie diese zu einen späteren Zeitpunkt wieder. Danke für Ihre Geduld!\",\r\n error_notImplemented_title: \"In Entwicklung\",\r\n error_general_message1:\r\n \"Wir entschuldigen uns für die Unannehmlichkeiten, aber ein unerwarteter Fehler ist aufgetreten während Sie unsere Webseite verwendet haben.\",\r\n error_general_message2: \"Was können sie tun?\",\r\n error_general_message3:\r\n \"Sie könnten versuchen die URL noch einmal in den Browser einzugeben.\",\r\n error_general_message4: \"Oder wir können Sie zur {anchor}.\",\r\n error_general_message5: \"Eine Sache noch:\",\r\n error_general_message6:\r\n \"Wenn sie wollen, können sie uns über veraltete Links {anchor}.\",\r\n error_general_message6a: \"informieren\",\r\n error_general_message4a: \"Home Page zurückzuleiten.\",\r\n // UI_Authentication_UserLocked:\r\n // \"Ihr Benutzer wurde gesperrt. Sind Sie der Meinung, dass dies ein Fehler ist wenden Sie sich bitte an musikverlag@orf.at\",\r\n // UI_Authentication_UserEmailUnverified:\r\n // \"Sie haben Ihre Email-Adresse noch nicht verifiziert.\",\r\n // UI_Authentication_UserUnverified:\r\n // \"Ihr Benutzer wurde noch nicht freigeschalten.\",\r\n // UI_InputValidation_PasswordPolicyFailure_OldPassword:\r\n // \"Wir haben unsere Kennwort Richtlinien aktualisiert, ihr altes Kennwort erfüllt diese nicht. Bitte setzen Sie ihr Kennwort zurück.\",\r\n // UI_Authentication_Login_Failed:\r\n // \"Die Emailadresse oder das Kennwort ist falsch.\",\r\n UI_RegisterForm_Error_UserAlreadyExists:\r\n \"Es existiert bereits ein Account unter dieser Email Adresse.\",\r\n UI_RegisterForm_Error: \"Konto konnte nicht angelegt werden.\",\r\n // UI_Authentication_PasswordResetTimeError:\r\n // \"Sie haben ihr Passwort bereits zurückgesetzt. Bitte überprüfen Sie Ihren Posteingang!\",\r\n UI_Authentication_ResetPassword_LinkExpired:\r\n \"Dieser Link ist abgelaufen. Falls Sie ihr Kennwort zurücksetzen wollen, fordern Sie einen Neuen an.\",\r\n reset_password_success_message:\r\n \"Sollte es einen Benutzer in unserem System mit angegebener Email-Adresse geben, haben Sie jetzt eine Email mit weiteren Anweisungen bekommen.\",\r\n UI_Authentication_ResetPassword_Success:\r\n \"Ihr Kennwort wurde erfolgreich zurückgesetzt.\",\r\n Error_MailRecipientUnavailable:\r\n \"Wir konnten Ihre neue Email Adresse leider nicht erreichen. Bitte überprüfen Sie Ihre Eingabe!\",\r\n change_email_request_success_title: \"Email Änderungsanfrage erhalten!\",\r\n change_email_request_success_message:\r\n \"Wir haben so eben eine Verifizierungsmail an Ihre neue Email Adresse gesendet, es kann bis zu 10 Minuten dauern bis Sie diese erhalten. Bitte verifizieren Sie Ihre neue Email Adresse um den Prozess abzuschließen.\",\r\n UI_UserEmailVerification_Success_Title: \"Email Verifizierung erfolgreich!\",\r\n UI_UserEmailVerification_Success_AdditionalText:\r\n \"Ihre Email Adresse wurde erfolgreich verifiziert. Sobald Sie vom Musikverlag Team freigeschaltet wurden, können Sie die Applikation uneingeschränkt nutzen.\",\r\n UI_UserEmailChange_Success_Title: \"Email Adresse erfolgreich geändert!\",\r\n UI_UserEmailChange_Success_AdditionalText:\r\n \"Die Änderung Ihrer Email Adresse wurde abgeschlossen und verifiziert. Sie können sich nun mit {email} einloggen.\",\r\n UI_UserEmailVerification_Failure_Title:\r\n \"Email Verifizierung fehlgeschlagen!\",\r\n UI_UserEmailVerification_Failure_AdditionalText:\r\n \"Wir konnten diesen Link zur Email-Verifizierung nicht verarbeiten. Bitte informieren Sie den Support unter musikverlag@orf.at.\",\r\n update_account_success_message:\r\n \"Konto Informationen erfolgreich aktualisiert!\",\r\n UI_UserVerification_Failure_Title: \"Verifizierung fehlgeschlagen!\",\r\n UI_UserVerification_Failure_AdditionalText:\r\n \"Der Benutzer konnte nicht verifiziert werden. Bitte informieren Sie den Support unter musikverlag@orf.at.\",\r\n UI_UserVerification_Success_Title: \"Verifizierung erfolgreich!\",\r\n UI_UserVerification_Success_AdditionalText:\r\n \"Der Benutzer {email} wurde erfolgreich freigeschalten. Eine Benachrichtungsemail wurde bereits versendet. \",\r\n tooltipSimSearch: \"KI-Lösung zum finden von musikalisch ähnlichen Tracks. Die Eingabe eines Referenz-Titels ist per URL (z.B. Youtube-Link), Audio-Upload oder Library-ArchivNr. möglich.\",\r\n tooltipDeleteCartButton: \"Sammelkorb löschen\",\r\n tooltipDeleteCartsButton: \"Ausgewählte Sammelkörbe löschen\",\r\n tooltipEditCartButton: \"Sammelkorb bearbeiten\",\r\n tooltipLoadCartButton: \"Sammelkorb laden\",\r\n tooltipTransferCartSongsButton: \"Tracks in anderen Sammelkorb verschieben\",\r\n tooltipAddCartButton: \"Neuen Sammelkorb anlegen\",\r\n tooltipHideSearch: \"Erweiterte Suche verstecken/anzeigen\",\r\n tooltipResetField: \"Feld zurücksetzten\",\r\n tooltipPlaySong: \"Track abspielen\",\r\n tooltipPlaySongDragDrop:\r\n \"Track abspielen oder Maustaste halten zum verschieben\",\r\n tooltipStopSong: \"Track pausieren\",\r\n tooltipStopSongDragDrop:\r\n \"Track pausieren oder Maustaste halten zum verschieben\",\r\n tooltipDownloadMP3Song: \"Download als MP3\",\r\n tooltipDownloadWAVSong: \"Download als WAV\",\r\n tooltipDownloadMP3Songs: \"Download der ausgewählten Tracks als MP3\",\r\n tooltipDownloadWAVSongs: \"Download der ausgewählten Tracks als WAV\",\r\n tooltipRemoveSongs: \"Ausgewählte Tracks aus Sammelkorb entfernen\",\r\n tooltipAddSongs: \"Ausgewählte Tracks dem Sammelkorb hinzufügen\",\r\n tooltipAKMDownload: \"AKM Export\",\r\n tooltipCartShare: \"Sammelkorb teilen\",\r\n tooltipPublicCart: \"Öffentlicher Link\",\r\n tooltipTargetExport: \"Zielauslieferung\",\r\n tooltipRemoveSong: \"Aus Sammelkorb entfernen\",\r\n tooltipAddSong: \"Dem Sammelkorb hinzufügen\",\r\n tooltipMoreInfoSong: \"Mehr Informationen anzeigen\",\r\n tooltipShowSimilarTracks: \"KI-Lösung zum finden von musikalisch ähnlichen Tracks\",\r\n showSimilarTracksButton: \"Ähnlichkeitssuche\",\r\n tooltipLessInfoSong: \"Weniger Informationen anzeigen\",\r\n tooltipChangeModi: \"Modus ändern\",\r\n tooltipCopyTracks: \"Tracks in anderen Sammelkorb kopieren\",\r\n tooltipLoadMore: \"Mehr laden\",\r\n tooltipSearchCart: \"Nach Sammelkorb suchen\",\r\n tooltipSearchSongInCart: \"Nach Track in Sammelkorb suchen\",\r\n tooltipCopyCart: \"Sammelkorb kopieren\",\r\n tooltipMoveItemFront: \"Track an den Anfang des Sammelkorbs verschieben\",\r\n tooltipMoveItemEnd: \"Track an das Ende des Sammelkorbs verschieben\",\r\n tooltipSortOrderAsc: \"Tracks Aufsteigend sortieren\",\r\n tooltipSortOrderDesc: \"Tracks Absteigend sortieren\",\r\n tooltipAudioPlayerNextSong: \"Nächsten Track abspielen\",\r\n tooltipAudioPlayerPrevSong: \"Vorherigen Track abspielen\",\r\n tooltipAudioPlayerRepeatSong: \"Track wiederholen\",\r\n tooltipAudioPlayerNotRepeatSong: \"Track nicht mehr wiederholen\",\r\n tooltipAudioPlayerChangePlaybackSpeed: \"Wiedergabegeschwindigkeit ändern\",\r\n tooltipRemoveThemeCart: \"Sammelkorb entfernen\",\r\n tooltipShowThemeCart: \"Themensammlung veröffentlichen\",\r\n tooltipPrivateThemeCart: \"Themensammlung unsichtbar schalten\",\r\n tooltipAddCover: \"Neue Coverfile hochladen\",\r\n tooltipEditThemeCart: \"Themensammlung bearbeiten\",\r\n tooltipCloneThemeCart: \"Themensammlung klonen\",\r\n tooltipCartExcelExport: \"Sammelkorb in Excel Datei exportieren\",\r\n tooltipSearchUser: \"Nach Benutzer suchen\",\r\n tooltipDeleteUser: \"Benutzer löschen\",\r\n adminExcelViewExportSongsTitle:\r\n \"Eine Gruppe von Tracks in Excel Datei exportieren\",\r\n adminExcelViewExportAlbumTitle:\r\n \"Ganze Alben in eine Excel Datei Exportieren \",\r\n adminExcelViewExportSongsMSG:\r\n \"Um Tracks in eine Excel Datei zu exportieren muss die ArchivNr. angegeben werden. Dabei muss man in das erste Feld die Archiv Nr. des ersten Tracks eintragen, welchen man exportieren will. Mithilfe des Plus kann man mehrere unterschiedliche Bereiche in die selbe Excel Datei exportieren.\",\r\n adminExcelViewExportAllSongsTitle:\r\n \"Alle Tracks in eine Excel Datei exportieren\",\r\n adminExcelViewExportErrorGeneral: \"Problem mit der KokoId gefunden.\",\r\n adminExcelViewRemoveKokoIds: \"ArchivNr. Bereich zurücksetzten\",\r\n adminExcelViewRemoveAlbumKokoId: \"ArchivNr. zurücksetzten\",\r\n adminExcelViewKokoIdError: \"Bitte geben sie eine valide ArchivNr. an!\",\r\n adminExcelViewKokoIdRangeError:\r\n \"Die Start ID muss kleiner sein als die End Id!\",\r\n adminExcelViewKokoIdLengthError:\r\n \"Koko IDs müssen die selbe Anzahl an Zahlen besitzen! z.B. CD33/1000/1 - CD33/1001/1 oder CD33/1000 - CD33/1001\",\r\n sortOrderAsc: \"Aufsteigend\",\r\n sortOrderDesc: \"Absteigend\",\r\n sortOrderTypeDefault: \"Standard\",\r\n sortOrderTypeTitle: \"Titel\",\r\n sortOrderTypeLength: \"Dauer\",\r\n sortOrderTypeLastAdded: \"Zuletzt hinzugefügt\",\r\n sortOrderTypeAlbum: \"Album\",\r\n sortOrderTypeKokoId: \"Koko Id\",\r\n sortOrderTypeCustom: \"Benutzerdefiniert\",\r\n sortOrderTypeName: \"Name\",\r\n sortOrderTypeCreationDate: \"Erstellungsdatum\",\r\n sortOrderLabel: \"Sortieren nach\",\r\n dontShowAgainLabel: \"Nicht mehr anzeigen\",\r\n okSubmit: \"Verstanden\",\r\n themeCartTableHeadTitle: \"Titel\",\r\n themeCartTableHeadDesc: \"Beschreibung\",\r\n themeCartTableHeadCart: \"Sammelkorb\",\r\n themeCartTableHeadLink: \"Link\",\r\n themeCartTableHeadOnline: \"Sichtbar?\",\r\n themeCartTableCoverfile: \"Coverfile\",\r\n themeCartViewAdd: \"Neue Themensammlung anlegen\",\r\n noCollections: \"Noch keine Themensammlungen hinzugefügt\",\r\n chooseVersion: \"Version auswählen\",\r\n newsModalMaintainanceTitle: \"Wartungsinformationen UTC+01:00\",\r\n newsModalTitle: \"Musiksammlungen und News\",\r\n themeCollectionModalTitle: \"Musiksammlungen\",\r\n newsModalSupportMsgLabel: \"Neue Features\",\r\n maintainanceItemStartDate: \"Anfangsdatum UTC+01:00\",\r\n maintainanceItemEndDate: \"Enddatum UTC+01:00\",\r\n maintainanceItemSaveSuccess: \"Wartungsperiode erfolgreich gespeichert\",\r\n maintainanceItemResetSuccess: \"Wartungsperiode erfolgreich zurückgesetzt\",\r\n maintainanceAdminViewTitle: \"Wartungsperioden\",\r\n maintainanceAdminViewMsg:\r\n \"Auf dieser Seite kann man das nächste Wartungsfenster festlegen.\",\r\n maintainanceAdminViewAppSupportMessageTitle: \"Feature Nachrichten\",\r\n maintainanceAdminViewAppSupportTitle: \"Features Titel\",\r\n appSupportMessageTableOrderHead: \"Reihenfolge\",\r\n appSupportMsgCreateTitle: \"Nachricht erstellen\",\r\n appSupportMsgCreated: \"Nachricht erfolgreich erstellt!\",\r\n appSupportMsgUpdatedSuccess: \"Nachricht erfolgreich gespeichert!\",\r\n appSupportMsgDelete: \"Nachricht löschen\",\r\n appSupportMsgEdit: \"Nachricht bearbeiten\",\r\n appSupportMsgAdd: \"Neue Nachricht hinzufügen\",\r\n appSupportTitleAdd: \"Neuen Titel hinzufügen\",\r\n appSupportTitleCreateTitle: \"Titel erstellen\",\r\n appSupportTitleCreated: \"Titel erfolgreich erstellt!\",\r\n appSupportTitleUpdatedSuccess: \"Titel erfolgreich gespeichert!\",\r\n appSupportTitleDelete: \"Titel löschen\",\r\n appSupportTitleEdit: \"Titel bearbeiten\",\r\n appSupportTitleSelectorEmpty: \"Titel wählen\",\r\n releasedate: \"Releasedatum\",\r\n statisticAdminViewStatType0: \"Allgemeine Informationen\",\r\n statisticAdminViewStatType1: \"Queries\",\r\n statisticAdminViewStatType2: \"Benutzer\",\r\n statisticAdminViewStatType3: \"Tracks\",\r\n statisticAdminViewStatType4: \"Sammelkörbe\",\r\n statisticAdminViewStatType5: \"Dropdowns\",\r\n statisticAdminViewStatType6: \"Webseitenaufrufe\",\r\n statisticAdminViewStatType7: \"Webseitenaufrufe per Monat\",\r\n statisticAdminViewStatType8: \"Neue Benutzer per Monat\",\r\n statisticAdminViewStatType9: \"Querie Suchen per Monat\",\r\n statisticAdminViewStatType10: \"Dropdown Suchen per Monat\",\r\n statisticAdminViewStatType11: \"Anzahl Genres\",\r\n statisticAdminViewStatType12: \"Anzahl Keywords\",\r\n statisticAdminViewDisplayType0: \"Tabelle\",\r\n statisticAdminViewDisplayType1: \"Tortendiagramm (Anzahl der Aufrufe)\",\r\n statisticAdminViewDisplayType2: \"Säulendiagramm (Anzahl der Aufrufe)\",\r\n statisticAdminViewDisplayType3: \"Liniendiagramm (Anzahl der Aufrufe)\",\r\n statisticAdminViewDisplayType1Songs: \"Tortendiagramm (Anzahl der Plays)\",\r\n statisticAdminViewDisplayType2Songs: \"Säulendiagramm (Anzahl der Plays)\",\r\n statisticAdminViewDisplayType3Songs:\r\n \"Tortendiagramm (Anzahl der Downloads)\",\r\n statisticAdminViewDisplayType4Songs:\r\n \"Säulendiagramm (Anzahl der Downloads)\",\r\n statisticAdminViewTableHeadNoResQuery: \"Suchwort\",\r\n statisticAdminViewTableHeadNoResResults: \"Resultate\",\r\n statisticAdminViewTableHeadNoResEmotion: \"Emotion/Stimmung\",\r\n statisticAdminViewTableHeadNoResMusicOccasion: \"Musik Für\",\r\n statisticAdminViewTableHeadNoResInstrument: \"Instrument\",\r\n statisticAdminViewTableHeadNoResMusicStyle: \"Genre\",\r\n statisticAdminViewTableHeadNoResMinDuration: \"Min. Dauer in Sec.\",\r\n statisticAdminViewTableHeadNoResMaxDuration: \"Max. Dauer in Sec.\",\r\n statisticAdminViewTableHeadNoResTimesCalled: \"Aufgerufen\",\r\n statisticAdminViewTableHeadNoResDate: \"Datum\",\r\n statisticsAdminViewTableNoResultsToShow: \"Keine Daten zum Anzeigen\",\r\n statisticAdminViewTableHeadRegDate: \"Registrierungsdatum\",\r\n statisticAdminViewTableHeadTitle: \"Titel\",\r\n statisticAdminViewTableHeadFirstName: \"Name\",\r\n statisticAdminViewTableHeadLastName: \"Nachname\",\r\n statisticAdminViewTableHeadProfession: \"Tätigkeit\",\r\n statisticAdminViewTableHeadCompany: \"Unternehmen\",\r\n statisticAdminViewTableHeadEmail: \"Email\",\r\n statisticAdminViewTableHeadPhoneNumber: \"Tel. Nummer\",\r\n statisticAdminViewTableHeadAccState: \"Status\",\r\n statisticAdminViewTableHeadNoCarts: \"Anzahl der Sammelkörbe\",\r\n statisticAdminViewTableHeadName: \"Name\",\r\n statisticAdminViewTableHeadTotalNumber: \"Anzahl\",\r\n statisticAdminViewTableHeadSongCount: \"Anzahl der Tracks\",\r\n statisticAdminViewTableHeadTimesCalled: \"Anzahl der Aufrufe\",\r\n statisticAdminViewTableHeadGuid: \"Link\",\r\n statisticAdminViewTableHeadKokoId: \"ArchivNr.\",\r\n statisticAdminViewTableHeadAlbum: \"Album\",\r\n statisticAdminViewTableHeadDuration: \"Dauer\",\r\n statisticAdminViewTableHeadRecordingYear: \"Aufnahmejahr\",\r\n statisticAdminViewTableHeadPlays: \"Plays\",\r\n statisticAdminViewTableHeadDownloads: \"Downloads\",\r\n statisticAdminViewTableHeadArtists: \"Künstler\",\r\n statisticAdminViewGeneralTotalSongs: \"Insgesamte Tracks\",\r\n statisticAdminViewGeneralTotalArtists: \"Insgesamte Künstler\",\r\n statisticAdminViewGeneralTotalUsers: \"Insgesamte Registrierungen\",\r\n statisticAdminViewGeneralTotalCarts: \"Insgesamte Sammelkörbe\",\r\n statisticAdminViewGeneralAvgCarts:\r\n \"Durchschnittliche Sammelkörbe pro Benutzer\",\r\n statisticAdminViewGeneralAvgSongs:\r\n \"Durchschnittliche Tracks pro Sammelkorb\",\r\n statisticAdminViewGeneralNoCarts: \"Benutzer ohne Sammelkörbe\",\r\n statisticAdminViewExportStats: \"Statistik exportieren\",\r\n date: \"Datum\",\r\n numberOfAllViewsOverDateRange:\r\n \"Anzahl der kompletten Aufrufe über den Zeitraum\",\r\n entries: \"Einträge\",\r\n users: \"Benutzer\",\r\n block: \"Sperren\",\r\n unblock: \"Entsperren\",\r\n verify: \"Verifizieren\",\r\n usersAdminViewTableHeadUserId: \"ID\",\r\n usersAdminViewTableHeadRegisterDate: \"Registrierungsdatum\",\r\n usersAdminViewTableHeadTitle: \"Titel\",\r\n usersAdminViewTableHeadName: \"Name\",\r\n usersAdminViewTableHeadSurName: \"Nachname\",\r\n usersAdminViewTableHeadCompany: \"Unternehmen\",\r\n usersAdminViewTableHeadEmail: \"Email\",\r\n usersAdminViewTableHeadNumber: \"Telefonnummer\",\r\n usersAdminViewTableHeadAccState: \"Status\",\r\n usersAdminViewTableHeadButtonAction: \"Aktionen\",\r\n dropdownAdminViewCreateNewItem: \"Neues Item hinzufügen\",\r\n dropdownAdminViewLanguageSelector: \"Sprache\",\r\n dropdownAdminViewLanguageGerman: \"Deutsch\",\r\n dropdownAdminViewTableHeadId: \"ID\",\r\n dropdownAdminViewTableHeadResKey: \"Key\",\r\n dropdownAdminViewTableHeadLucenePattern: \"Lucene Muster\",\r\n dropdownAdminViewTableHeadCategory: \"Kategorie\",\r\n dropdownAdminViewTableHeadLocalization: \"Übersetzung\",\r\n dropdownAdminViewTableHeadButtons: \"Funktionen\",\r\n createDropdownItemModalTitle: \"Neues Dropdownitem erstellen\",\r\n editDropdownItemModalTitle: \"Dropdownitem bearbeiten\",\r\n createDropdownItemModalKey: \"Einzigartiger Name\",\r\n createDropdownItemModalLucenePattern: \"Lucene Muster\",\r\n createDropdownItemModalLuceneCategory: \"Kategorie\",\r\n createDropdownItemModalLuceneLocalization: \"Übersetzung\",\r\n createDropdownItemModalDate: \"Releasedatum\",\r\n createDropdownItemModalErrorLucenePattern:\r\n \"Das Lucene Pattern führt zu folgenden Fehler: \",\r\n createDropdownItemModalSuccessMsg: \"Dropdown Item erfolgreich erstellt!\",\r\n editDropdownItemModalSuccessMsg: \"Dropdown Item erfolgreich gespeichert!\",\r\n deleteDropdownItemModalSuccessMSG: \"Dropdown Item erfolgreich gelöscht!\",\r\n deleteDropdownItemModalTitle: \"Dropdown Item löschen\",\r\n deleteDropdownItemModalMsg:\r\n \"Wollen sie wirklich das Dropdown Item {item} löschen?\",\r\n deleteAppSupportMsgModalTitle: \"Newspopup Nachricht löschen\",\r\n deleteAppSupportSuccessMSG: \"Nachricht erfolgreich gelöscht!\",\r\n deleteAppSupportMsgModalMSG:\r\n \"Wollen sie wirklich die Newspopup Nachricht {news} löschen?\",\r\n deleteAppSupportTitleModalTitle: \"Newspopup Titel löschen\",\r\n deleteAppSupportTitleSuccessMSG: \"Titel erfolgreich gelöscht!\",\r\n deleteAppSupportTitleModalMSG:\r\n \"Wollen sie wirklich den Newspopup Titel {news} löschen?\",\r\n similaritySearchKokoIdRequiredError: \"ArchivNr. bitte eintragen\",\r\n similaritySearchKokoIdInvalidError: \"ArchivNr. ist invalide\",\r\n similaritySearchUrlRequiredError: \"URL bitte eintragen\",\r\n similaritySearchUrlInvalidError:\"Derzeit werden nur Soundcloud und Youtube links unterstützt.\",\r\n similaritySearchFileRequiredError: \"Bitte Datei auswählen.\",\r\n similaritySearchUrlKokoIdInvalid: \"ArchivNr. oder URL ist ungültig. Derzeit werden nur Soundcloud und Youtube-Links unterstützt.\",\r\n similaritySearchFileMp3RequiredError: \"Es werden derzeit nur MP3 und WAV Dateien unterstützt.\",\r\n similaritySearchFileSizeError: \"Datei zu groß, derzeit werden nur Audio-Dateien bis 140MB unterstützt.\",\r\n similaritySearchNoResults: \"Keine ähnlichen Songs gefunden\"\r\n\r\n },\r\n};\r\n// TODO: Add random greeting\r\nconst i18n = new VueI18n({\r\n locale: \"de\", // set locale\r\n fallbackLocale: \"de\", // set fallback locale\r\n messages, // set locale messages,\r\n silentTranslationWarn: true,\r\n});\r\n\r\nexport default i18n;\r\n","import axios, { AxiosError } from \"axios\";\r\nimport {\r\n AccountInfo,\r\n DropdownItem,\r\n LuceneSearchRequest,\r\n SongInfo,\r\n SongSearchForm,\r\n SongSearchResponse,\r\n CreateAccountRequest,\r\n VerifyResponse,\r\n CartInfo,\r\n CartsResponse,\r\n UserResult,\r\n ShortAccountInfo,\r\n TargetExportTargetItem,\r\n TargetExportSongInfo,\r\n PublicCartResponse,\r\n TargetExportRequest,\r\n Themecart,\r\n ThemecartsAdminInfo,\r\n ThemecartEditRequest,\r\n ThemecartCreateRequest,\r\n MaintainancePeriod,\r\n MaintainancePeriodEdit,\r\n UserSearchInfo,\r\n QueryResults,\r\n GeneralStatistic,\r\n SongStatistics,\r\n CartStatistics,\r\n UserStatistics,\r\n CredentialCookie,\r\n DropdownItemsTable,\r\n DropdownItemEditRequest,\r\n DropdownStatistics,\r\n KokoIdRange,\r\n ViewStatistics,\r\n AppSupportMessage,\r\n AppSupportMessageTitle,\r\n EditAppSupportMessageTitle,\r\n EditAppSupportMessage,\r\n ViewStatistic,\r\n SimilarMatch,\r\n NameCountStatistics,\r\n} from \"@/util/classes\";\r\nimport SessionStorage from \"./sessionstorage\";\r\nimport { StatusCodes } from \"http-status-codes\";\r\nimport Funcs from \"./helperFunc\";\r\nimport i18n from \"@/plugins/i18n\";\r\nimport { apiRouteNames } from \"./constants\";\r\nimport Cookies from \"js-cookie\";\r\nimport { CREDENTIAL_COOKIE_IDENTIFIER_KEY } from \"@/util/constants\";\r\n\r\n// This function logs the user in and returns a HTTP Statuscode and an optional error message.\r\nasync function login(\r\n name: string,\r\n password: string\r\n): Promise<[StatusCodes, string]> {\r\n if (name === \"\" || password === \"\") {\r\n throw new Error(\"Name and password can't be empty.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.identity}/login`,\r\n { email: name, password: password },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n Cookies.set(\r\n CREDENTIAL_COOKIE_IDENTIFIER_KEY,\r\n JSON.stringify(new CredentialCookie(resp.data.isMVuser, name)), {\r\n sameSite: \"Strict\"\r\n }\r\n );\r\n return [StatusCodes.OK, \"\"];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [\r\n StatusCodes.UNAUTHORIZED,\r\n axiosError.response.data as string,\r\n ];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [\r\n StatusCodes.BAD_REQUEST,\r\n axiosError.response.data as string,\r\n ];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n }\r\n }\r\n}\r\n\r\n// This function logs the user out and returns a status code.\r\nasync function logout(): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.identity}/logout`,\r\n {},\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n //SessionStorage.clear();\r\n Cookies.remove(CREDENTIAL_COOKIE_IDENTIFIER_KEY);\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n SessionStorage.removeItem(\"user\");\r\n SessionStorage.removeItem(\"isMvUser\");\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This function is used by normal users to search for songs.\r\n// Use this to search for songs, pagination and cartchange\r\nasync function songSearch(\r\n form: SongSearchForm\r\n): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/search`,\r\n JSON.stringify(form),\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return resp.data;\r\n }\r\n\r\n return null;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n if (axiosError.message.includes(\"Request aborted\")) {\r\n return new SongSearchResponse([], 0);\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n\r\n// This function is used by mv users to search for songs.\r\n// Use this to search for songs, pagination and cartchange\r\nasync function directLuceneSearch(\r\n req: LuceneSearchRequest\r\n): Promise<[StatusCodes, SongSearchResponse | string]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/lucenesearch`,\r\n JSON.stringify(req),\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, \"\"];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [\r\n StatusCodes.BAD_REQUEST,\r\n (axiosError.response.data as any).errorMessage,\r\n ];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n }\r\n }\r\n}\r\n\r\n// This function gets the list items for the dropdowns in the search form.\r\n// The name parameter is the topic of the dropdown. (emotion, instrument)\r\nasync function getDropDownItems(\r\n name: string,\r\n langType: number\r\n): Promise {\r\n if (name === \"\") {\r\n throw new Error(\"Dropdown name can't be null.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${\r\n apiRouteNames.song\r\n }/getdropdown/${encodeURIComponent(name)}/${langType}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const arr: DropdownItem[] = [];\r\n resp.data.forEach(async (element: any) => {\r\n arr.push(await Funcs.mapJsonToDropDown(JSON.stringify(element)));\r\n });\r\n\r\n return arr;\r\n }\r\n\r\n return null;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n return null;\r\n }\r\n}\r\n\r\n// This function gets all information about the song with the given number.\r\nasync function getSongDetailed(id: number): Promise {\r\n if (id < 0) {\r\n throw new Error(\"SongId cant be smaller than null.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/searchdetailed/${id}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return resp.data;\r\n }\r\n\r\n return null;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n return null;\r\n }\r\n}\r\n\r\n// This function registers a new user at the api.\r\nasync function register(req: CreateAccountRequest): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.identity}/register`,\r\n JSON.stringify(req),\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.OK;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This function is used to get a link that can reset the password.\r\n// The link is sent via mail.\r\n// It can return an optional error message.\r\nasync function createPasswordResetLink(\r\n email: string\r\n): Promise<[StatusCodes, string]> {\r\n if (email === \"\") {\r\n throw new Error(\"Email can't be empty.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.identity}/resetpassword`,\r\n JSON.stringify({ email: email }),\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, \"\"];\r\n }\r\n\r\n return [StatusCodes.OK, \"\"];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [\r\n StatusCodes.BAD_REQUEST,\r\n (axiosError.response.data as any).resKey,\r\n ];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n }\r\n }\r\n}\r\n\r\n// This method is used to reset the password of the user.\r\nasync function resetPassword(\r\n password: string,\r\n userId: number,\r\n guid: string,\r\n isoldpasswordreset: boolean\r\n): Promise<[StatusCodes, string]> {\r\n if (!Funcs.isGuid(guid)) {\r\n throw new Error(\"Function needs a guid!\");\r\n }\r\n\r\n if (password === \"\") {\r\n throw new Error(\"Password can't be empty.\");\r\n }\r\n\r\n if (userId < 0) {\r\n throw new Error(\"UserId can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.identity}/resetpassword/${userId}/${guid}?oldPasswordReset=${isoldpasswordreset}`,\r\n JSON.stringify({ password: password }),\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, \"\"];\r\n }\r\n\r\n return [StatusCodes.OK, \"\"];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [\r\n StatusCodes.BAD_REQUEST,\r\n axiosError.response.data as string,\r\n ];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n }\r\n }\r\n}\r\n\r\n// This method updates the users email.\r\nasync function updateEmail(newEmail: string): Promise<[StatusCodes, string]> {\r\n if (newEmail === \"\") {\r\n throw new Error(\"Email can't be empty.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.account}/editemail`,\r\n JSON.stringify({ email: newEmail }),\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, ''];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, ''];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, ''];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, axiosError.response.data as string];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, ''];\r\n }\r\n }\r\n}\r\n\r\n// This method gets the account information about the user.\r\nasync function getAccountInfo(): Promise {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.account}/edit`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return resp.data;\r\n }\r\n\r\n return null;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return null;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return null;\r\n default:\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n// This method updates the information about the user.\r\nasync function updateAccount(info: AccountInfo): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.account}/editpersondata`,\r\n info,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.OK;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method is used to verify the email address of the user.\r\n// This is needed when a new user verifies his email or\r\n// If a user changed his email.\r\nasync function verifyEmail(\r\n userId: number,\r\n verificationId: string\r\n): Promise<[StatusCodes, VerifyResponse]> {\r\n if (!Funcs.isGuid(verificationId)) {\r\n throw new Error(\"Guid expected\");\r\n }\r\n\r\n if (userId < 0) {\r\n throw new Error(\"UserId can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.account}/emailverify/${userId}/${verificationId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as VerifyResponse];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, new VerifyResponse(\"\", \"\")];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, new VerifyResponse(\"\", \"\")];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [\r\n StatusCodes.BAD_REQUEST,\r\n new VerifyResponse(\"\", \"verification\"),\r\n ];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, new VerifyResponse(\"\", \"\")];\r\n }\r\n }\r\n}\r\n\r\n// This method is used to verify new users for the web app.\r\nasync function verifyUser(\r\n userId: number,\r\n verificationId: string\r\n): Promise<[StatusCodes, string]> {\r\n if (!Funcs.isGuid(verificationId)) {\r\n throw new Error(\"Guid expected\");\r\n }\r\n\r\n if (userId < 0) {\r\n throw new Error(\"UserId can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.account}/verify/${userId}/${verificationId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data.email];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, \"\"];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n }\r\n }\r\n}\r\n\r\n// This method gets a given amount of carts.\r\nasync function getCarts(\r\n currentPage: number,\r\n entries: number,\r\n sortType: number,\r\n ascending: boolean,\r\n query: string\r\n): Promise<[StatusCodes, CartsResponse | null]> {\r\n if (currentPage < 1) {\r\n throw new Error(\"Page can't be smaller than 1.\");\r\n }\r\n\r\n if (entries < 0) {\r\n throw new Error(\"Entries can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${\r\n apiRouteNames.shoppingcart\r\n }/management/${sortType}/${ascending}?query=${encodeURIComponent(query)}`,\r\n {\r\n currentPage: currentPage,\r\n entries: entries,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const carts: CartInfo[] = [];\r\n resp.data.carts.forEach((element: any) => {\r\n carts.push(Funcs.mapJsonToCartInfo(JSON.stringify(element)));\r\n });\r\n return [StatusCodes.OK, new CartsResponse(carts, resp.data.totalResults)];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// THis method deletes the cart with the given number.\r\nasync function deleteCart(cartId: number): Promise {\r\n if (cartId < 0) {\r\n throw new Error(\"CartId can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.delete(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/delete/${cartId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method copies the cart with the given id.\r\nasync function copyCart(cartId: number): Promise {\r\n if (cartId < 0) {\r\n throw new Error(\"CartId can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/copy/${cartId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method deletes the carts with the given ids.\r\nasync function deleteCarts(cartIds: number[]): Promise {\r\n if (cartIds.length == 0) {\r\n throw new Error(\"Carts can't be empty.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/delete`,\r\n cartIds,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method updates the title and description of the cart with the given id.\r\nasync function updateCart(\r\n id: number,\r\n name: string,\r\n desc: string\r\n): Promise {\r\n if (id < 0) {\r\n throw new Error(\"CartId can't be smaller than 1.\");\r\n }\r\n\r\n if (name === \"\") {\r\n throw new Error(\"Name can't be empty.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/edit`,\r\n { shoppingCartId: id, name: name, description: desc },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method gets a given amount of songs that are contained in the cart.\r\nasync function getCartSongs(\r\n id: number,\r\n currentPage: number,\r\n numberOfEntries: number\r\n): Promise<[StatusCodes, SongSearchResponse]> {\r\n if (numberOfEntries < 0) {\r\n throw new Error(\"CartId and Entries can't be smaller than 0.\");\r\n }\r\n\r\n if (currentPage < 1) {\r\n throw new Error(\"Page can't be smaller than 1.\");\r\n }\r\n\r\n try {\r\n const queryId = id === -1 ? \"\" : `?id=${id}`;\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/index${queryId}`,\r\n { currentPage: currentPage, entries: numberOfEntries },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n resp.data.searchResult.forEach((element: SongInfo) => {\r\n element.isInCart = true;\r\n });\r\n return [StatusCodes.OK, resp.data];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, new SongSearchResponse([], 0)];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, new SongSearchResponse([], 0)];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [\r\n StatusCodes.INTERNAL_SERVER_ERROR,\r\n new SongSearchResponse([], 0),\r\n ];\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return [StatusCodes.NOT_FOUND, new SongSearchResponse([], 0)];\r\n default:\r\n return [\r\n StatusCodes.INTERNAL_SERVER_ERROR,\r\n new SongSearchResponse([], 0),\r\n ];\r\n }\r\n }\r\n}\r\n\r\n// This method gets information about all carts.\r\n// THis is used to populate the dropdown where you can choose your active cart.\r\nasync function getCartsInfo(): Promise {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/all`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const carts: CartInfo[] = [];\r\n\r\n try {\r\n resp.data.forEach((element: any) => {\r\n carts.push(Funcs.mapJsonToCartInfo(JSON.stringify(element)));\r\n });\r\n\r\n return carts;\r\n } catch (error) {\r\n return [];\r\n }\r\n }\r\n\r\n return null;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return null;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return null;\r\n default:\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n// THis method creates a new cart.\r\nasync function createCart(\r\n title: string,\r\n description: string\r\n): Promise {\r\n if (title === \"\") {\r\n throw new Error(\"Title can't be empty.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/add`,\r\n { name: title, description: description },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method loads the cart with the given id.\r\n// This is used when changing the cart via dropdown, so it shows up on the cart list at the top.\r\nasync function loadCart(id: number): Promise {\r\n if (id < 0) {\r\n throw new Error(\"CartId can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/load/${id}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method adds the songs with the given ids to the cart.\r\nasync function addSongsToCart(\r\n cartId: number,\r\n songIds: number[]\r\n): Promise {\r\n if (cartId < 0) {\r\n throw new Error(\"CartId can't be smaller than 0.\");\r\n }\r\n\r\n if (songIds.length == 0) {\r\n throw new Error(\"Songlist is empty.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/add/${cartId}/song`,\r\n songIds,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method adds the song with the id to the given cart.\r\nasync function addSongToCart(\r\n cartId: number,\r\n songId: number\r\n): Promise {\r\n if (cartId < 0 || songId < 0) {\r\n throw new Error(\"CartId and Song can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/add/${cartId}/song/${songId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method deletes the songs with the given ids to the cart.\r\nasync function deleteSongsInCart(\r\n cartId: number,\r\n songIds: number[]\r\n): Promise {\r\n if (cartId < 0) {\r\n throw new Error(\"CartId can't be smaller than 0.\");\r\n }\r\n\r\n if (songIds.length == 0) {\r\n throw new Error(\"Songlist is empty.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/delete/${cartId}/song`,\r\n songIds,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method deletes the song with the id from the given cart.\r\nasync function deleteSongInCart(\r\n cartId: number,\r\n songId: number\r\n): Promise {\r\n if (cartId < 0 || songId < 0) {\r\n throw new Error(\"CartId and Song can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.delete(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/delete/${cartId}/song/${songId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method gets information about the cart with the given id.\r\n// async function getCart(cartId: number): Promise<[StatusCodes, CartInfo | null]>{\r\n// try {\r\n// const resp = await axios.get(`${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/${cartId}`, {\r\n// headers:{\r\n// \"Content-Type\":\"application/json\"\r\n// },\r\n// withCredentials: true\r\n// });\r\n\r\n// if (resp.status === 200) {\r\n// const cart: CartInfo = Funcs.mapJsonToCartInfo(JSON.stringify(resp.data))\r\n// return [StatusCodes.OK, cart];\r\n// }\r\n\r\n// return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n// } catch (error: any) {\r\n// const axiosError = error as AxiosError;\r\n// switch (axiosError.response?.status) {\r\n// case StatusCodes.UNAUTHORIZED.valueOf():\r\n// return [StatusCodes.UNAUTHORIZED, null];\r\n// case StatusCodes.BAD_REQUEST.valueOf():\r\n// return [StatusCodes.BAD_REQUEST, null];\r\n// case StatusCodes.NOT_FOUND.valueOf():\r\n// return [StatusCodes.NOT_FOUND, null];\r\n// default:\r\n// return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n// }\r\n// }\r\n// }\r\n\r\n// This method downloads the songs with the ids as a zip in mp3 format.\r\n// Used by the multiple selection download.\r\nasync function downloadAllSongsAsMP3(songIds: number[]): Promise {\r\n if (songIds.length == 0) {\r\n throw new Error(\"Songlist is empty.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.file}/downloadmp3`,\r\n songIds,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n responseType: \"arraybuffer\",\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = window.URL.createObjectURL(new Blob([resp.data]));\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n const fileName = resp.headers[\"content-disposition\"]\r\n .split(\"filename=\")[1]\r\n .split(\";\")[0]\r\n .replaceAll('\"', \"\");\r\n link.setAttribute(\"download\", fileName); //or any other extension\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method downloads the songs with the ids as a zip in wav format.\r\n// Used by the multiple selection download.\r\nasync function downloadAllSongsAsWAV(songIds: number[]): Promise {\r\n if (songIds.length == 0) {\r\n throw new Error(\"Songlist is empty.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.file}/downloadwav`,\r\n songIds,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n responseType: \"blob\",\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = window.URL.createObjectURL(new Blob([resp.data]));\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n const fileName = resp.headers[\"content-disposition\"]\r\n .split(\"filename=\")[1]\r\n .split(\";\")[0]\r\n .replaceAll('\"', \"\");\r\n link.setAttribute(\"download\", fileName); //or any other extension\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method gets the akm file download link, creates a link and then downloads the file.\r\n// The parameter represents the id of the cart, from which you want to create the akm file.\r\nasync function downloadAkmFile(cartId: number): Promise {\r\n if (cartId < 0) {\r\n throw new Error(\"CartId can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/akmexport/${cartId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n // This request just returns the link to the download.\r\n // Thats why we need to create a new element and click it via js.\r\n const url = resp.data.link;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method downloads all songs in the cart with the given id as a zip in mp3 format.\r\nasync function downloadMp3Zip(cartId: number): Promise {\r\n if (cartId < 0) {\r\n throw new Error(\"CartId can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/downloadmp3/${cartId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n responseType: \"arraybuffer\",\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = new Blob([resp.data], { type: \"application/zip\" });\r\n const link = document.createElement(\"a\");\r\n const objectUrl: string = URL.createObjectURL(url);\r\n link.href = objectUrl;\r\n link.setAttribute(\"download\", resp.headers[\"filename\"]);\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method downloads all songs in the cart with the given id as a zip in wav format.\r\nasync function downloadWavZip(cartId: number): Promise {\r\n if (cartId < 0) {\r\n throw new Error(\"CartId can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/downloadwav/${cartId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n responseType: \"arraybuffer\",\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = new Blob([resp.data], { type: \"application/zip\" });\r\n const link = document.createElement(\"a\");\r\n const objectUrl: string = URL.createObjectURL(url);\r\n link.href = objectUrl;\r\n link.setAttribute(\"download\", resp.headers[\"filename\"]);\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method returns a public link to the cart with the given id.\r\nasync function getPublicLink(cartId: number): Promise<[StatusCodes, string]> {\r\n if (cartId < 0) {\r\n throw new Error(\"CartId cant be smaller than null.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/publiclink/${cartId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data.publicLink];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, \"\"];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n }\r\n }\r\n}\r\n\r\n// This method searches for songs in the cart with the given id.\r\n// This is just a simple text search that compares the query with the album, title and artists.\r\nasync function searchSongInCart(\r\n cartId: number,\r\n query: string,\r\n currentPage: number,\r\n numberOfEntries: number\r\n): Promise<[StatusCodes, SongSearchResponse | null]> {\r\n if (cartId < 0 || numberOfEntries < 0) {\r\n throw new Error(\"CartId and entries can't be smaller than 0.\");\r\n }\r\n\r\n if (query === \"\") {\r\n throw new Error(\"Query can't be empty.\");\r\n }\r\n\r\n if (currentPage < 1) {\r\n throw new Error(\"Page can't be smaller than 1.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${\r\n apiRouteNames.shoppingcart\r\n }/search/${cartId}?query=${encodeURIComponent(query)}`,\r\n {\r\n currentPage: currentPage,\r\n entries: numberOfEntries,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n \r\n resp.data.searchResult.forEach((element: SongInfo) => {\r\n element.isInCart = true;\r\n });\r\n return [\r\n StatusCodes.OK,\r\n resp.data,\r\n ];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method searches for a user.\r\n// This is used when sharing a cart with another registered user.\r\nasync function searchUser(\r\n query: string\r\n): Promise<[StatusCodes, UserResult[] | null]> {\r\n if (query === \"\") {\r\n throw new Error(\"Query can't be empty.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${\r\n apiRouteNames.account\r\n }/search?query=${encodeURIComponent(query)}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const users: UserResult[] = Funcs.mapJsonToUserResults(\r\n JSON.stringify(resp.data)\r\n );\r\n return [StatusCodes.OK, users];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method is used to send the cart with the given id to a list of users with the given ids.\r\nasync function shareCartWithUsers(\r\n userIds: number[],\r\n cartId: number\r\n): Promise {\r\n if (userIds.length < 1) {\r\n throw new Error(\"CartId and entries can't be smaller than 0.\");\r\n }\r\n\r\n if (cartId < 0) {\r\n throw new Error(\"CartId can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/share/${cartId}`,\r\n userIds,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method gets account information for the target export modal.\r\n// Caution! This method doesn't return all account informations only email and user name.\r\nasync function getShortAccountInfo(): Promise<\r\n [StatusCodes, ShortAccountInfo | null]\r\n> {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.account}/shortinfo`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [\r\n StatusCodes.OK,\r\n Funcs.mapJsonToShortAccountInfo(JSON.stringify(resp.data)),\r\n ];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method gets all possible targets for the target export.\r\nasync function getExportTargets(): Promise {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/targetexport`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return Funcs.mapJsonToTargetExportTargetItems(JSON.stringify(resp.data));\r\n }\r\n\r\n return null;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return null;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return null;\r\n default:\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n// This method exports the given song to the target.\r\nasync function exportTargetSong(\r\n request: TargetExportRequest\r\n): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/targetexport`,\r\n request,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method gets information about the songs that are currently exported.\r\nasync function getTargetExportSongs(\r\n cartId: number\r\n): Promise<[StatusCodes, TargetExportSongInfo[] | null]> {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/targetexport/cart/${cartId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [\r\n StatusCodes.OK,\r\n await Funcs.mapJsonToTargetExportSongs(JSON.stringify(resp.data)),\r\n ];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method gets all songs from a publicly available cart.\r\nasync function getPublicSongs(\r\n guid: string,\r\n currentPage: number,\r\n numberOfEntries: number,\r\n cartid: number\r\n): Promise<[StatusCodes, PublicCartResponse | null]> {\r\n if (numberOfEntries < 0) {\r\n throw new Error(\"CartId and Entries can't be smaller than 0.\");\r\n }\r\n\r\n if (currentPage < 1) {\r\n throw new Error(\"Page can't be smaller than 1.\");\r\n }\r\n\r\n if (!Funcs.isGuid(guid)) {\r\n throw new Error(\"No Guid found!\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/public/${guid}?cartid=${cartid}`,\r\n { currentPage: currentPage, entries: numberOfEntries },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [\r\n StatusCodes.OK,\r\n resp.data,\r\n ];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return [StatusCodes.NOT_FOUND, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method searches for a song in the public cart.\r\n// This is just a simple text search that compares the query with the album, title and artists.\r\nasync function searchPublicSong(\r\n guid: string,\r\n query: string,\r\n currentPage: number,\r\n numberOfEntries: number,\r\n cartid: number\r\n): Promise<[StatusCodes, PublicCartResponse | null]> {\r\n if (numberOfEntries < 0) {\r\n throw new Error(\"CartId and Entries can't be smaller than 0.\");\r\n }\r\n\r\n if (currentPage < 1) {\r\n throw new Error(\"Page can't be smaller than 1.\");\r\n }\r\n\r\n if (!Funcs.isGuid(guid)) {\r\n throw new Error(\"No Guid found!\");\r\n }\r\n\r\n if (query === \"\") {\r\n throw new Error(\"Query can't be empty!\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${\r\n apiRouteNames.shoppingcart\r\n }/public/${guid}/search?query=${encodeURIComponent(\r\n query\r\n )}&cartid=${cartid}`,\r\n { currentPage: currentPage, entries: numberOfEntries },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [\r\n StatusCodes.OK,\r\n resp.data,\r\n ];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return [StatusCodes.NOT_FOUND, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method gets a given amount of sorted songs from a cart.\r\n// All sorting types except default use this method.\r\nasync function getSortedSongs(\r\n cartId: number,\r\n query: string,\r\n sortType: number,\r\n ascending: boolean,\r\n currentPage: number,\r\n numberOfEntries: number\r\n): Promise<[StatusCodes, SongSearchResponse | null]> {\r\n if (numberOfEntries < 0) {\r\n throw new Error(\"CartId and Entries can't be smaller than 0.\");\r\n }\r\n\r\n if (currentPage < 1) {\r\n throw new Error(\"Page can't be smaller than 1.\");\r\n }\r\n\r\n if (cartId < 1) {\r\n throw new Error(\"Cart Id can't be smaller than 1.\");\r\n }\r\n\r\n if (sortType < 1) {\r\n throw new Error(\"SortType Id can't be smaller than 1.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${\r\n apiRouteNames.shoppingcart\r\n }/sorted/${cartId}/${sortType}/${ascending}?query=${encodeURIComponent(\r\n query\r\n )}`,\r\n { currentPage: currentPage, entries: numberOfEntries },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n resp.data.searchResult.forEach((element: SongInfo) => {\r\n element.isInCart = true;\r\n });\r\n return [\r\n StatusCodes.OK,\r\n resp.data,\r\n ];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return [StatusCodes.NOT_FOUND, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method switches the position of two songs in a cart.\r\n// This is only used when sorting tracks in a cart after the type custom.\r\nasync function switchTrackItemsOrder(\r\n cartId: number,\r\n songIdA: number,\r\n songIdB: number\r\n): Promise {\r\n if (cartId < 0) {\r\n throw new Error(\"Cart Id can't be smaller than 1.\");\r\n }\r\n\r\n if (songIdA == songIdB) {\r\n throw new Error(\"You can't switch a song with the same id.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/${cartId}/switch/${songIdA}/${songIdB}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method pushes the song to the given position in a cart.\r\n// This is only used when sorting tracks in a cart after the type custom.\r\nasync function moveTrackItemToPos(\r\n cartId: number,\r\n songId: number,\r\n pos: number\r\n): Promise {\r\n if (cartId < 0) {\r\n throw new Error(\"Cart Id can't be smaller than 1.\");\r\n }\r\n\r\n if (songId < 0) {\r\n throw new Error(\"Song Id can't be smaller than 0.\");\r\n }\r\n\r\n if (pos < 0) {\r\n throw new Error(\"New position can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/${cartId}/move/${songId}/${pos}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n case StatusCodes.CONFLICT.valueOf():\r\n return StatusCodes.CONFLICT;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method gets all theme collections used in the news popup.\r\nasync function getLatestCollections(): Promise {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.news}/latest`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return resp.data as Themecart[];\r\n }\r\n\r\n return null;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return null;\r\n default:\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n// This method gets the themecarts for the admin view.\r\nasync function getThemeCarts(\r\n currentPage: number,\r\n entries: number\r\n): Promise<[StatusCodes, ThemecartsAdminInfo | null]> {\r\n if (entries < 0) {\r\n throw new Error(\"Entries can't be smaller than 0.\");\r\n }\r\n\r\n if (currentPage < 1) {\r\n throw new Error(\"Page can't be smaller than 1.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.news}/get`,\r\n { currentPage: currentPage, entries: entries },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as ThemecartsAdminInfo];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method searches the themecarts for the admin view.\r\nasync function searchThemeCarts(\r\n currentPage: number,\r\n entries: number,\r\n query: string\r\n): Promise<[StatusCodes, ThemecartsAdminInfo | null]> {\r\n if (entries < 0) {\r\n throw new Error(\"Entries can't be smaller than 0.\");\r\n }\r\n\r\n if (currentPage < 1) {\r\n throw new Error(\"Page can't be smaller than 1.\");\r\n }\r\n\r\n if (query == \"\") {\r\n throw new Error(\"Query cant be emtpy.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${\r\n apiRouteNames.news\r\n }/get?query=${encodeURIComponent(query)}`,\r\n { currentPage: currentPage, entries: entries },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as ThemecartsAdminInfo];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method updates a specific theme cart.\r\nasync function editThemeCart(\r\n request: ThemecartEditRequest\r\n): Promise {\r\n if (request == null) {\r\n throw new Error(\"Request cant be null.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.news}/edit/${request.id}`,\r\n {\r\n title: request.title,\r\n description: request.description,\r\n coverFileName: request.coverFileName,\r\n cartId: request.cartId,\r\n showThemeCart: request.showThemeCart,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method deletes a specific theme cart.\r\nasync function deleteThemeCart(id: number): Promise {\r\n if (id < 0) {\r\n throw new Error(\"Id can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.delete(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.news}/delete/${id}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method clones a theme collection with the given id.\r\nasync function cloneThemeCart(id: number): Promise {\r\n if (id < 0) {\r\n throw new Error(\"Id can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.news}/clone/${id}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method deletes specific theme carts.\r\nasync function deleteThemeCarts(ids: number[]): Promise {\r\n if (ids.some((el) => el < 0)) {\r\n throw new Error(\"Id can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.news}/delete`,\r\n ids,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method gets the names of the covers for the theme carts.\r\nasync function getThemecartsCoverFileNames(): Promise<[StatusCodes, string[]]> {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.file}/theme/names`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, []];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, []];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, []];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, []];\r\n }\r\n }\r\n}\r\n\r\n// This method creates a new themecart.\r\nasync function createThemecart(\r\n request: ThemecartCreateRequest\r\n): Promise {\r\n if (request == null) {\r\n throw new Error(\"Request cant be null.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.news}/add`,\r\n {\r\n title: request.title,\r\n description: request.description,\r\n coverFileName: request.coverFileName,\r\n cartId: request.cartId,\r\n showThemeCart: request.showThemeCart,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method uploads a new coverfile for a theme cart on the server.\r\nasync function uploadCollectionCoverFile(file: File): Promise<[StatusCodes, string]> {\r\n if (file == null) {\r\n throw new Error(\"File can't be empty!\");\r\n }\r\n\r\n const formData = new FormData();\r\n\r\n formData.append(\"file\", file);\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.file}/theme/upload`,\r\n formData,\r\n {\r\n headers: {\r\n \"Content-Type\": \"image/png\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, ''];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, ''];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, ''];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, ''];\r\n case StatusCodes.CONFLICT.valueOf():\r\n return [StatusCodes.CONFLICT, axiosError.response.data as string];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, ''];\r\n }\r\n }\r\n}\r\n\r\n// This method exports a cart into an excel spreadsheet.\r\nasync function exportCartAsExcel(cartId: number): Promise {\r\n if (cartId < 0) {\r\n throw new Error(\"Cartid cant be smaller than 0!\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.shoppingcart}/songexport/${cartId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = resp.data.link;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method exports an array of kokoids into an excel spreadsheet.\r\nasync function exportKokoIDsAsExcel(kokoId: KokoIdRange): Promise<[StatusCodes, string]> {\r\n if (kokoId == null) {\r\n throw new Error(\"IDs can't be empty!\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/songexport`,\r\n kokoId,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = resp.data.link;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n document.body.appendChild(link);\r\n link.click();\r\n return [StatusCodes.OK, ''];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, ''];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, ''];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, axiosError.response.data as string];\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return [StatusCodes.NOT_FOUND, axiosError.response.data as string];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, ''];\r\n }\r\n }\r\n}\r\n\r\n// This method gets all maintainance periods in the database.\r\nasync function getMaintainanceInfo(): Promise {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.maintainance}/get`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return Funcs.mapJsonToMaintainancePeriods(JSON.stringify(resp.data));\r\n }\r\n\r\n return null;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return null;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return null;\r\n default:\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n// This method gets the active maintainance periods.\r\nasync function getAllMaintainanceInfo(): Promise<\r\n [StatusCodes, MaintainancePeriodEdit[] | null]\r\n> {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.maintainance}/all`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [\r\n StatusCodes.OK,\r\n Funcs.mapJsonToMaintainancePeriodEdits(JSON.stringify(resp.data)),\r\n ];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method updates the given maintainance period.\r\nasync function updateMaintainanceInfo(\r\n request: MaintainancePeriodEdit\r\n): Promise {\r\n if (request == null) {\r\n throw new Error(\"Request cant be null.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.maintainance}/update/${request.id}`,\r\n {\r\n description: request.description,\r\n startDateUTC: Math.floor(request.startDate.getTime() / 1000),\r\n endDateUTC: Math.floor(request.endDate.getTime() / 1000),\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method gets sorted user from the db.\r\n// This is used for the manage user table.\r\nasync function getSortedUsers(\r\n currentPage: number,\r\n entries: number,\r\n query: string,\r\n sortType: number,\r\n ascending: boolean\r\n): Promise<[StatusCodes, UserSearchInfo | null]> {\r\n if (entries < 0) {\r\n throw new Error(\"Entries can't be smaller than 0.\");\r\n }\r\n\r\n if (currentPage < 1) {\r\n throw new Error(\"Page can't be smaller than 1.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.account}/get/sorted/${sortType}/${ascending}?query=${query}`,\r\n { currentPage: currentPage, entries: entries },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const users = Funcs.mapJsonToUsersInfo(JSON.stringify(resp.data.users));\r\n return [StatusCodes.OK, new UserSearchInfo(users, resp.data.results)];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method is used to block a user from using the app.\r\nasync function blockUser(id: number): Promise {\r\n if (id < 0) {\r\n throw new Error(\"Id can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.account}/block/${id}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method is used to delete a user from the app.\r\nasync function deleteUser(id: number): Promise {\r\n if (id < 0) {\r\n throw new Error(\"Id can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.delete(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.account}/delete/${id}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method is used to unblock a blocked user.\r\nasync function unblockUser(id: number): Promise {\r\n if (id < 0) {\r\n throw new Error(\"Id can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.account}/unblock/${id}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method is used to verify a unverified user.\r\n// Used by the manage user table.\r\nasync function verifyUserAsAdmin(id: number): Promise {\r\n if (id < 0) {\r\n throw new Error(\"Id can't be smaller than 0.\");\r\n }\r\n\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.account}/verify/admin/${id}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\nasync function getViewsPerMonth(\r\n sortAfterDate: boolean,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise<[StatusCodes, ViewStatistic[] | null]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/visit/monthly/${sortAfterDate}/${ascending}`,\r\n {\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as ViewStatistic[]];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\nasync function getNewUsersPerMonth(\r\n sortAfterDate: boolean,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise<[StatusCodes, ViewStatistic[] | null]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/users/monthly/${sortAfterDate}/${ascending}`,\r\n {\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as ViewStatistic[]];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\nasync function getQueriesPerMonth(\r\n sortAfterDate: boolean,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise<[StatusCodes, ViewStatistic[] | null]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/queryresults/monthly/${sortAfterDate}/${ascending}`,\r\n {\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as ViewStatistic[]];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\nasync function getDropdownsPerMonth(\r\n sortAfterDate: boolean,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise<[StatusCodes, ViewStatistic[] | null]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/dropdowns/monthly/${sortAfterDate}/${ascending}`,\r\n {\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as ViewStatistic[]];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\nasync function getGenreStatistics(sortByCount: boolean, ascending: boolean, currentPage: number, entries: number): Promise<[StatusCodes, NameCountStatistics | null]>{\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/genre/${sortByCount == true ? 1 : 2}/${ascending}`,\r\n {\r\n currentPage: currentPage,\r\n entries: entries,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as NameCountStatistics];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\nasync function getKeywordStatistics(sortByCount: boolean, ascending: boolean, currentPage: number, entries: number): Promise<[StatusCodes, NameCountStatistics | null]>{\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/keyword/${sortByCount == true ? 1 : 2}/${ascending}`,\r\n {\r\n currentPage: currentPage,\r\n entries: entries,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as NameCountStatistics];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method gets the searchquery statistics.\r\nasync function getQueryStatistics(\r\n currentPage: number,\r\n entries: number,\r\n query: string,\r\n sortType: number,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise<[StatusCodes, QueryResults | null]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/queryresults/${sortType}/${ascending}?query=${query}`,\r\n {\r\n currentPage: currentPage,\r\n entries: entries,\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as QueryResults];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method gets the song statistics.\r\nasync function getSongStatistics(\r\n currentPage: number,\r\n entries: number,\r\n query: string,\r\n sortType: number,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise<[StatusCodes, SongStatistics | null]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/songs/${sortType}/${ascending}?query=${query}`,\r\n {\r\n currentPage: currentPage,\r\n entries: entries,\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as SongStatistics];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method gets the cart statistics.\r\nasync function getCartStatistics(\r\n currentPage: number,\r\n entries: number,\r\n query: string,\r\n sortType: number,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise<[StatusCodes, CartStatistics | null]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/carts/${sortType}/${ascending}?query=${query}`,\r\n {\r\n currentPage: currentPage,\r\n entries: entries,\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as CartStatistics];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method gets the user statistics.\r\nasync function getUserStatistics(\r\n currentPage: number,\r\n entries: number,\r\n query: string,\r\n sortType: number,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise<[StatusCodes, UserStatistics | null]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/users/${sortType}/${ascending}?query=${query}`,\r\n {\r\n currentPage: currentPage,\r\n entries: entries,\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [\r\n StatusCodes.OK,\r\n Funcs.mapJsonToUserStatistics(JSON.stringify(resp.data)),\r\n ];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method gets general statistics about the app.\r\nasync function getGeneralStatistics(): Promise<\r\n [StatusCodes, GeneralStatistic | null]\r\n> {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/generalstats`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as GeneralStatistic];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method gets the dropdown item statistics.\r\nasync function getDropdownStatistics(\r\n currentPage: number,\r\n entries: number,\r\n query: string,\r\n sortType: number,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number,\r\n language: number\r\n): Promise<[StatusCodes, DropdownStatistics | null]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/dropdowns/${language}/${sortType}/${ascending}?query=${query}`,\r\n {\r\n currentPage: currentPage,\r\n entries: entries,\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as DropdownStatistics];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method gets the dropdown items for the dropdown item table.\r\nasync function getDropdownItemsForTable(\r\n currentPage: number,\r\n entries: number,\r\n query: string,\r\n sortType: number,\r\n ascending: boolean,\r\n lang: number\r\n): Promise<[StatusCodes, DropdownItemsTable | null]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/get/dropdownitem/${lang}/${sortType}/${ascending}?query=${query}`,\r\n {\r\n currentPage: currentPage,\r\n entries: entries,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as DropdownItemsTable];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method adds a new dropdown item.\r\nasync function addDropdownItem(\r\n language: number,\r\n request: DropdownItemEditRequest\r\n): Promise<[StatusCodes, string]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/add/dropdownitem/${language}`,\r\n request,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, \"\"];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, \"\"];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, \"\"];\r\n case StatusCodes.CONFLICT.valueOf():\r\n return [StatusCodes.CONFLICT, axiosError.response.data as any];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n }\r\n }\r\n}\r\n\r\n// This method updates an existing dropdown item.\r\nasync function editDropdownItem(\r\n id: number,\r\n language: number,\r\n request: DropdownItemEditRequest\r\n): Promise<[StatusCodes, string]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/edit/dropdownitem/${id}/${language}`,\r\n request,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, \"\"];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, \"\"];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, axiosError.response.data as any];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"\"];\r\n }\r\n }\r\n}\r\n\r\n// This method deletes an existing dropdown item.\r\nasync function deleteDropdownItem(id: number): Promise {\r\n try {\r\n const resp = await axios.delete(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/delete/dropdownitem/${id}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method gets app update messages.\r\nasync function getAppSupportMessages(\r\n langId: number\r\n): Promise<[StatusCodes, AppSupportMessage[] | null]> {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.maintainance}/appsupport/${langId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as AppSupportMessage[]];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method adds a new app update message.\r\nasync function addAppSupportMessage(\r\n langId: number,\r\n appMessage: EditAppSupportMessage\r\n): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.maintainance}/add/appsupport/${langId}`,\r\n appMessage,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.CONFLICT.valueOf():\r\n return StatusCodes.CONFLICT;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method updates an existing app update message.\r\nasync function updateAppSupportMessage(\r\n langId: number,\r\n id: number,\r\n appMessage: EditAppSupportMessage\r\n): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.maintainance}/appsupport/${langId}/${id}`,\r\n appMessage,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.CONFLICT.valueOf():\r\n return StatusCodes.CONFLICT;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method removes an app update message.\r\nasync function removeAppSupportMessage(id: number): Promise {\r\n try {\r\n const resp = await axios.delete(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.maintainance}/remove/appsupport/${id}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.CONFLICT.valueOf():\r\n return StatusCodes.CONFLICT;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method gets app update titles.\r\nasync function getAppSupportMessageTitles(\r\n langId: number\r\n): Promise<[StatusCodes, AppSupportMessageTitle[] | null]> {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.maintainance}/appsupport/title/${langId}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data as AppSupportMessageTitle[]];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method adds a new app update title.\r\nasync function addAppSupportMessageTitle(\r\n langId: number,\r\n appMessageTitle: EditAppSupportMessageTitle\r\n): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.maintainance}/add/appsupport/title/${langId}`,\r\n appMessageTitle,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.CONFLICT.valueOf():\r\n return StatusCodes.CONFLICT;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method updates an existing app update title.\r\nasync function updateAppSupportMessageTitle(\r\n langId: number,\r\n id: number,\r\n appMessageTitle: EditAppSupportMessageTitle\r\n): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.maintainance}/appsupport/title/${langId}/${id}`,\r\n appMessageTitle,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.CONFLICT.valueOf():\r\n return StatusCodes.CONFLICT;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method removes an app update title.\r\nasync function removeAppSupportMessageTitle(id: number): Promise {\r\n try {\r\n const resp = await axios.delete(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.maintainance}/remove/appsupport/title/${id}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n case StatusCodes.CONFLICT.valueOf():\r\n return StatusCodes.CONFLICT;\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return StatusCodes.NOT_FOUND;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method adds a website view.\r\nasync function addWebsiteView(): Promise {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/visit`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: false,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method gets statistics about the website views.\r\nasync function getWebsiteViewStatistics(\r\n sortType: number,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise<[StatusCodes, ViewStatistics | null]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.statistics}/visit/${sortType}/${ascending}`,\r\n {\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [\r\n StatusCodes.OK,\r\n Funcs.mapJsonToViewStatistics(JSON.stringify(resp.data)),\r\n ];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, null];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, null];\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return [StatusCodes.NOT_FOUND, null];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, null];\r\n }\r\n }\r\n}\r\n\r\n// This method exports the general stats into an excel sheet.\r\nasync function exportGeneralStats(): Promise {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.file}/generalstats`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = resp.data.link;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method exports the general stats into an excel sheet.\r\nasync function exportQueryStats(\r\n query: string,\r\n sortType: number,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.file}/querystats/${sortType}/${ascending}?query=${query}`,\r\n {\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = resp.data.link;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method exports the stats about users into an excel sheet.\r\nasync function exportUserStats(\r\n query: string,\r\n sortType: number,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.file}/userstats/${sortType}/${ascending}?query=${query}`,\r\n {\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = resp.data.link;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method exports the stats about songs into an excel sheet.\r\nasync function exportSongStats(\r\n query: string,\r\n sortType: number,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.file}/songstats/${sortType}/${ascending}?query=${query}`,\r\n {\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = resp.data.link;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method exports the stats about carts into an excel sheet.\r\nasync function exportCartStats(\r\n query: string,\r\n sortType: number,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.file}/cartstats/${sortType}/${ascending}?query=${query}`,\r\n {\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = resp.data.link;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method exports the stats about dropdowns into an excel sheet.\r\nasync function exportDropdownStats(\r\n query: string,\r\n language: number,\r\n sortType: number,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.file}/dropdownstats/${language}/${sortType}/${ascending}?query=${query}`,\r\n {\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = resp.data.link;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method exports the stats about views into an excel sheet.\r\nasync function exportViewStats(\r\n sortType: number,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.file}/viewstats/${sortType}/${ascending}`,\r\n {\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = resp.data.link;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\nasync function exportNameCountStats(type: number, sortByCount: boolean, ascending: boolean) {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.file}/nameCount/${type}/${sortByCount == true ? 1 : 2}/${ascending}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = resp.data.link;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\nasync function exportPerMonthStatsStats(\r\n type: number,\r\n sortAfterDate: boolean,\r\n ascending: boolean,\r\n startDate: number,\r\n endDate: number\r\n): Promise {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.file}/monthlystats/${type}/${sortAfterDate}/${ascending}`,\r\n {\r\n startDateUnix: startDate,\r\n endDateUnix: endDate,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = resp.data.link;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n document.body.appendChild(link);\r\n link.click();\r\n return StatusCodes.OK;\r\n }\r\n\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return StatusCodes.UNAUTHORIZED;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return StatusCodes.BAD_REQUEST;\r\n default:\r\n return StatusCodes.INTERNAL_SERVER_ERROR;\r\n }\r\n }\r\n}\r\n\r\n// This method exports an album into an excel sheet.\r\nasync function exportKokoIDAlbumAsExcel(\r\n kokoAlbum: string\r\n): Promise<[StatusCodes, string]> {\r\n if (kokoAlbum == \"\") {\r\n throw new Error(\"ID can't be empty!\");\r\n }\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/songexport/album`,\r\n {\r\n KokoId: kokoAlbum,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n const url = resp.data.link;\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n document.body.appendChild(link);\r\n link.click();\r\n return [StatusCodes.OK, ''];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, ''];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, ''];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, axiosError.response.data as string];\r\n case StatusCodes.NOT_FOUND.valueOf():\r\n return [StatusCodes.NOT_FOUND, axiosError.response.data as string];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR,''];\r\n }\r\n }\r\n}\r\n\r\nasync function searchForSimilarTrackWithKokoId(\r\n kokoId: string\r\n): Promise<[StatusCodes, SimilarMatch[] | string]> {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/similar/id/${encodeURIComponent(kokoId)}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"Server Error\"];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, axiosError.response.data as string];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, axiosError.response.data as string];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"Server Error\"];\r\n }\r\n }\r\n}\r\n\r\nasync function getDurationOfVideo(\r\n url: string\r\n): Promise {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/duration/web/${encodeURIComponent(url)}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return resp.data;\r\n }\r\n\r\n return -1;\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return -1;\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return -1;\r\n default:\r\n return -1;\r\n }\r\n }\r\n}\r\n\r\nasync function searchForSimilarTrackWithWeblink(\r\n link: string,\r\n startTime: number\r\n): Promise<[StatusCodes, SimilarMatch[] | string]> {\r\n try {\r\n const resp = await axios.get(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/similar/web/${encodeURIComponent(link)}?start=${startTime}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"Server Error\"];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, axiosError.response.data as string];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, axiosError.response.data as string];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"Server Error\"];\r\n }\r\n }\r\n}\r\n\r\nasync function searchForSimilarTrackWithFile(\r\n file: File\r\n): Promise<[StatusCodes, SimilarMatch[] | string]> {\r\n if (file == null) {\r\n throw new Error(\"File can't be empty!\");\r\n }\r\n\r\n const formData = new FormData();\r\n\r\n formData.append(\"file\", file);\r\n\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/similar/file`,\r\n formData,\r\n {\r\n headers: {\r\n \"Content-Type\": \"audio/mp3\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"Server Error\"];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, axiosError.response.data as string];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, axiosError.response.data as string];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"Server Error\"];\r\n }\r\n }\r\n}\r\n\r\nasync function populateSimilarTracks(\r\n matches: SimilarMatch[]\r\n): Promise<[StatusCodes, SongInfo[] | string]> {\r\n try {\r\n const resp = await axios.post(\r\n `${process.env.VUE_APP_URL}${apiRouteNames.prefix}${apiRouteNames.song}/populate`,\r\n matches,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (resp.status === 200) {\r\n return [StatusCodes.OK, resp.data];\r\n }\r\n\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"Server Error\"];\r\n } catch (error: any) {\r\n const axiosError = error as AxiosError;\r\n switch (axiosError.response?.status) {\r\n case StatusCodes.UNAUTHORIZED.valueOf():\r\n return [StatusCodes.UNAUTHORIZED, axiosError.response.data as string];\r\n case StatusCodes.BAD_REQUEST.valueOf():\r\n return [StatusCodes.BAD_REQUEST, axiosError.response.data as string];\r\n default:\r\n return [StatusCodes.INTERNAL_SERVER_ERROR, \"Server Error\"];\r\n }\r\n }\r\n}\r\n\r\n//TODO: Aufteilen\r\n//getCart\r\nconst RequestFuncs = {\r\n login,\r\n logout,\r\n songSearch,\r\n directLuceneSearch,\r\n getSongDetailed,\r\n getDropDownItems,\r\n register,\r\n createPasswordResetLink,\r\n resetPassword,\r\n getAccountInfo,\r\n updateEmail,\r\n updateAccount,\r\n verifyEmail,\r\n verifyUser,\r\n getCarts,\r\n getCartsInfo,\r\n deleteCart,\r\n deleteCarts,\r\n updateCart,\r\n getCartSongs,\r\n createCart,\r\n loadCart,\r\n deleteSongInCart,\r\n deleteSongsInCart,\r\n addSongToCart,\r\n addSongsToCart,\r\n downloadAllSongsAsMP3,\r\n downloadAllSongsAsWAV,\r\n getPublicLink,\r\n downloadAkmFile,\r\n searchSongInCart,\r\n searchUser,\r\n shareCartWithUsers,\r\n getShortAccountInfo,\r\n getExportTargets,\r\n exportTargetSong,\r\n getTargetExportSongs,\r\n getPublicSongs,\r\n searchPublicSong,\r\n downloadWavZip,\r\n downloadMp3Zip,\r\n copyCart,\r\n getSortedSongs,\r\n switchTrackItemsOrder,\r\n moveTrackItemToPos,\r\n getLatestCollections,\r\n getThemeCarts,\r\n editThemeCart,\r\n deleteThemeCart,\r\n deleteThemeCarts,\r\n getThemecartsCoverFileNames,\r\n createThemecart,\r\n uploadCollectionCoverFile,\r\n searchThemeCarts,\r\n exportCartAsExcel,\r\n exportKokoIDsAsExcel,\r\n getMaintainanceInfo,\r\n updateMaintainanceInfo,\r\n getAllMaintainanceInfo,\r\n cloneThemeCart,\r\n blockUser,\r\n unblockUser,\r\n getSortedUsers,\r\n deleteUser,\r\n verifyUserAsAdmin,\r\n getQueryStatistics,\r\n getSongStatistics,\r\n getCartStatistics,\r\n getUserStatistics,\r\n getGeneralStatistics,\r\n getDropdownItemsForTable,\r\n addDropdownItem,\r\n editDropdownItem,\r\n deleteDropdownItem,\r\n getDropdownStatistics,\r\n getAppSupportMessages,\r\n addAppSupportMessage,\r\n updateAppSupportMessage,\r\n removeAppSupportMessage,\r\n getAppSupportMessageTitles,\r\n addAppSupportMessageTitle,\r\n updateAppSupportMessageTitle,\r\n removeAppSupportMessageTitle,\r\n addWebsiteView,\r\n getWebsiteViewStatistics,\r\n exportGeneralStats,\r\n exportCartStats,\r\n exportSongStats,\r\n exportUserStats,\r\n exportViewStats,\r\n exportQueryStats,\r\n exportDropdownStats,\r\n exportKokoIDAlbumAsExcel,\r\n getViewsPerMonth,\r\n getQueriesPerMonth,\r\n getNewUsersPerMonth,\r\n getDropdownsPerMonth,\r\n exportPerMonthStatsStats,\r\n searchForSimilarTrackWithKokoId,\r\n searchForSimilarTrackWithFile,\r\n searchForSimilarTrackWithWeblink,\r\n populateSimilarTracks,\r\n getDurationOfVideo,\r\n getGenreStatistics,\r\n getKeywordStatistics,\r\n exportNameCountStats\r\n};\r\n\r\nexport default RequestFuncs;\r\n","import { ARTISTTYPES } from \"./constants\";\r\n\r\n// This class represents a route object.\r\nclass RouteNav {\r\n // The name of the route.\r\n name: string;\r\n\r\n // The route link without the host part.\r\n route: string;\r\n\r\n constructor(name: string, route: string) {\r\n this.name = name;\r\n this.route = route;\r\n }\r\n}\r\n\r\n// This class represents an artist of a song.\r\nclass ArtistInfo {\r\n // The name of the artist.\r\n name: string;\r\n\r\n // The type of artist.\r\n // See ARTISTTYPES.\r\n type: string;\r\n\r\n constructor(name: string, type: string) {\r\n this.name = name;\r\n if (ARTISTTYPES.indexOf(type) === -1) {\r\n throw Error(\"Artisttype unknown\");\r\n }\r\n\r\n this.type = type;\r\n }\r\n}\r\n\r\n// This class represents information about a song.\r\nclass SongInfo {\r\n // The id of the song in the db.\r\n id: number;\r\n\r\n // The koko id of the song.\r\n kokoId: string;\r\n\r\n // The title of the song.\r\n title: string;\r\n\r\n // The album name that contains the stone.\r\n album: string;\r\n\r\n // The duration of the song in seconds.\r\n duration: number;\r\n\r\n // The name of the coverfile.\r\n coverFilename: string;\r\n\r\n // A boolean indicating wether to hide the addToCart button in the song table.\r\n isInCart: boolean;\r\n\r\n // This list contains all the artists that composed the song.\r\n artists: ArtistInfo[];\r\n\r\n // This list contains all keywords of the song.\r\n keywords: string[];\r\n\r\n // A boolean indicating wether the song is selected or not.\r\n isSelected: boolean;\r\n\r\n // A list of genres the song belongs to.\r\n genres: string[];\r\n\r\n // A list of instruments that are played.\r\n songbodies: string[];\r\n\r\n // The recording year of the song.\r\n yearOfRecording: number;\r\n\r\n // The industry number of the song.\r\n industryNumber: string;\r\n\r\n // A boolean indicating wether the song is showing all information.\r\n isDetailedView: boolean;\r\n\r\n // A boolean indicating wether the song is playing or not.\r\n isPlaying: boolean;\r\n\r\n similarityScore: number = -1;\r\n\r\n constructor(\r\n id: number,\r\n kokoId: string,\r\n title: string,\r\n album: string,\r\n duration: number,\r\n coverFilename: string,\r\n isInCart: boolean,\r\n keywords: string[],\r\n isSelected = false,\r\n artists: ArtistInfo[],\r\n genres: string[],\r\n songbodies: string[],\r\n yearOfRecording: number,\r\n industryNumber: string,\r\n isDetailedView = false,\r\n isPlaying = false,\r\n similarityScore = -1\r\n ) {\r\n this.id = id;\r\n this.kokoId = kokoId;\r\n this.title = title;\r\n this.album = album;\r\n this.duration = duration;\r\n this.coverFilename = coverFilename;\r\n this.isInCart = isInCart;\r\n this.keywords = keywords;\r\n this.isSelected = isSelected;\r\n this.artists = artists;\r\n this.genres = genres;\r\n this.songbodies = songbodies;\r\n this.yearOfRecording = yearOfRecording;\r\n this.industryNumber = industryNumber;\r\n this.isDetailedView = isDetailedView;\r\n this.isPlaying = isPlaying;\r\n this.similarityScore = similarityScore;\r\n }\r\n}\r\n\r\n// This class represents the information about a user created cart.\r\nclass CartInfo {\r\n // The id of the cart in the db.\r\n shoppingCartId: number;\r\n\r\n // The name of the cart.\r\n name: string;\r\n\r\n // The description of the cart.\r\n description: string;\r\n\r\n // The creation date if the cart.\r\n creationDate: Date;\r\n\r\n // The last loading date of the cart.\r\n lastLoadingDate: Date;\r\n\r\n // The number of total songs in the cart.\r\n totalResults: number;\r\n\r\n // A boolean indicating wether the cart is selected or not.\r\n isSelected: boolean;\r\n\r\n constructor(\r\n shoppingCartId: number,\r\n name: string,\r\n description: string,\r\n creationDate: Date,\r\n lastLoadingDate: Date,\r\n totalResults = 0,\r\n isSelected = false\r\n ) {\r\n this.shoppingCartId = shoppingCartId;\r\n this.name = name;\r\n this.description = description;\r\n this.creationDate = creationDate;\r\n this.lastLoadingDate = lastLoadingDate;\r\n this.totalResults = totalResults;\r\n this.isSelected = isSelected;\r\n }\r\n}\r\n\r\n// This class represents the model for the cart table.\r\n// Because it supports paggination not all carts are shown at the same time.\r\nclass CartsResponse {\r\n // A list of carts that belong to the user.\r\n carts: CartInfo[];\r\n\r\n // The number of total carts.\r\n totalResults: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(carts: CartInfo[], totalResults: number) {\r\n this.carts = carts;\r\n this.totalResults = totalResults;\r\n }\r\n}\r\n\r\n// This class represents the item for the dropdown menus in the searchForm component.\r\nclass DropdownItem {\r\n // The id of the item.\r\n id: number;\r\n\r\n // The localized text of the item.\r\n name: string;\r\n\r\n constructor(id: number, name: string) {\r\n this.id = id;\r\n this.name = name;\r\n }\r\n}\r\n\r\n// This class is used to display short inforamtion about a user.\r\n// This is used whenever you search for a user.\r\nclass UserResult {\r\n // The idmof the user in the db.\r\n id: number;\r\n\r\n // The fullname of the user.\r\n name: string;\r\n\r\n // The email of the user.\r\n email: string;\r\n\r\n constructor(id: number, name: string, email: string) {\r\n this.id = id;\r\n this.name = name;\r\n this.email = email;\r\n }\r\n}\r\n\r\n// This class is used to export a song to a target.\r\nclass TargetExportRequest {\r\n // The first name of the user that exports the cart.\r\n firstName: string;\r\n\r\n // The last name of the user.\r\n lastName: string;\r\n\r\n // The email of the user.\r\n email: string;\r\n\r\n // The production number of the export.\r\n productionNumber: string;\r\n\r\n // The target of the export.\r\n uncPath: string;\r\n\r\n // The id of the song that gets exported.\r\n songId: number;\r\n\r\n constructor(\r\n name: string,\r\n surname: string,\r\n email: string,\r\n productionNumber: string,\r\n uncPath: string,\r\n songId: number\r\n ) {\r\n this.firstName = name;\r\n this.lastName = surname;\r\n this.email = email;\r\n this.productionNumber = productionNumber;\r\n this.uncPath = uncPath;\r\n this.songId = songId;\r\n }\r\n}\r\n\r\n// This class is used to represent a possible target for the export.\r\nclass TargetExportTargetItem {\r\n // The description of the target.\r\n description: string;\r\n\r\n // The path of the target.\r\n uncPath: string;\r\n\r\n constructor(description: string, uncPath: string) {\r\n this.description = description;\r\n this.uncPath = uncPath;\r\n }\r\n}\r\n\r\n// This class contains all informationa about the target export request.\r\n// This object is mainly used in the vuex storage.\r\nclass TargetExportProp {\r\n // The name of the user that wants to export the cart.\r\n firstName: string;\r\n\r\n // The last name of the user that wants to export the cart.\r\n lastName: string;\r\n\r\n // The email of the user.\r\n email: string;\r\n\r\n // The production number of the export.\r\n productionNumber: string;\r\n\r\n // The target to export to.\r\n uncPath: string;\r\n\r\n // The name of the cart that will be exported.\r\n cartName: string;\r\n\r\n // The id of the cart that will be exported.\r\n cartId: number;\r\n\r\n constructor(\r\n name: string,\r\n surname: string,\r\n email: string,\r\n productionNumber: string,\r\n uncPath: string,\r\n cartName: string,\r\n cartId: number\r\n ) {\r\n this.firstName = name;\r\n this.lastName = surname;\r\n this.email = email;\r\n this.productionNumber = productionNumber;\r\n this.uncPath = uncPath;\r\n this.cartName = cartName;\r\n this.cartId = cartId;\r\n }\r\n}\r\n\r\n// This class holds information about a song that will be exported.\r\nclass TargetExportSongInfo {\r\n // The kokoid of the song that will be exported.\r\n kokoId: string;\r\n\r\n // The id of the song that will be exported.\r\n songId: number;\r\n\r\n // The title of the song that will be exported.\r\n title: string;\r\n\r\n // The duration of the song that will be exported.\r\n length: string;\r\n\r\n // A boolean indicating wether the song has been exported.\r\n hasBeenExported: boolean;\r\n\r\n /**\r\n *\r\n */\r\n constructor(\r\n kokoId: string,\r\n songId: number,\r\n title: string,\r\n length: string,\r\n hasBeenExported = false\r\n ) {\r\n this.kokoId = kokoId;\r\n this.songId = songId;\r\n this.title = title;\r\n this.length = length;\r\n this.hasBeenExported = hasBeenExported;\r\n }\r\n}\r\n\r\n// This class holds user account information.\r\nclass AccountInfo {\r\n // The title of the user.\r\n title: string;\r\n\r\n // The first name of the user.\r\n name: string;\r\n\r\n // The last name of the user.\r\n surname: string;\r\n\r\n // The company of the user.\r\n company: string;\r\n\r\n // The job of the user.\r\n job: string;\r\n\r\n // The cel number of the user.\r\n cel: string;\r\n\r\n // The cel prefix of the user.\r\n celPrefix: string;\r\n\r\n constructor(\r\n title: string,\r\n name: string,\r\n surname: string,\r\n company: string,\r\n job: string,\r\n cel: string,\r\n celPrefix: string\r\n ) {\r\n this.title = title;\r\n this.name = name;\r\n this.surname = surname;\r\n this.company = company;\r\n this.job = job;\r\n this.cel = cel;\r\n this.celPrefix = celPrefix;\r\n }\r\n}\r\n\r\n// This class holds a short version of user account information.\r\nclass ShortAccountInfo {\r\n // The first name of the user.\r\n name: string;\r\n\r\n // The last name of the user.\r\n surname: string;\r\n\r\n // The email of the user.\r\n email: string;\r\n\r\n constructor(name: string, surname: string, email: string) {\r\n this.name = name;\r\n this.surname = surname;\r\n this.email = email;\r\n }\r\n}\r\n\r\n// This class holds search parameters hat are used by the search mask.\r\nclass SongSearchForm {\r\n // The current page of the search.\r\n currentPage: number;\r\n\r\n // The number of enmtries to retrieve.\r\n numberOfSongs: number;\r\n\r\n // The choosen music style.\r\n musicStyle: number;\r\n\r\n // The choosen emotion.\r\n emotion: number;\r\n\r\n // The choosen music occasion.\r\n musicOccasion: number;\r\n\r\n // The choosen instrument.\r\n instrument: number;\r\n\r\n // The minimum duration of the song in minutes.\r\n musicMinTimeM: number;\r\n\r\n // The minimum duration of the song in seconds.\r\n musicMinTimeS: number;\r\n\r\n // The maximum duration of the song in minutes.\r\n musicMaxTimeM: number;\r\n\r\n // The maximum duration of the song in seconds.\r\n musicMaxTimeS: number;\r\n\r\n // The search query of the song.\r\n query: string;\r\n\r\n // The id of the current cart\r\n cartId: number;\r\n\r\n constructor(\r\n currentPage = 1,\r\n numberOfSongs = 15,\r\n musicStyle = -1,\r\n emotion = -1,\r\n musicOccasion = -1,\r\n instrument = -1,\r\n musicMinTimeM = -1,\r\n musicMinTimeS = -1,\r\n musicMaxTimeM = -1,\r\n musicMaxTimeS = -1,\r\n query = \"\",\r\n cartId = -1\r\n ) {\r\n this.currentPage = currentPage;\r\n this.numberOfSongs = numberOfSongs;\r\n this.emotion = emotion;\r\n this.instrument = instrument;\r\n this.musicStyle = musicStyle;\r\n this.musicOccasion = musicOccasion;\r\n this.musicMinTimeM = musicMinTimeM;\r\n this.musicMinTimeS = musicMinTimeS;\r\n this.musicMaxTimeM = musicMaxTimeM;\r\n this.musicMaxTimeS = musicMaxTimeS;\r\n this.query = query;\r\n this.cartId = cartId;\r\n }\r\n}\r\n\r\n// This class represents a lucene search request only used by mv employees.\r\n// This request is unsanitized.\r\nclass LuceneSearchRequest {\r\n // The search string.\r\n query: string;\r\n\r\n // The current page of the search.\r\n currentpage: number;\r\n\r\n // The number of entries to retrieve.\r\n numberOfSongs: number;\r\n\r\n // The id of the currently active cart.\r\n cartId: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(\r\n query: string,\r\n currentpage: number,\r\n numberOfSongs: number,\r\n cartId = -1\r\n ) {\r\n this.query = query;\r\n this.currentpage = currentpage;\r\n this.numberOfSongs = numberOfSongs;\r\n this.cartId = cartId;\r\n }\r\n}\r\n\r\n// This class is used to register a new account.\r\nclass CreateAccountRequest extends AccountInfo {\r\n // The email of the user.\r\n email: string;\r\n\r\n // The password of the user.\r\n password: string;\r\n /**\r\n *\r\n */\r\n constructor(\r\n title: string,\r\n name: string,\r\n surname: string,\r\n company: string,\r\n job: string,\r\n cel: string,\r\n celPrefix: string,\r\n email: string,\r\n password: string\r\n ) {\r\n super(title, name, surname, company, job, cel, celPrefix);\r\n this.email = email;\r\n this.password = password;\r\n }\r\n}\r\n\r\n// This class is used to encapsulate song responses from the api.\r\n// Used in the songTable component.\r\nclass SongSearchResponse {\r\n // A list of songs that show in the view.\r\n searchResult: SongInfo[];\r\n\r\n // The total amount of songs in the cart/search.\r\n totalResults: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(searchResult: SongInfo[], totalResults: number) {\r\n this.searchResult = searchResult;\r\n this.totalResults = totalResults;\r\n }\r\n}\r\n\r\n// This class is used to encapsulate song responses from the api.\r\n// Only used when dealing with a public cart.\r\n// Used in the songTable component.\r\nclass PublicCartResponse {\r\n // A list of songs that show in the view.\r\n searchResult: SongInfo[];\r\n\r\n // The total amount of songs in the cart/search.\r\n totalResults: number;\r\n\r\n // The name of the public cart.\r\n cartName: string;\r\n\r\n /**\r\n *\r\n */\r\n constructor(searchResult: SongInfo[], totalResults: number, cartName: string) {\r\n this.searchResult = searchResult;\r\n this.totalResults = totalResults;\r\n this.cartName = cartName;\r\n }\r\n}\r\n\r\n// This class represents a verification response from the api.\r\nclass VerifyResponse {\r\n // The email of the verified user.\r\n email: string;\r\n\r\n // The verification mode.\r\n //Either verification or change\r\n mode: string;\r\n /**\r\n *\r\n */\r\n constructor(email: string, mode: string) {\r\n this.email = email;\r\n this.mode = mode;\r\n }\r\n}\r\n\r\n// This class hold information about theme collections.\r\n// This is used in the news popup.\r\nclass Themecart {\r\n // The id of the collection\r\n id: number;\r\n\r\n // The title of the collection.\r\n title: string;\r\n\r\n // The description of the collection.\r\n description: string;\r\n\r\n // The guid of the public cart that belongs to the collecion.\r\n publicGuid: string;\r\n\r\n /**\r\n *\r\n */\r\n constructor(\r\n id: number,\r\n title: string,\r\n description: string,\r\n publicGuid: string\r\n ) {\r\n this.id = id;\r\n this.title = title;\r\n this.description = description;\r\n this.publicGuid = publicGuid;\r\n }\r\n}\r\n\r\n// This class is used display a themecart in the news modal.\r\nclass ExtendedThemecart extends Themecart {\r\n // The order number.\r\n // This is used in the newsmodal to decide the color of the description box.\r\n order: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(\r\n id: number,\r\n title: string,\r\n description: string,\r\n publicGuid: string,\r\n order: number\r\n ) {\r\n super(id, title, description, publicGuid);\r\n this.order = order;\r\n }\r\n}\r\n\r\n// This class holds information about an array of theme collections.\r\n// Used by the admin view for the table.\r\nclass ThemecartsAdminInfo {\r\n // Gets or sets an array of theme collection objects.\r\n carts: ThemecartAdminInfo[];\r\n\r\n // Gets or sets the number of theme collection entries.\r\n results: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(carts: ThemecartAdminInfo[], results: number) {\r\n this.carts = carts;\r\n this.results = results;\r\n }\r\n}\r\n\r\n// This class is used to edit a theme collection.\r\nclass ThemecartEditRequest {\r\n // The id of the collection\r\n id: number;\r\n\r\n // The title of the collection.\r\n title: string;\r\n\r\n // The description of the collection.\r\n description: string;\r\n\r\n // The name of the cart used.\r\n cartId: number;\r\n\r\n // Gets or sets a boolean indicating wether to show the theme collection in the news modal.\r\n showThemeCart: boolean;\r\n\r\n // Gets or sets the name of the cover file.\r\n coverFileName: string;\r\n\r\n constructor(\r\n id: number,\r\n title: string,\r\n description: string,\r\n coverFileName: string,\r\n cartId: number,\r\n show: boolean\r\n ) {\r\n this.id = id;\r\n this.title = title;\r\n this.description = description;\r\n this.coverFileName = coverFileName;\r\n this.cartId = cartId;\r\n this.showThemeCart = show;\r\n }\r\n}\r\n\r\n// This class hold information about theme collections.\r\n// This is used for the admin view.\r\nclass ThemecartAdminInfo {\r\n // The id of the collection\r\n id: number;\r\n\r\n // The title of the collection.\r\n title: string;\r\n\r\n // The description of the collection.\r\n description: string;\r\n\r\n // The guid of the public cart that belongs to the collecion.\r\n publicGuid: string;\r\n\r\n // The name of the cart used.\r\n cartId: number;\r\n\r\n cartName: string;\r\n\r\n // Gets or sets a boolean indicating wether to show the theme collection in the news modal.\r\n show: boolean;\r\n\r\n // Gets or sets a boolean indicating wether the item is selected or not.\r\n isSelected = false;\r\n\r\n // Gets or sets the name of the cover file.\r\n coverFileName: string;\r\n\r\n /**\r\n *\r\n */\r\n constructor(\r\n id: number,\r\n title: string,\r\n description: string,\r\n coverFileName: string,\r\n publicGuid: string,\r\n cartId: number,\r\n show: boolean,\r\n isSelected = false,\r\n cartName: string = ''\r\n ) {\r\n this.id = id;\r\n this.title = title;\r\n this.description = description;\r\n this.coverFileName = coverFileName;\r\n this.cartId = cartId;\r\n this.show = show;\r\n this.isSelected = isSelected;\r\n this.publicGuid = publicGuid;\r\n this.cartName = cartName;\r\n }\r\n}\r\n\r\n// This class is used to create a new theme collection.\r\nclass ThemecartCreateRequest {\r\n // The title of the collection.\r\n title: string;\r\n\r\n // The description of the collection.\r\n description: string;\r\n\r\n // The name of the cart used.\r\n cartId: number;\r\n\r\n showThemeCart: boolean;\r\n\r\n coverFileName: string;\r\n\r\n constructor(\r\n title: string,\r\n description: string,\r\n coverFileName: string,\r\n cartId: number,\r\n show: boolean\r\n ) {\r\n this.title = title;\r\n this.description = description;\r\n this.coverFileName = coverFileName;\r\n this.cartId = cartId;\r\n this.showThemeCart = show;\r\n }\r\n}\r\n\r\n// This class is used for the cartdropdown when creating a new theme colletion.\r\nclass DropDownCartItem {\r\n // Gets or sets the text of the selector item.\r\n text: string;\r\n\r\n // Gets or sets the value of the selector item.\r\n value: number | null;\r\n\r\n /**\r\n *\r\n */\r\n constructor(text: string, value: number | null) {\r\n this.text = text;\r\n this.value = value;\r\n }\r\n}\r\n\r\n// This class is used for the coverfile selector when creating a new theme colletion.\r\nclass DropDownCoverItem {\r\n // Gets or sets the name of the cover file.\r\n text: string;\r\n\r\n // Gets or sets the value of the cover file.\r\n value: string;\r\n\r\n /**\r\n *\r\n */\r\n constructor(text: string, value: string) {\r\n this.text = text;\r\n this.value = value;\r\n }\r\n}\r\n\r\n// This class holds information about a maintainance period.\r\n// This is displayed in the news modal.\r\nclass MaintainancePeriod {\r\n // Gets or sets the description of the period.\r\n description: string;\r\n\r\n // Gets or sets the start date of the period.\r\n startDate: Date;\r\n\r\n // Gets or sets the end date of the period.\r\n endDate: Date;\r\n\r\n constructor(description: string, startDate: Date, endDate: Date) {\r\n this.description = description;\r\n this.startDate = startDate;\r\n this.endDate = endDate;\r\n }\r\n}\r\n\r\n// This class is used when editing a maintainance period.\r\n// Used in the admin view.\r\nclass MaintainancePeriodEdit extends MaintainancePeriod {\r\n // Gets or sets the id of the perdiod entry.\r\n id: number;\r\n\r\n constructor(id: number, description: string, startDate: Date, endDate: Date) {\r\n super(description, startDate, endDate);\r\n this.id = id;\r\n }\r\n}\r\n\r\n// This class holds searchquery statistic.\r\nclass QueryResult {\r\n // Gets or sets the id of the entry.\r\n id: number;\r\n\r\n // Gets or sets the searchquery.\r\n query: string;\r\n\r\n // Gets or sets the numbers of results of the searchquery.\r\n results: number;\r\n\r\n // Gets or sets the number of times the searchquery was searched.\r\n timesCalled: number;\r\n\r\n emotion: string;\r\n\r\n musicOccasion: string;\r\n\r\n instrument: string;\r\n\r\n musicStyle: string;\r\n\r\n minDurationInSeconds: string;\r\n\r\n maxDurationInSeconds: string;\r\n\r\n dateAsString: string;\r\n /**\r\n *\r\n */\r\n constructor(\r\n id: number,\r\n query: string,\r\n results: number,\r\n timesCalled: number,\r\n emotion: string,\r\n musicOccasion: string,\r\n instrument: string,\r\n musicStyle: string,\r\n minDurationInSeconds: string,\r\n maxDurationInSeconds: string,\r\n dateAsString: string\r\n ) {\r\n this.id = id;\r\n this.query = query;\r\n this.results = results;\r\n this.timesCalled = timesCalled;\r\n this.emotion = emotion;\r\n this.musicOccasion = musicOccasion;\r\n this.instrument = instrument;\r\n this.musicStyle = musicStyle;\r\n this.minDurationInSeconds = minDurationInSeconds;\r\n this.maxDurationInSeconds = maxDurationInSeconds;\r\n this.dateAsString = dateAsString;\r\n }\r\n}\r\n\r\n// This class contains an array of searchquery entries and the total amount of searchresults.\r\nclass QueryResults {\r\n // Gets or sets an array of query statistic entries.\r\n queryResults: QueryResult[];\r\n\r\n // Gets or sets the total amount of searchresults.\r\n results: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(queryResults: QueryResult[], results: number) {\r\n this.queryResults = queryResults;\r\n this.results = results;\r\n }\r\n}\r\n\r\nclass NameCountStatistics{\r\n statistics: NameCountStatistic[];\r\n results: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(statistics: NameCountStatistic[],\r\n results: number) {\r\n this.statistics = statistics;\r\n this.results = results;\r\n \r\n }\r\n\r\n}\r\n\r\nclass NameCountStatistic{\r\n name: string;\r\n count: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(name: string,\r\n count: number) {\r\n this.name = name;\r\n this.count = count;\r\n \r\n }\r\n}\r\n\r\n// This class contains general statistics about the app.\r\nclass GeneralStatistic {\r\n // Gets or sets the total amount of songs.\r\n totalSongs: number;\r\n\r\n // Gets or sets the total amount of artists.\r\n totalArtists: number;\r\n\r\n // Gets or sets the total amount of registered users.\r\n totalRegisteredUsers: number;\r\n\r\n // Gets or sets the total amount of carts.\r\n totalCarts: number;\r\n\r\n // Gets or sets the average number of carts per user.\r\n averageCarts: number;\r\n\r\n // Gets or sets the average songs per cart.\r\n averageSongsPerCarts: number;\r\n\r\n // Gets or sets the number of users with no carts.\r\n userWithNoCarts: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(\r\n totalSongs: number,\r\n totalArtists: number,\r\n totalRegisteredUsers: number,\r\n totalCarts: number,\r\n averageCarts: number,\r\n averageSongsPerCarts: number,\r\n userWithNoCarts: number\r\n ) {\r\n this.totalSongs = totalSongs;\r\n this.totalArtists = totalArtists;\r\n this.totalRegisteredUsers = totalRegisteredUsers;\r\n this.totalCarts = totalCarts;\r\n this.averageCarts = averageCarts;\r\n this.averageSongsPerCarts = averageSongsPerCarts;\r\n this.userWithNoCarts = userWithNoCarts;\r\n }\r\n}\r\n\r\n// This class contains a statistic about a registered user.\r\nclass UserStatistic {\r\n // Gets or sets the id of the user.\r\n userId: number;\r\n\r\n // Gets or sets the registration date from the user.\r\n registrationDate: Date;\r\n\r\n // Gets or sets the title of the user.\r\n title: string;\r\n\r\n // Gets or sets the first name of the user.\r\n firstName: string;\r\n\r\n // Gets or sets the last name of the user.\r\n lastName: string;\r\n\r\n // Gets or sets the profession of the user.\r\n profession: string;\r\n\r\n // Gets or sets the company of the user.\r\n company: string;\r\n\r\n // Gets or sets the email of the user.\r\n email: string;\r\n\r\n // Gets or sets the cel number of the user.\r\n phoneNumber: string;\r\n\r\n // Gets or sets the account state of the user.\r\n accountState: string;\r\n\r\n // Gets or sets the number of carts the user owns.\r\n numberOfCarts: number;\r\n\r\n constructor(\r\n userId: number,\r\n registrationDate: Date,\r\n title: string,\r\n firstName: string,\r\n lastName: string,\r\n profession: string,\r\n company: string,\r\n email: string,\r\n phoneNumber: string,\r\n accountState: string,\r\n numberOfCarts: number\r\n ) {\r\n this.userId = userId;\r\n this.registrationDate = registrationDate;\r\n this.title = title;\r\n this.firstName = firstName;\r\n this.lastName = lastName;\r\n this.profession = profession;\r\n this.company = company;\r\n this.email = email;\r\n this.phoneNumber = phoneNumber;\r\n this.accountState = accountState;\r\n this.numberOfCarts = numberOfCarts;\r\n }\r\n}\r\n\r\n// This class contains an array of statistics about users and the total amount of user statistics.\r\nclass UserStatistics {\r\n // Gets or sets an array of user statisitcs.\r\n statistics: UserStatistic[];\r\n\r\n // Gets or sets the total amount of user statistics.\r\n results: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(statistics: UserStatistic[], results: number) {\r\n this.statistics = statistics;\r\n this.results = results;\r\n }\r\n}\r\n\r\n// This class contains a statistic about a track.\r\nclass SongStatistic {\r\n // Gets or sets the kokoid of the track.\r\n kokoId: string;\r\n\r\n // Gets or sets the title of the track.\r\n title: string;\r\n\r\n // Gets or sets the album of the track.\r\n album: string;\r\n\r\n // Gets or sets the duration of the track.\r\n duration: number;\r\n\r\n // Gets or sets the artists of the track.\r\n artists: ArtistInfo[];\r\n\r\n // Gets or sets the year of recording.\r\n yearOfRecording: number;\r\n\r\n // Gets or sets the total number of times the track was played.\r\n timesPlayed: number;\r\n\r\n // Gets or sets the total number of times the track was downloaded.\r\n timesDownloaded: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(\r\n kokoId: string,\r\n title: string,\r\n album: string,\r\n duration: number,\r\n artists: ArtistInfo[],\r\n yearOfRecording: number,\r\n timesPlayed: number,\r\n timesDownloaded: number\r\n ) {\r\n this.kokoId = kokoId;\r\n this.title = title;\r\n this.album = album;\r\n this.duration = duration;\r\n this.artists = artists;\r\n this.yearOfRecording = yearOfRecording;\r\n this.timesDownloaded = timesDownloaded;\r\n this.timesPlayed = timesPlayed;\r\n }\r\n}\r\n\r\n// This class contains an array of statistics about tracks and the total amount of track statistics.\r\nclass SongStatistics {\r\n // Gets or sets an array of track statistics.\r\n statistics: SongStatistic[];\r\n\r\n // Gets or sets the total number track statistics.\r\n results: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(statistics: SongStatistic[], results: number) {\r\n this.statistics = statistics;\r\n this.results = results;\r\n }\r\n}\r\n\r\n// This class contains a statistic about a cart.\r\nclass CartStatistic {\r\n // Gets or sets the title of the cart.\r\n title: string;\r\n\r\n // Gets or sets the number of songs in the cart.\r\n songCount: number;\r\n\r\n // Gets or sets the number of times the cart was called.\r\n timesCalled: number;\r\n\r\n // Gets or sets the guid of the cart.\r\n guid: string;\r\n\r\n /**\r\n *\r\n */\r\n constructor(\r\n title: string,\r\n songCount: number,\r\n timesCalled: number,\r\n guid: string\r\n ) {\r\n this.title = title;\r\n this.songCount = songCount;\r\n this.timesCalled = timesCalled;\r\n this.guid = guid;\r\n }\r\n}\r\n\r\n// This class contains an array of statistics about carts and the total amount of cart statistics.\r\nclass CartStatistics {\r\n // Gets or sets an array of statistics about carts.\r\n statistics: CartStatistic[];\r\n\r\n // Gets or sets the total amount of cart statistics.\r\n results: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(statistics: CartStatistic[], results: number) {\r\n this.statistics = statistics;\r\n this.results = results;\r\n }\r\n}\r\n\r\n// This class contains a statistic about a dropdown item.\r\nclass DropdownStatistic {\r\n // Gets or sets the unique name of the dropdown item.\r\n resourceSheetKey: string;\r\n\r\n // Gets or sets the lucene query of the dropdown item.\r\n lucenePattern: string;\r\n\r\n // Gets or sets the dropdown category of the item.\r\n category: string;\r\n\r\n // Gets or sets the number of times the dropdown was called.\r\n timesCalled: number;\r\n\r\n // Gets or sets the localized string of the dropdown.\r\n localization: string;\r\n\r\n /**\r\n *\r\n */\r\n constructor(\r\n resourceSheetKey: string,\r\n lucenePattern: string,\r\n category: string,\r\n timesCalled: number,\r\n localization: string\r\n ) {\r\n this.resourceSheetKey = resourceSheetKey;\r\n this.lucenePattern = lucenePattern;\r\n this.category = category;\r\n this.timesCalled = timesCalled;\r\n this.localization = localization;\r\n }\r\n}\r\n\r\n// This class contains an array of statistics about dropdown and the total amount of dropdown statistics.\r\nclass DropdownStatistics {\r\n // Gets or sets an array of statistics about dropdowns.\r\n statistics: DropdownStatistic[];\r\n\r\n // Gets or sets the total amount of dropdown statistics.\r\n results: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(statistics: DropdownStatistic[], results: number) {\r\n this.statistics = statistics;\r\n this.results = results;\r\n }\r\n}\r\n\r\n// This class is used by the diagram element in the statistics.\r\nclass BarDiagramItem {\r\n x: string;\r\n y: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(x: string, y: number) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n}\r\n\r\n// This class contains information about a registered user.\r\n// This class is used when managing users.\r\nclass UserInfo {\r\n // Gets or sets the id of the user.\r\n userId: number;\r\n\r\n // Gets or sets the registration date of the user.\r\n registrationDate: Date;\r\n\r\n // Gets or sets the title of the user.\r\n title: string;\r\n\r\n // Gets or sets the name of the user.\r\n firstName: string;\r\n\r\n // Gets or sets the last name of the user.\r\n lastName: string;\r\n\r\n // Gets or sets the profession of the user.\r\n profession: string;\r\n\r\n // Gets or sets the company of the user.\r\n company: string;\r\n\r\n // Gets or sets the email of the user.\r\n email: string;\r\n\r\n // Gets or sets the cel number of the user.\r\n phoneNumber: string;\r\n\r\n // Gets or sets the account state of the user.\r\n accountState: string;\r\n\r\n /**\r\n *\r\n */\r\n constructor(\r\n userId: number,\r\n registrationDate: Date,\r\n title: string,\r\n firstName: string,\r\n lastName: string,\r\n profession: string,\r\n company: string,\r\n email: string,\r\n phoneNumber: string,\r\n accountState: string\r\n ) {\r\n this.userId = userId;\r\n this.registrationDate = registrationDate;\r\n this.title = title;\r\n this.firstName = firstName;\r\n this.lastName = lastName;\r\n this.profession = profession;\r\n this.company = company;\r\n this.email = email;\r\n this.phoneNumber = phoneNumber;\r\n this.accountState = accountState;\r\n }\r\n}\r\n\r\n// This class contains an array of user objects and the total amount of users.\r\nclass UserSearchInfo {\r\n // Gets or sets the array of user objects.\r\n users: UserInfo[];\r\n\r\n // Gets or sets the total amount of users.\r\n results: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(users: UserInfo[], results: number) {\r\n this.users = users;\r\n this.results = results;\r\n }\r\n}\r\n\r\n// This class contains the information stored in a cookie.\r\nclass CredentialCookie {\r\n // Gets or sets a boolean indicating wether the user is a mv employee.\r\n isMVuser: boolean;\r\n\r\n // Gets or sets the name of the user.\r\n userName: string;\r\n\r\n /**\r\n *\r\n */\r\n constructor(isMVuser: boolean, userName: string) {\r\n this.isMVuser = isMVuser;\r\n this.userName = userName;\r\n }\r\n}\r\n\r\n// This class contains information about a dropdown item.\r\nclass DropdownItemTable {\r\n // Gets or sets the id of the dropdown item.\r\n id: number;\r\n\r\n // Gets or sets the unique name of the item.\r\n resourceSheetKey: string;\r\n\r\n // Gets or sets lucene pattern of the dropdown item.\r\n lucenePattern: string;\r\n\r\n // Gets or sets the dropdown category id.\r\n categoryId: number;\r\n\r\n // Gets or sets the localized string of the dropdown item.\r\n localization: string;\r\n\r\n /**\r\n *\r\n */\r\n constructor(\r\n id: number,\r\n resourceSheetKey: string,\r\n lucenePattern: string,\r\n categoryId: number,\r\n localization: string\r\n ) {\r\n this.id = id;\r\n this.resourceSheetKey = resourceSheetKey;\r\n this.lucenePattern = lucenePattern;\r\n this.categoryId = categoryId;\r\n this.localization = localization;\r\n }\r\n}\r\n\r\n// This class contains information about a collection of dropdown items.\r\nclass DropdownItemsTable {\r\n // Gets or sets an array of dropdown items.\r\n parameters: DropdownItemTable[];\r\n\r\n // Gets or sets the total amount of dropdown items.\r\n results: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(parameters: DropdownItemTable[], results: number) {\r\n this.parameters = parameters;\r\n this.results = results;\r\n }\r\n}\r\n\r\n// This class is used to edit or create a new dropdown item.\r\nclass DropdownItemEditRequest {\r\n // Gets or sets the unique name of the dropdown item.\r\n resourceSheetKey: string;\r\n\r\n // Gets or sets the lucene pattern of the dropdown.\r\n lucenePattern: string;\r\n\r\n // Gets or sets category dropdown id of the dropdown item.\r\n categoryId: number;\r\n\r\n // Gets or sets the localized name of the dropdown.\r\n localization: string;\r\n\r\n /**\r\n *\r\n */\r\n constructor(\r\n resourceSheetKey: string,\r\n lucenePattern: string,\r\n categoryId: number,\r\n localization: string\r\n ) {\r\n this.resourceSheetKey = resourceSheetKey;\r\n this.lucenePattern = lucenePattern;\r\n this.categoryId = categoryId;\r\n this.localization = localization;\r\n }\r\n}\r\n\r\n// This class is used for exporting a range of tracks to an excel file in the adminexcelview.\r\n// All songs inbetween the two ids gets exported to an excel sheet.\r\nclass KokoIdRange {\r\n // Gets or sets the kokoid of the first song to export.\r\n startKokoId: string;\r\n\r\n // Gets or sets the kokoid of the last song to export.\r\n endKokoId: string;\r\n\r\n /**\r\n *\r\n */\r\n constructor(startKokoId: string, endKokoId: string) {\r\n this.startKokoId = startKokoId;\r\n this.endKokoId = endKokoId;\r\n }\r\n}\r\n\r\n// This class contains information about an app update message.\r\nclass AppSupportMessage {\r\n // Gets or sets the id of the app update message.\r\n id: number;\r\n\r\n // Gets or sets localized string of the message.\r\n description: string;\r\n\r\n // Gets or sets the id of the associated title.\r\n appTitleId: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(id: number, description: string, appTitleId: number) {\r\n this.id = id;\r\n this.appTitleId = appTitleId;\r\n this.description = description;\r\n }\r\n}\r\n\r\n// This class is used to display a app messages in the table.\r\nclass AppSupportMessageUI extends AppSupportMessage {\r\n // Gets or sets the associated title of the message.\r\n title: string;\r\n /**\r\n *\r\n */\r\n constructor(\r\n id: number,\r\n appTitleId: number,\r\n description: string,\r\n title: string\r\n ) {\r\n super(id, description, appTitleId);\r\n this.title = title;\r\n }\r\n}\r\n\r\n// This class is used to edit or create a new app update message.\r\nclass EditAppSupportMessage {\r\n // Gets or sets the localized message.\r\n description: string;\r\n\r\n // Gets or sets the associated app title id.\r\n appTitleId: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(appTitleId: number, description: string) {\r\n this.description = description;\r\n this.appTitleId = appTitleId;\r\n }\r\n}\r\n\r\n// This class is used to display a title for app messages.\r\nclass AppSupportMessageTitle {\r\n // Gets or sets the localized message.\r\n id: number;\r\n\r\n // Gets or sets the associated app version id.\r\n title: string;\r\n\r\n constructor(title: string, id: number) {\r\n this.id = id;\r\n this.title = title;\r\n }\r\n}\r\n\r\n// This class is used to to display messages in the news modal.\r\nclass AppSupportMessageTitleUI extends AppSupportMessageTitle {\r\n // Gets or sets the messages to display.\r\n messages: AppSupportMessage[];\r\n\r\n /**\r\n *\r\n */\r\n constructor(title: string, id: number, messages: AppSupportMessage[]) {\r\n super(title, id);\r\n this.messages = messages;\r\n }\r\n}\r\n\r\n// This message is used to edit a title for app versions.\r\nclass EditAppSupportMessageTitle {\r\n // Gets or sets the associated app version id.\r\n title: string;\r\n\r\n constructor(title: string) {\r\n this.title = title;\r\n }\r\n}\r\n\r\n// This class contains a statistic about a website view entry.\r\nclass ViewStatistic {\r\n // Gets or sets the number of times the website was called.\r\n timesCalled: number;\r\n\r\n // Gets or sets the date of the entry.\r\n date: Date;\r\n\r\n /**\r\n *\r\n */\r\n constructor(timesCalled: number, date: Date) {\r\n this.timesCalled = timesCalled;\r\n this.date = date;\r\n }\r\n}\r\n\r\n// This class contains an array of statistics about website views and the total amount of website view statistics.\r\nclass ViewStatistics {\r\n // Gets or sets an array of view entries.\r\n statistics: ViewStatistic[];\r\n\r\n // Gets or sets the total number of entries.\r\n totalResults: number;\r\n\r\n // Gets or sets the total number of times a website was called.\r\n totalTimesCalled: number;\r\n\r\n /**\r\n *\r\n */\r\n constructor(\r\n statistics: ViewStatistic[],\r\n totalResults: number,\r\n totalTimesCalled: number\r\n ) {\r\n this.statistics = statistics;\r\n this.totalResults = totalResults;\r\n this.totalTimesCalled = totalTimesCalled;\r\n }\r\n}\r\n\r\n// This class is used to store information about the news cookie.\r\nclass NewsCookie {\r\n // Gets or sets the version of the cookie the user last saw.\r\n version: string;\r\n\r\n // Gets or sets the expiration date of the cookie.\r\n expirationDate: Date;\r\n\r\n /**\r\n *\r\n */\r\n constructor(version: string, expirationDate: Date) {\r\n this.version = version;\r\n this.expirationDate = expirationDate;\r\n }\r\n}\r\n\r\nclass SimilarMatch{\r\n outer_id: string;\r\n score: number;\r\n\r\n constructor(outer_id: string, score: number) {\r\n this.outer_id = outer_id;\r\n this.score = score;\r\n }\r\n}\r\n\r\nexport {\r\n RouteNav,\r\n ArtistInfo,\r\n SongInfo,\r\n CartInfo,\r\n DropdownItem,\r\n UserResult,\r\n TargetExportRequest,\r\n AccountInfo,\r\n SongSearchForm,\r\n SongSearchResponse,\r\n LuceneSearchRequest,\r\n CreateAccountRequest,\r\n VerifyResponse,\r\n CartsResponse,\r\n TargetExportTargetItem,\r\n TargetExportProp,\r\n ShortAccountInfo,\r\n TargetExportSongInfo,\r\n PublicCartResponse,\r\n Themecart,\r\n ExtendedThemecart,\r\n ThemecartAdminInfo,\r\n DropDownCartItem,\r\n DropDownCoverItem,\r\n ThemecartsAdminInfo,\r\n ThemecartEditRequest,\r\n ThemecartCreateRequest,\r\n MaintainancePeriod,\r\n MaintainancePeriodEdit,\r\n QueryResult,\r\n QueryResults,\r\n BarDiagramItem,\r\n UserInfo,\r\n UserSearchInfo,\r\n CartStatistic,\r\n CartStatistics,\r\n UserStatistic,\r\n UserStatistics,\r\n SongStatistic,\r\n SongStatistics,\r\n GeneralStatistic,\r\n CredentialCookie,\r\n DropdownItemTable,\r\n DropdownItemsTable,\r\n DropdownItemEditRequest,\r\n DropdownStatistics,\r\n DropdownStatistic,\r\n KokoIdRange,\r\n AppSupportMessage,\r\n EditAppSupportMessage,\r\n AppSupportMessageTitle,\r\n EditAppSupportMessageTitle,\r\n ViewStatistic,\r\n ViewStatistics,\r\n AppSupportMessageUI,\r\n NewsCookie,\r\n AppSupportMessageTitleUI,\r\n SimilarMatch,\r\n NameCountStatistic,\r\n NameCountStatistics\r\n};\r\n","import i18n from \"@/plugins/i18n\";\r\nimport { RouteNav } from \"./classes\";\r\nimport {\r\n IApiRouteNames,\r\n IPerMonthStatistics,\r\n IRoutesNames,\r\n} from \"./interfaces\";\r\n\r\n// The possible artist types.\r\n// Used in SongInfo class.\r\nconst ARTISTTYPES = [\"Interpret\", \"Composer\", \"Editor\", \"Texter\"];\r\n\r\n// The possible phone prefixes.\r\nconst PHONEPREFIXES = [\"+43\", \"+49\", \"+41\"];\r\n\r\n// The regex pattern to validate passwords.\r\nconst PASSWORD_REGEX_PAT =\r\n /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[\\!\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\-\\.\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^_\\{\\|\\}\\~\\\\\\/]).{6,}$/;\r\n\r\n// The regex pattern to validate celphones.\r\nconst CEL_REGEX_PAT = /^[0-9]*$/;\r\n\r\n// The regex pattern for a valid kokoid.\r\nconst KokoId_REGEX_PAT = /^CD33(\\/[0-9]{1,5})+(_Z)?$/;\r\n\r\n// The regex pattern for a valid kokoid album.\r\nconst KokoId_Album_REGEX_PAT = /^CD33(\\/[0-9]{1,5})$/;\r\n\r\nconst Similaritysearch_URL_PAT =\r\n /^https:\\/\\/(www\\.)?((youtu\\.be\\/.*|youtube\\.com\\/watch\\?.*)|soundcloud\\.com.*)$/;\r\n\r\nconst Similaritysearch_Youtube_PAT = /^https:\\/\\/(www\\.)?(youtu\\.be|youtube\\.com\\/watch\\?.*)$/;\r\n\r\n// The selector of how many song results to show per page.\r\n// Used mainly by pagination.\r\nconst SONG_RESULTS_PER_PAGE = [15, 25, 35];\r\n\r\n// The selector of how many cart results to show per page.\r\n// Used mainly by pagination.\r\nconst CART_RESULTS_PER_PAGE = [5, 10, 15];\r\n\r\n// The key to identify played songs in localstorage.\r\nconst SONGS_PLAYED_LOCALSTORAGE_KEY = \"musiclibraySongsPlayed\";\r\n\r\n// The cookie key for the users email.\r\nconst USER_SESSIONSTORAGE_KEY = \"user\";\r\n\r\n// The cookie key to see if the user is a MV user.\r\nconst IS_MV_USER_SESSIONSTORAGE_KEY = \"isMvUser\";\r\n\r\n// The session storage key that holds the latest search.\r\nconst SEARCH_FORM_SESSIONSTORAGE_KEY = \"search\";\r\n\r\n// The routes for a dropdown.\r\nconst navMusikverlagDropDownDE = [\r\n new RouteNav(\"Home\", \"https://musikverlag.orf.at/\"),\r\n new RouteNav(\r\n \"Über den Musikverlag\",\r\n \"https://musikverlag.orf.at/musikverlag/ueber-den-musikverlag/\"\r\n ),\r\n // new RouteNav(\r\n // \"Infos für Musikschaffende\",\r\n // \"https://musikverlag.orf.at/musikverlag/infos-fuer-musikschaffende/\"\r\n // ),\r\n // new RouteNav(\r\n // \"Infos für ORF-Gestalter & Filmschaffende\",\r\n // \"https://musikverlag.orf.at/musikverlag/infos-fuer-orf-gestalter-filmschaffende/\"\r\n // ),\r\n // new RouteNav(\r\n // \"Infos für Werbetreibende\",\r\n // \"https://musikverlag.orf.at/musikverlag/infos-fuer-werbetreibende/\"\r\n // ),\r\n new RouteNav(\r\n \"Unsere Komponistinnen/Komponisten\",\r\n \"https://musikverlag.orf.at/musikverlag/unsere-komponistinnenkomponisten/\"\r\n ),\r\n];\r\n\r\n// The routes for a dropdown.\r\nconst navMusiclibraryDropDownDE = [\r\n new RouteNav(\"Musiksuche\", \"/song/index/\"),\r\n\r\n];\r\n\r\n// The routes for a dropdown.\r\nconst navSammelkorbDropDownDE = [\r\n new RouteNav(\"MusikSammlungen\", \"/song/index/popup\"),\r\n // new RouteNav(\"Ähnlichkeitssuche\", \"/song/similarity-search\"),\r\n new RouteNav(\"Aktueller Sammelkorb\", \"/shoppingcart/index\"),\r\n new RouteNav(\"Meine Sammelkörbe\", \"/shoppingcart/management\"),\r\n];\r\n\r\n// The routes for a dropdown.\r\nconst navLabelDropDownDE = [\r\n new RouteNav(\r\n \"Unsere Produktion\",\r\n \"https://musikverlag.orf.at/label/unsere-produktionen/\"\r\n ),\r\n new RouteNav(\"Musikvideos\", \"https://musikverlag.orf.at/label/musikvideos/\"),\r\n new RouteNav(\r\n \"Lizenzierung FAQ\",\r\n \"https://musikverlag.orf.at/musiclibrary/lizenzierung-faq/\"\r\n ),\r\n new RouteNav(\r\n \"Preisliste Werbliche Nutzung\",\r\n \"https://musikverlag.orf.at/musiclibrary/preisliste-werbliche-nutzung/\"\r\n ),\r\n];\r\n\r\n// The routes for a dropdown.\r\nconst navHelpDropDownDE = [\r\n new RouteNav(\"Kennwort Vergessen\", \"/identity/resetpassword\"),\r\n new RouteNav(\r\n \"Orf-Musiclibrary Anleitung\",\r\n \"https://musikverlag.orf.at/hilfe/anleitung-orf-musiclibrary/\"\r\n ),\r\n new RouteNav(\"Orf-Musiclibrary FAQ\", \"https://musikverlag.orf.at/hilfe/faq/\"),\r\n new RouteNav(\"Orf-Musiclibrary Update\", \"https://musikverlag.orf.at/hilfe/orf-musiclibrary-update/\"),\r\n new RouteNav(\"Kontakt\", \"https://musikverlag.orf.at/hilfe/kontakt/\"),\r\n];\r\n\r\n// The routes for the admin dropdown.\r\nconst navAdminDropDownDe = [\r\n new RouteNav(\"Themensammlungen\", \"/admin/collections\"),\r\n new RouteNav(\"Track Export\", \"/admin/export\"),\r\n new RouteNav(\"Wartungsinformationen und Updates\", \"/admin/maintainance\"),\r\n new RouteNav(\"Statistiken\", \"/admin/statistics\"),\r\n new RouteNav(\"Benutzerverwaltung\", \"/admin/users\"),\r\n new RouteNav(\"Dropdowns Bearbeiten\", \"/admin/dropdowns\"),\r\n\r\n];\r\n\r\n// The route names for the app.\r\nconst routeNames: Readonly = {\r\n home: \"Home\",\r\n cartIndex: \"CartIndex\",\r\n cartsManagement: \"CartsManagement\",\r\n cartManagement: \"CartManagement\",\r\n publicCart: \"PublicCart\",\r\n targetExport: \"TargetExport\",\r\n luceneSearch: \"LuceneSearch\",\r\n musicIndex: \"musicIndex\",\r\n login: \"Login\",\r\n logout: \"Logout\",\r\n register: \"Register\",\r\n resetPassword: \"ResetPassword\",\r\n resetPasswordRequest: \"ResetPasswordReq\",\r\n editAccount: \"EditAccount\",\r\n verifyAccount: \"VerifyAccount\",\r\n verifyEmail: \"VerifyEmail\",\r\n generalError: \"GeneralError\",\r\n internalError: \"InternalError\",\r\n notFoundError: \"NotFound\",\r\n notImplementedError: \"NotImplemented\",\r\n emailVerifyError: \"EmailVerifyError\",\r\n userVerifyError: \"UserVerifyError\",\r\n emailUpdateInfo: \"InfoEmail\",\r\n emailVerifyInfo: \"EmailVerify\",\r\n emailChangeInfo: \"EmailChange\",\r\n verifyUserInfo: \"VerifyUser\",\r\n adminView: \"AdminView\",\r\n adminExportView: \"AdminExportView\",\r\n adminMaintainanceView: \"AdminMaintainanceView\",\r\n adminStatisticsView: \"AdminStatisticsView\",\r\n adminUsersView: \"AdminUsersView\",\r\n adminDropdownView: \"AdminDropdownView\",\r\n homeWithOpenPopup: \"HomeWithOpenPopup\",\r\n similaritySearch: \"SimilaritySearch\",\r\n};\r\n\r\n// The names of the api controllers.\r\nconst apiRouteNames: Readonly = {\r\n prefix: \"/api/\",\r\n account: \"account\",\r\n identity: \"identity\",\r\n shoppingcart: \"shoppingcart\",\r\n song: \"song\",\r\n file: \"file\",\r\n news: \"news\",\r\n maintainance: \"maintainance\",\r\n statistics: \"statistics\",\r\n};\r\n\r\n// This is used to identitfy the cookie key for the news modal.\r\nconst NEWS_MODAL_IDENTIFIER_KEY = \"news\";\r\n\r\n// This value is compared with the number in the news cookie.\r\n// Update this if there is new functionality so the News Modal gets displayed again\r\nconst CURRENT_NEWS_VERSION = \"1.2\";\r\n\r\n// This is used to identify the credential cookie.\r\nconst CREDENTIAL_COOKIE_IDENTIFIER_KEY = \"user\";\r\n\r\n// This constant holds the dropdown categories.\r\nconst DROPDOWN_ITEMS_CATEGORY_DE = [\r\n \"not found\",\r\n i18n.t(\"searchFormTitleMusicStyle\").toString(),\r\n i18n.t(\"searchFormTitleInstrument\").toString(),\r\n i18n.t(\"searchFormTitleEmotion\").toString(),\r\n i18n.t(\"searchFormTitleOccasion\").toString(),\r\n];\r\n\r\nconst perMonthStatistics: Readonly = {\r\n views: 1,\r\n newUsers: 2,\r\n queries: 3,\r\n dropdowns: 4,\r\n};\r\n\r\nexport {\r\n SONGS_PLAYED_LOCALSTORAGE_KEY,\r\n CART_RESULTS_PER_PAGE,\r\n SONG_RESULTS_PER_PAGE,\r\n CEL_REGEX_PAT,\r\n PASSWORD_REGEX_PAT,\r\n PHONEPREFIXES,\r\n ARTISTTYPES,\r\n navHelpDropDownDE,\r\n navLabelDropDownDE,\r\n navSammelkorbDropDownDE,\r\n navMusiclibraryDropDownDE,\r\n navMusikverlagDropDownDE,\r\n routeNames,\r\n USER_SESSIONSTORAGE_KEY,\r\n IS_MV_USER_SESSIONSTORAGE_KEY,\r\n apiRouteNames,\r\n SEARCH_FORM_SESSIONSTORAGE_KEY,\r\n NEWS_MODAL_IDENTIFIER_KEY,\r\n CURRENT_NEWS_VERSION,\r\n navAdminDropDownDe,\r\n CREDENTIAL_COOKIE_IDENTIFIER_KEY,\r\n DROPDOWN_ITEMS_CATEGORY_DE,\r\n KokoId_REGEX_PAT,\r\n KokoId_Album_REGEX_PAT,\r\n perMonthStatistics,\r\n Similaritysearch_URL_PAT,\r\n Similaritysearch_Youtube_PAT\r\n};\r\n","import {\r\n CartInfo,\r\n DropdownItem,\r\n ShortAccountInfo,\r\n TargetExportSongInfo,\r\n TargetExportTargetItem,\r\n UserResult,\r\n SongSearchForm,\r\n AccountInfo,\r\n MaintainancePeriod,\r\n MaintainancePeriodEdit,\r\n UserInfo,\r\n UserStatistics,\r\n UserStatistic,\r\n ViewStatistic,\r\n ViewStatistics,\r\n} from \"./classes\";\r\n\r\n// This function adds a specifc amount of zeros before a number.\r\nconst zeroPad = (num: number, places: number): string =>\r\n String(num).padStart(places, \"0\");\r\n\r\n// This fucntion checks if the given stream is a guid.\r\nfunction isGuid(text: string): boolean {\r\n if (text === \"\") {\r\n return false;\r\n }\r\n\r\n const guidRegEx = new RegExp(\r\n /^[0-9,a-z]{8}-([0-9,a-z]{4}-){3}[0-9,a-z]{12}$/i\r\n );\r\n return guidRegEx.test(text);\r\n}\r\n\r\n// This function maps json to a TargetExportSong object.\r\nfunction mapJsonToTargetExportSong(json: string): TargetExportSongInfo {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const res = JSON.parse(json);\r\n const minutes = Math.floor(res.duration / 60) ?? 0;\r\n const seconds = Math.floor(res.duration - minutes * 60) ?? 0;\r\n return new TargetExportSongInfo(\r\n res.kokoId,\r\n res.songId,\r\n res.title,\r\n `${zeroPad(minutes, 2)}:${seconds}`\r\n );\r\n}\r\n\r\n// This function maps json to a Array of TargetExportSong object.\r\nfunction mapJsonToTargetExportSongs(json: string): TargetExportSongInfo[] {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const res = JSON.parse(json);\r\n const songs: TargetExportSongInfo[] = [];\r\n\r\n res.forEach((element: any) => {\r\n songs.push(mapJsonToTargetExportSong(JSON.stringify(element)));\r\n });\r\n\r\n return songs;\r\n}\r\n\r\n// This function maps json to a DropdownItem object.\r\nasync function mapJsonToDropDown(json: string): Promise {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const jsonObj = JSON.parse(json);\r\n //const key: string = jsonObj.resourceKey as string\r\n //return new DropdownItem(jsonObj.id, i18n.t(key).toString());\r\n return new DropdownItem(jsonObj.id, jsonObj.resourceKey);\r\n}\r\n\r\n// This function maps json to a CartInfo object.\r\nfunction mapJsonToCartInfo(json: string): CartInfo {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const jsonObj = JSON.parse(json);\r\n return new CartInfo(\r\n jsonObj.shoppingCartId,\r\n jsonObj.name,\r\n jsonObj.description,\r\n Funcs.toDateTime(jsonObj.creationDate),\r\n Funcs.toDateTime(jsonObj.lastLoadingDate),\r\n jsonObj.totalResults\r\n );\r\n}\r\n\r\n// This function maps json to a UserResult object.\r\nfunction mapJsonToUserResult(json: string): UserResult {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n return JSON.parse(json) as UserResult;\r\n}\r\n\r\n// This function maps json to a list of UserResult object.\r\nfunction mapJsonToUserResults(json: string): UserResult[] {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const userArray = JSON.parse(json);\r\n\r\n const userRes: UserResult[] = [];\r\n\r\n userArray.forEach((element: any) => {\r\n userRes.push(mapJsonToUserResult(JSON.stringify(element)));\r\n });\r\n\r\n return userRes;\r\n}\r\n\r\n// This function maps json to a ShortAccountInfo object.\r\nfunction mapJsonToShortAccountInfo(json: string): ShortAccountInfo {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n return JSON.parse(json) as ShortAccountInfo;\r\n}\r\n\r\n// This function maps json to a TargetExportTargetItem object.\r\nfunction mapJsonToTargetExportTargetItem(json: string): TargetExportTargetItem {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n return JSON.parse(json) as TargetExportTargetItem;\r\n}\r\n\r\n// This function maps json to a list of TargetExportTargetItem object.\r\nfunction mapJsonToTargetExportTargetItems(\r\n json: string\r\n): TargetExportTargetItem[] {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const targetExportItems = JSON.parse(json);\r\n\r\n const targetExportItemsTransformed: TargetExportTargetItem[] = [];\r\n\r\n targetExportItems.forEach((element: any) => {\r\n targetExportItemsTransformed.push(\r\n mapJsonToTargetExportTargetItem(JSON.stringify(element))\r\n );\r\n });\r\n\r\n return targetExportItemsTransformed;\r\n}\r\n\r\n// This function maps json to a MaintainancePeriod object.\r\nfunction mapJsonToMaintainancePeriod(json: string): MaintainancePeriod {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const el = JSON.parse(json);\r\n\r\n return new MaintainancePeriod(\r\n el.description,\r\n Funcs.toDateTime(el.startDateUTC),\r\n Funcs.toDateTime(el.endDateUTC)\r\n );\r\n}\r\n\r\n// This function maps json to a list of MaintainancePeriod objects.\r\nfunction mapJsonToMaintainancePeriods(json: string): MaintainancePeriod[] {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const mainItems = JSON.parse(json);\r\n\r\n const maintItemsTransformed: MaintainancePeriod[] = [];\r\n\r\n mainItems.forEach((element: any) => {\r\n maintItemsTransformed.push(\r\n mapJsonToMaintainancePeriod(JSON.stringify(element))\r\n );\r\n });\r\n\r\n return maintItemsTransformed;\r\n}\r\n\r\n// This function maps json to a MaintainancePeriodEdit object.\r\nfunction mapJsonToMaintainancePeriodEdit(json: string): MaintainancePeriodEdit {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const el = JSON.parse(json);\r\n\r\n return new MaintainancePeriodEdit(\r\n el.id,\r\n el.description,\r\n Funcs.toDateTime(el.startDateUTC),\r\n Funcs.toDateTime(el.endDateUTC)\r\n );\r\n}\r\n\r\n// This function maps json to a list of MaintainancePeriodEdit objects.\r\nfunction mapJsonToMaintainancePeriodEdits(\r\n json: string\r\n): MaintainancePeriodEdit[] {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const mainItems = JSON.parse(json);\r\n\r\n const maintItemsTransformed: MaintainancePeriodEdit[] = [];\r\n\r\n mainItems.forEach((element: any) => {\r\n maintItemsTransformed.push(\r\n mapJsonToMaintainancePeriodEdit(JSON.stringify(element))\r\n );\r\n });\r\n\r\n return maintItemsTransformed;\r\n}\r\n\r\n// This function maps json to a UserInfo object.\r\nfunction mapJsonToUserInfo(json: string): UserInfo {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const el = JSON.parse(json);\r\n\r\n return new UserInfo(\r\n el.userId,\r\n Funcs.toDateTime(el.registrationDate),\r\n el.title,\r\n el.firstName,\r\n el.lastName,\r\n el.profession,\r\n el.company,\r\n el.email,\r\n el.phoneNumber,\r\n el.accountState\r\n );\r\n}\r\n\r\n// This function maps json to a list of UserInfo objects.\r\nfunction mapJsonToUsersInfo(json: string): UserInfo[] {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const el = JSON.parse(json);\r\n\r\n const users: UserInfo[] = [];\r\n\r\n el.forEach((element: any) => {\r\n users.push(mapJsonToUserInfo(JSON.stringify(element)));\r\n });\r\n\r\n return users;\r\n}\r\n\r\n// This function maps json to a UserStatistics object.\r\nfunction mapJsonToUserStatistics(json: string): UserStatistics {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const jsonObj = JSON.parse(json);\r\n\r\n const users: UserStatistic[] = [];\r\n\r\n jsonObj.statistics.forEach((element: any) => {\r\n users.push(mapJsonToUserStatistic(JSON.stringify(element)));\r\n });\r\n\r\n return new UserStatistics(users, jsonObj.results);\r\n}\r\n\r\n// This function maps json to a UserStatistic object.\r\nfunction mapJsonToUserStatistic(json: string): UserStatistic {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const jsonObj = JSON.parse(json);\r\n\r\n return new UserStatistic(\r\n jsonObj.userId,\r\n Funcs.toDateTime(jsonObj.registrationDateUnix),\r\n jsonObj.title,\r\n jsonObj.firstName,\r\n jsonObj.lastName,\r\n jsonObj.profession,\r\n jsonObj.company,\r\n jsonObj.email,\r\n jsonObj.phoneNumber,\r\n jsonObj.accountState,\r\n jsonObj.numberOfCarts\r\n );\r\n}\r\n\r\n// This function maps json to a ViewStatistic object.\r\nfunction mapJsonToViewStatistic(json: string): ViewStatistic {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const jsonObj = JSON.parse(json);\r\n\r\n return new ViewStatistic(jsonObj.timesCalled, Funcs.toDateTime(jsonObj.date));\r\n}\r\n\r\n// This function maps json to a ViewStatistics object.\r\nfunction mapJsonToViewStatistics(json: string): ViewStatistics {\r\n if (json === \"\") {\r\n throw new Error(\"Json can't be empty\");\r\n }\r\n\r\n const jsonObj = JSON.parse(json);\r\n\r\n const stats: ViewStatistic[] = [];\r\n\r\n jsonObj.statistics.forEach((element: any) => {\r\n stats.push(mapJsonToViewStatistic(JSON.stringify(element)));\r\n });\r\n\r\n return new ViewStatistics(\r\n stats,\r\n jsonObj.totalResults,\r\n jsonObj.totalTimesCalled\r\n );\r\n}\r\n\r\n// This class is used to sort the user manage table.\r\nfunction mapUserSortStringToNumber(type: string): number {\r\n switch (type) {\r\n case \"userId\":\r\n return 1;\r\n case \"registrationDate\":\r\n return 4;\r\n case \"firstName\":\r\n return 2;\r\n case \"lastName\":\r\n return 3;\r\n case \"accountState\":\r\n return 5;\r\n default:\r\n return 1;\r\n }\r\n}\r\n\r\n// This class is used to sort the searchquery stat table.\r\n// It translates the type after which to sort from a string to the number for the api request.\r\nfunction mapQueryStatsSortStringToNumber(type: string): number {\r\n switch (type) {\r\n case \"query\":\r\n return 1;\r\n case \"results\":\r\n return 2;\r\n case \"timesCalled\":\r\n return 3;\r\n case \"emotion\":\r\n return 4;\r\n case \"musicOccasion\":\r\n return 5;\r\n case \"instrument\":\r\n return 6;\r\n case \"musicStyle\":\r\n return 7;\r\n case \"date\":\r\n return 8;\r\n default:\r\n return 1;\r\n }\r\n}\r\n\r\n// This class is used to sort the song stats table.\r\n// It translates the type after which to sort from a string to the number for the api request.\r\nfunction mapSongStatsSortStringToNumber(type: string): number {\r\n switch (type) {\r\n case \"kokoId\":\r\n return 1;\r\n case \"title\":\r\n return 2;\r\n case \"album\":\r\n return 3;\r\n case \"duration\":\r\n return 4;\r\n case \"yearOfRecording\":\r\n return 5;\r\n case \"timesPlayed\":\r\n return 6;\r\n case \"timesDownloaded\":\r\n return 7;\r\n default:\r\n return 1;\r\n }\r\n}\r\n\r\n// This class is used to sort the song stats table.\r\n// It translates the type after which to sort from a string to the number for the api request.\r\nfunction mapCartStatsSortStringToNumber(type: string): number {\r\n switch (type) {\r\n case \"title\":\r\n return 1;\r\n case \"songCount\":\r\n return 2;\r\n case \"timesCalled\":\r\n return 3;\r\n default:\r\n return 1;\r\n }\r\n}\r\n\r\n// This class is used to sort the user stats table.\r\n// It translates the type after which to sort from a string to the number for the api request.\r\nfunction mapUserStatsSortStringToNumber(type: string): number {\r\n switch (type) {\r\n case \"email\":\r\n return 1;\r\n case \"firstName\":\r\n return 2;\r\n case \"lastName\":\r\n return 3;\r\n case \"profession\":\r\n return 4;\r\n case \"company\":\r\n return 5;\r\n case \"title\":\r\n return 6;\r\n case \"accountState\":\r\n return 7;\r\n case \"numberOfCarts\":\r\n return 8;\r\n case \"registrationDate\":\r\n return 9;\r\n default:\r\n return 1;\r\n }\r\n}\r\n\r\n// This class is used to sort the dropdown stats table.\r\n// It translates the type after which to sort from a string to the number for the api request.\r\nfunction mapDropdownStatsSortStringToNumber(type: string): number {\r\n switch (type) {\r\n case \"resourceSheetKey\":\r\n return 1;\r\n case \"category\":\r\n return 2;\r\n case \"timesCalled\":\r\n return 3;\r\n case \"localization\":\r\n return 4;\r\n default:\r\n return 1;\r\n }\r\n}\r\n\r\n// This class is used to sort the website view stats table.\r\n// It translates the type after which to sort from a string to the number for the api request.\r\nfunction mapViewStatsSortStringToNumber(type: string): number {\r\n switch (type) {\r\n case \"timesCalled\":\r\n return 1;\r\n case \"date\":\r\n return 2;\r\n default:\r\n return 1;\r\n }\r\n}\r\n\r\n// This method creates a SongSearchForm object from the given parameters.\r\nfunction createSongSearchForm(\r\n musicStyle: number,\r\n emotion: number,\r\n musicOccasion: number,\r\n instrument: number,\r\n musicMinTimeM: number | undefined,\r\n musicMinTimeS: number | undefined,\r\n musicMaxTimeM: number | undefined,\r\n musicMaxTimeS: number | undefined,\r\n search: string,\r\n cart: any\r\n): SongSearchForm {\r\n const musicMinTimeM1 = convertToNumber(musicMinTimeM);\r\n const musicMinTimeS1 = convertToNumber(musicMinTimeS);\r\n const musicMaxTimeM1 = convertToNumber(musicMaxTimeM);\r\n const musicMaxTimeS1 = convertToNumber(musicMaxTimeS);\r\n\r\n const cartId = cart == null ? -1 : cart.shoppingCartId;\r\n\r\n return new SongSearchForm(\r\n 1,\r\n 15,\r\n musicStyle,\r\n emotion,\r\n musicOccasion,\r\n instrument,\r\n musicMinTimeM1,\r\n musicMinTimeS1,\r\n musicMaxTimeM1,\r\n musicMaxTimeS1,\r\n search,\r\n cartId\r\n );\r\n}\r\n\r\nfunction cloneObject(val: Type): Type {\r\n return JSON.parse(JSON.stringify(val));\r\n}\r\n\r\nfunction isTruthy(val: any): boolean {\r\n if (val) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isEmptyOrUndefined(val: any): boolean {\r\n if (typeof val !== \"string\") {\r\n return true;\r\n }\r\n\r\n if (val == null || val.trim() === \"\") {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction convertToNumber(val: any): number {\r\n if (isEmptyOrUndefined(val)) {\r\n return -1;\r\n }\r\n\r\n if (isNaN(Number(val))) {\r\n return -1;\r\n }\r\n\r\n return Number(val);\r\n}\r\n\r\n// This function is used to compare the values of two SongSearchForm objects with each other.\r\nfunction compareSongSearchForms(\r\n form1: SongSearchForm,\r\n form2: SongSearchForm\r\n): boolean {\r\n if (form1.emotion != form2.emotion) {\r\n return false;\r\n }\r\n\r\n if (form1.instrument != form2.instrument) {\r\n return false;\r\n }\r\n\r\n if (form1.musicMaxTimeM != form2.musicMaxTimeM) {\r\n return false;\r\n }\r\n\r\n if (form1.musicMaxTimeS != form2.musicMaxTimeS) {\r\n return false;\r\n }\r\n\r\n if (form1.musicMinTimeM != form2.musicMinTimeM) {\r\n return false;\r\n }\r\n\r\n if (form1.musicMinTimeS != form2.musicMinTimeS) {\r\n return false;\r\n }\r\n\r\n if (form1.musicOccasion != form2.musicOccasion) {\r\n return false;\r\n }\r\n\r\n if (form1.musicStyle != form2.musicStyle) {\r\n return false;\r\n }\r\n\r\n if (form1.query != form2.query) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n// This function converts UTC timestamp to a Date.\r\nfunction toDateTime(secs: number): Date {\r\n if (secs < 0) {\r\n throw new Error(\"Seconds can't be negativ!\");\r\n }\r\n\r\n const t = new Date(1970, 0, 1); // Epoch\r\n t.setSeconds(secs);\r\n return t;\r\n}\r\n\r\n// This method checks if the SongSearchForm is default(no parameters choosen and no query).\r\nfunction isSearchEmpty(form: SongSearchForm): boolean {\r\n if (\r\n form.emotion !== -1 ||\r\n form.instrument !== -1 ||\r\n form.musicOccasion !== -1 ||\r\n form.musicStyle !== -1 ||\r\n form.musicMinTimeM !== -1 ||\r\n form.musicMinTimeS !== -1 ||\r\n form.musicMaxTimeM !== -1 ||\r\n form.musicMaxTimeS !== -1 ||\r\n form.query !== \"\"\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n// This method adds an amount of hours to a date.\r\n// This is needed because JS automaticly adds or removes hours from the date because of some timezone BS.\r\nfunction addHoursToDateTime(date: Date, h: number): Date {\r\n const c = new Date();\r\n const t = new Date(date);\r\n c.setTime(t.getTime() + h * 60 * 60 * 1000);\r\n return c;\r\n}\r\n\r\n// This method removes an amount of hours to a date.\r\n// This is needed because JS automaticly adds or removes hours from the date because of some timezone BS.\r\nfunction removeHoursToDateTime(date: Date, h: number): Date {\r\n const c = new Date();\r\n //THIS IS SOOOOOO FUCKINBG STUPID BUT IF I DONT DO THIS THE FUCNTION DOESNT WORK!!!!!!!!!!!!!\r\n const t = new Date(date);\r\n c.setTime(t.getTime() - h * 60 * 60 * 1000);\r\n return c;\r\n}\r\n\r\n// This method adds missing dates with no visits to the stats array.\r\nfunction addEmptyViewStats(\r\n statsArray: ViewStatistic[],\r\n sortAsc: boolean,\r\n startDate: Date,\r\n endDate: Date\r\n): ViewStatistic[] {\r\n const statsClone = cloneObject(statsArray);\r\n\r\n let stats = statsClone.map(\r\n (element: ViewStatistic) =>\r\n new ViewStatistic(element.timesCalled, new Date(element.date))\r\n );\r\n if (sortAsc) {\r\n stats = stats.sort(\r\n (a: ViewStatistic, b: ViewStatistic) =>\r\n a.date.getTime() - b.date.getTime()\r\n );\r\n } else {\r\n stats = stats.sort(\r\n (a: ViewStatistic, b: ViewStatistic) =>\r\n b.date.getTime() - a.date.getTime()\r\n );\r\n }\r\n\r\n const newStats: ViewStatistic[] = [];\r\n const dates: Date[] = [];\r\n // Add last and first date\r\n const firstDate = new Date(cloneObject(startDate));\r\n const lastDate = new Date(cloneObject(endDate));\r\n\r\n if (firstDate < lastDate) {\r\n while (firstDate < lastDate) {\r\n dates.push(new Date(firstDate));\r\n firstDate.setDate(firstDate.getDate() + 1);\r\n }\r\n dates.push(stats[stats.length - 1].date);\r\n } else {\r\n while (firstDate > lastDate) {\r\n dates.push(new Date(lastDate));\r\n lastDate.setDate(lastDate.getDate() + 1);\r\n }\r\n dates.push(stats[0].date);\r\n }\r\n\r\n dates.forEach((element: Date) => {\r\n if (\r\n stats.find(\r\n (stat: ViewStatistic) => stat.date.getDate() === element.getDate()\r\n ) != undefined\r\n ) {\r\n newStats.push(\r\n stats.find(\r\n (stat: ViewStatistic) => stat.date.getDate() === element.getDate()\r\n )!\r\n );\r\n } else {\r\n newStats.push(new ViewStatistic(0, element));\r\n }\r\n });\r\n\r\n return newStats;\r\n}\r\n\r\nconst Funcs = {\r\n zeroPad,\r\n isGuid,\r\n mapJsonToDropDown,\r\n createSongSearchForm,\r\n isSearchEmpty,\r\n mapJsonToCartInfo,\r\n toDateTime,\r\n mapJsonToUserResults,\r\n mapJsonToShortAccountInfo,\r\n mapJsonToTargetExportTargetItems,\r\n mapJsonToTargetExportSongs,\r\n compareSongSearchForms,\r\n mapJsonToMaintainancePeriods,\r\n mapJsonToMaintainancePeriodEdits,\r\n addHoursToDateTime,\r\n removeHoursToDateTime,\r\n mapJsonToUsersInfo,\r\n mapUserSortStringToNumber,\r\n mapJsonToUserStatistics,\r\n mapQueryStatsSortStringToNumber,\r\n mapCartStatsSortStringToNumber,\r\n mapSongStatsSortStringToNumber,\r\n mapUserStatsSortStringToNumber,\r\n mapDropdownStatsSortStringToNumber,\r\n mapViewStatsSortStringToNumber,\r\n mapJsonToViewStatistics,\r\n addEmptyViewStats,\r\n isTruthy,\r\n isEmptyOrUndefined,\r\n convertToNumber,\r\n cloneObject,\r\n};\r\n\r\nexport default Funcs;\r\n","// This function checks if the key exists in session storage.\r\nfunction exists(name: string): boolean {\r\n if (name === \"\") {\r\n throw new Error(\"Cookie name can't be empty\");\r\n }\r\n\r\n const myStorage = window.sessionStorage;\r\n if (myStorage.getItem(name) !== null) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n// This function retrieves an item from session storage with the given key.\r\nfunction getItem(name: string): string | null {\r\n if (name === \"\") {\r\n throw new Error(\"Cookie name can't be empty\");\r\n }\r\n\r\n const myStorage = window.sessionStorage;\r\n if (myStorage.getItem(name) !== null) {\r\n return myStorage.getItem(name);\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// This function sets an item from session storage with the given key.\r\nfunction setItem(name: string, value: string): void {\r\n if (name === \"\") {\r\n throw new Error(\"Cookie name can't be empty\");\r\n }\r\n\r\n const myStorage = window.sessionStorage;\r\n myStorage.setItem(name, value);\r\n}\r\n\r\n// This function clears the sessionstorage.\r\nfunction clear(): void {\r\n const myStorage = window.sessionStorage;\r\n myStorage.clear();\r\n}\r\n\r\n// This function removes an item from session storage with the given key.\r\nfunction removeItem(name: string): void {\r\n if (name === \"\") {\r\n throw new Error(\"Cookie name can't be empty\");\r\n }\r\n\r\n const myStorage = window.sessionStorage;\r\n myStorage.removeItem(name);\r\n}\r\n\r\nconst SessionStorage = { exists, getItem, setItem, clear, removeItem };\r\n\r\nexport default SessionStorage;\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + (chunkId === 594 ? \"about\" : chunkId) + \".\" + __webpack_require__.h() + \".chunk.bundle.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + (chunkId === 594 ? \"about\" : chunkId) + \".\" + {\"9\":\"23b1b0f0\",\"105\":\"0a706b5f\",\"197\":\"1cc230ee\",\"594\":\"e1c6b160\",\"731\":\"cd7abe16\",\"890\":\"443c5f07\",\"958\":\"b1a7cf8b\",\"988\":\"19ba3dd5\"}[chunkId] + \".css\";\n};","__webpack_require__.h = function() { return \"ca15530bb0051e89\"; }","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"frontend:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function(chunkId, fullhref, oldTag, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"9\":1,\"105\":1,\"197\":1,\"594\":1,\"731\":1,\"890\":1,\"958\":1,\"988\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfrontend\"] = self[\"webpackChunkfrontend\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(5996); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["render","_vm","this","_c","_self","staticClass","key","$route","fullPath","isLoading","attrs","scopedSlots","_u","fn","staticStyle","require","proxy","_e","staticRenderFns","_setupProxy","isDevOrStaging","_v","_s","appMode","_m","on","$event","show","username","name","$routesNames","login","$t","register","editAccount","logout","_l","navMusiclibraryDropDownDE","item","index","route","navSammelkorbDropDownDE","navMusikverlagDropDownDE","isMVemployee","navAdminDropDownDe","navLabelDropDownDE","navHelpDropDownDE","drowDownMenu2","drowDownMenu3","drowDownMenu1","drowDownMenu6","drowDownMenu4","drowDownMenu5","NavBar","Vue","data","navMusikverlagDropDownDEC","navMusiclibraryDropDownDEC","navSammelkorbDropDownDEC","navLabelDropDownDEC","navHelpDropDownDEC","navAdminDropDownDeC","credCookie","Cookies","get","CREDENTIAL_COOKIE_IDENTIFIER_KEY","undefined","cookieOBJ","JSON","parse","isMVuser","process","user","userName","__decorate","Component","component","state","preventDefault","CustomFooter","$store","getters","areElementsDragged","metaInfo","titleTemplate","meta","charset","content","components","computed","getAppLoadingBool","mounted","RequestFuncs","addWebsiteView","use","Vuex","target","draggingElements","currentSongs","currentCart","totalResults","resultsPerPage","resultsPerPageSelector","currentPage","currentCarts","themeCarts","cartDropDown","isAppLoading","showThemeCollectionPopup","songsDraggable","simSearchInput","simSearchError","getSimSearchInput","getSimSearchError","getTarget","getCurrentSongs","getSongWithId","id","find","x","areAllSongsSelected","every","s","isSelected","hideAddButtonOnAll","length","isInCart","getCurrentCart","getCurrentCartDropdown","shoppingCartId","getCurrentCartId","getCurrentCartName","getTotalResults","getResultsPerPage","getResPerPageSelector","getCurrentPage","getCarts","getCartWithId","areAllCartsSelected","getThemeCarts","getThemeCartWithId","areAllThemeCartsSelected","getSelectedThemecarts","filter","tc","getCartDropDown","getThemeCollectionPopupBool","getSongsDragableBool","mutations","SET_SIM_SEARCH_Error","input","SET_SIM_SEARCH_INPUT","SET_TARGET","SET_DRAGGING_ELEMENT","isDragging","SET_CURRENTCART","cart","SET_CURRENTSONGS","songs","SET_ALL_SONGS_SELECTED","selected","cloned","Funcs","cloneObject","forEach","element","SET_SONG","song","i","SET_TOTALRESULTS","res","SET_RESULTS_PER_PAGE","SET_RESULT_PER_PAGE_SELECTOR","SET_CURRENT_PAGE","MOVE_SONGS","indexes","source","splice","SET_CARTS","carts","SET_ALL_CARTS_SELECTED","SET_CART","SET_CART_DROPDOWN","elements","SET_THEME_CARTS","SET_THEME_CART","SET_ALL_THEME_CARTS_SELECTED","SET_APP_LOADING_BOOL","SET_THEMEPOPUP_BOOL","SET_SONGS_DRAGABLE","draggable","actions","setSimSearchError","commit","setSimSearchInput","setTarget","setDragging","setCurrentCart","setTotalResults","totalResult","Error","setCurrentSongs","setSongsSelected","setSongInSongs","setResultsPerPage","setResultsPerPageSelector","setCurrentPage","moveItemPos","setCurrentCarts","setCartsSelected","setCartInCarts","setCartDropdown","setThemeCarts","themecarts","setCartInThemeCarts","themecart","setAllThemeCartsSelected","setAppLoadingBool","setThemePopupBool","setSongsDraggableBool","resetAll","modules","VueRouter","routes","path","routeNames","cartIndex","props","query","requiresAuth","cartsManagement","publicCart","targetExport","luceneSearch","requiresMvUser","musicIndex","lucenequery","simKokoId","homeWithOpenPopup","redirect","to","store","dispatch","requiresAnon","resetPassword","resetPasswordRequest","verifyAccount","verifyEmail","generalError","errorCode","internalError","notFoundError","notImplementedError","emailVerifyError","userVerifyError","emailUpdateInfo","code","emailVerifyInfo","emailChangeInfo","verifyUserInfo","adminView","adminExportView","adminMaintainanceView","adminStatisticsView","adminUsersView","adminDropdownView","home","router","mode","requiresAuthGuard","from","next","matched","some","record","isLoggedIn","requiresMvUserGuard","credObj","credObj2","requiresAnonymous","beforeEach","async","VueMeta","PortalVue","BootstrapVue","VueToast","VueApexCharts","DateRangePicker","vSelect","val","date","Date","toLocaleString","prototype","config","productionTip","$window","window","i18n","h","App","$mount","VueI18n","messages","de","testMsg","navLogin","navLogout","navRegister","navAccount","navDropDownTitleMusikverlag","navDropDownTitleMusiclibrary","navDropDownTitleShoppingcart","navDropDownTitleLabel","navDropDownTitleHelp","navDropDownTitleAdmin","searchFormTitleMusicStyle","searchFormTitleEmotion","searchFormTitleOccasion","searchFormTitleInstrument","searchFormTitleTimeM","searchFormTitleTimeS","searchFormTitleSearch","searchFormSimSearch","searchFormFileSearch","similaritySearch","searchCart","musicCollection","searchSongInCart","searchFormResetButton","searchFormSubmitButton","searchFormCurrentCart","searchFormLabelMinDuration","searchFormLabelMaxDuration","searchFormEmployeeSearchLabel","searchFormShowMask","loginViewHeader","loginViewEmailLabel","loginViewPasswordLabel","loginViewLoginButton","loginViewResetPasswordText","loginViewResetPasswordButton","loginViewNotRegisteredText","loginViewNotRegisteredTextAnchor","resetPasswordViewHeader","resetPasswordViewInfo","registerViewHeader","registerViewRepeatEmail","registerViewRepeatPassword","registerViewTitleLabel","registerViewNameLabel","registerViewSurNameLabel","registerViewCompanyLabel","registerViewJobLabel","registerViewPhoneLabel","registerViewInfoText","registerViewSubmitBtn","termsOfUseAnchor","findHere","registerViewCheckInfoText","navbarGreeting","tHead0","tHead1","archiveNumber","songItemAkmData","songItemComposer","songItemEditor","songItemInterpret","songItemTexter","songItemLabel","songItemDuration","songItemExtraData","songItemArchiveNumber","songItemAlbumTitle","songItemGenre","songItemInstruments","songItemKeywords","songItemRecordingYear","addToCart","deleteFromCart","mp3DownloadLabel","wavDownloadLabel","itemsPerPage","createCartModalTitle","createCartModalName","createCartModalDefinition","cancelButton","createButton","createCartSuccessMSG","copyCartSuccessMSG","editCartSuccessMSG","createThemecartModalTitle","createThemecartModalOnlyPngText","editThemecartModalTitle","createThemecartSuccessMSG","editThemecartSuccessMSG","themecartModalCoverSelectorEmpty","noResults","noResultsSearch","dataIsLoading","songSearchGreetings1","allSongs","luceneSearchFormTitle","luceneSearchMSG","luceneSearchTableFieldname","luceneSearchTableIndustryNumber","luceneSearchTableIndustryTrackName","luceneSearchTableIndustryAlbum","luceneSearchTableIndustryGenre","luceneSearchTableIndustryInstrument","luceneSearchTableIndustryKeywords","luceneSearchTableIndustryArtists","copy","edit","delete","tracks","similar","collections","cartsManagementTitle","cartsManagementLoadCart","cartsManagementCreated","cartsManagementTitleCount","cartsManagementTransferSongs","cartsManagementTransferSongsModalTitle","cartsManagementTransferSongsSuccessMSG","cartsManagementEmptyTitle","save","export","emptyCartMSG","emptyCartSearchMSG","editAccountTitle","editAccountMsg","editAccountTabPersonalData","editAccountTabEmail","editAccountSubmitBtn","errorEmailVerify","errorPasswordVerify","errorPasswordRegex","errorEmailEmpty","errorMaxChar","errorMaxChar128","errorMaxChar512","errorMaxChar2048","errorFieldEmpty","errorCel","errorTermsCheckbox","errorDatePeriodIsInvalid","errorDatePeriodEmpty","errorDatePeriodMinValueStart","errorDatePeriodMinValueEnd","errorDurationIsInvalid","errorMaxDurationIsInvalid","errorMinDurationIsInvalid","themecartIsNull","perPage","userExportModalTitle1","userExportModalTitle2","userExportModalResults","userExportModalSelection","userExportModalSubmit","userExportModalSuccessMSG","targetExportModalTitle","targetExportModalMsg","targetExportMSG","productionNumber","targetExportSuccessMSG","targetExportResult","targetExportModalSubmit","publicLinkModalTitle","publicLinkModalMSG","copyScsTxt","resetPasswordTitle","cartEditModalTitle","change","deleteCartModalMsg","deleteCartsModalMsg","deleteSongModalTitle","deleteSongsModalTitle","deleteSongModalMsg","deleteSongsModalMsg","noCartsInSelect","deleteModalTitle","deleteCartsModalTitle","deleteSongSuccessMSG","deleteSongsSuccessMSG","deleteCartSuccessMSG","deleteCartsSuccessMSG","deleteThemecartModalTitle","deleteThemecartModalMSG","deleteThemecartSuccessMSG","deleteThemecartsSuccessMSG","deleteThemecartsModalTitle","deleteThemecartsModalMSG","deleteUserModalTitle","deleteUserModalMSG","deleteUserModalSuccessMSG","error_500_title","error_general_title","error_internetExplorerNotSupported","error_internetExplorerNotSupported_title","found","error_notFound_title","error_notFound_message1","error_notFound_message2","error_notFound_message3","error_notFound_message4","error_notImplemented_msg","error_notImplemented_title","error_general_message1","error_general_message2","error_general_message3","error_general_message4","error_general_message5","error_general_message6","error_general_message6a","error_general_message4a","UI_RegisterForm_Error_UserAlreadyExists","UI_RegisterForm_Error","UI_Authentication_ResetPassword_LinkExpired","reset_password_success_message","UI_Authentication_ResetPassword_Success","Error_MailRecipientUnavailable","change_email_request_success_title","change_email_request_success_message","UI_UserEmailVerification_Success_Title","UI_UserEmailVerification_Success_AdditionalText","UI_UserEmailChange_Success_Title","UI_UserEmailChange_Success_AdditionalText","UI_UserEmailVerification_Failure_Title","UI_UserEmailVerification_Failure_AdditionalText","update_account_success_message","UI_UserVerification_Failure_Title","UI_UserVerification_Failure_AdditionalText","UI_UserVerification_Success_Title","UI_UserVerification_Success_AdditionalText","tooltipSimSearch","tooltipDeleteCartButton","tooltipDeleteCartsButton","tooltipEditCartButton","tooltipLoadCartButton","tooltipTransferCartSongsButton","tooltipAddCartButton","tooltipHideSearch","tooltipResetField","tooltipPlaySong","tooltipPlaySongDragDrop","tooltipStopSong","tooltipStopSongDragDrop","tooltipDownloadMP3Song","tooltipDownloadWAVSong","tooltipDownloadMP3Songs","tooltipDownloadWAVSongs","tooltipRemoveSongs","tooltipAddSongs","tooltipAKMDownload","tooltipCartShare","tooltipPublicCart","tooltipTargetExport","tooltipRemoveSong","tooltipAddSong","tooltipMoreInfoSong","tooltipShowSimilarTracks","showSimilarTracksButton","tooltipLessInfoSong","tooltipChangeModi","tooltipCopyTracks","tooltipLoadMore","tooltipSearchCart","tooltipSearchSongInCart","tooltipCopyCart","tooltipMoveItemFront","tooltipMoveItemEnd","tooltipSortOrderAsc","tooltipSortOrderDesc","tooltipAudioPlayerNextSong","tooltipAudioPlayerPrevSong","tooltipAudioPlayerRepeatSong","tooltipAudioPlayerNotRepeatSong","tooltipAudioPlayerChangePlaybackSpeed","tooltipRemoveThemeCart","tooltipShowThemeCart","tooltipPrivateThemeCart","tooltipAddCover","tooltipEditThemeCart","tooltipCloneThemeCart","tooltipCartExcelExport","tooltipSearchUser","tooltipDeleteUser","adminExcelViewExportSongsTitle","adminExcelViewExportAlbumTitle","adminExcelViewExportSongsMSG","adminExcelViewExportAllSongsTitle","adminExcelViewExportErrorGeneral","adminExcelViewRemoveKokoIds","adminExcelViewRemoveAlbumKokoId","adminExcelViewKokoIdError","adminExcelViewKokoIdRangeError","adminExcelViewKokoIdLengthError","sortOrderAsc","sortOrderDesc","sortOrderTypeDefault","sortOrderTypeTitle","sortOrderTypeLength","sortOrderTypeLastAdded","sortOrderTypeAlbum","sortOrderTypeKokoId","sortOrderTypeCustom","sortOrderTypeName","sortOrderTypeCreationDate","sortOrderLabel","dontShowAgainLabel","okSubmit","themeCartTableHeadTitle","themeCartTableHeadDesc","themeCartTableHeadCart","themeCartTableHeadLink","themeCartTableHeadOnline","themeCartTableCoverfile","themeCartViewAdd","noCollections","chooseVersion","newsModalMaintainanceTitle","newsModalTitle","themeCollectionModalTitle","newsModalSupportMsgLabel","maintainanceItemStartDate","maintainanceItemEndDate","maintainanceItemSaveSuccess","maintainanceItemResetSuccess","maintainanceAdminViewTitle","maintainanceAdminViewMsg","maintainanceAdminViewAppSupportMessageTitle","maintainanceAdminViewAppSupportTitle","appSupportMessageTableOrderHead","appSupportMsgCreateTitle","appSupportMsgCreated","appSupportMsgUpdatedSuccess","appSupportMsgDelete","appSupportMsgEdit","appSupportMsgAdd","appSupportTitleAdd","appSupportTitleCreateTitle","appSupportTitleCreated","appSupportTitleUpdatedSuccess","appSupportTitleDelete","appSupportTitleEdit","appSupportTitleSelectorEmpty","releasedate","statisticAdminViewStatType0","statisticAdminViewStatType1","statisticAdminViewStatType2","statisticAdminViewStatType3","statisticAdminViewStatType4","statisticAdminViewStatType5","statisticAdminViewStatType6","statisticAdminViewStatType7","statisticAdminViewStatType8","statisticAdminViewStatType9","statisticAdminViewStatType10","statisticAdminViewStatType11","statisticAdminViewStatType12","statisticAdminViewDisplayType0","statisticAdminViewDisplayType1","statisticAdminViewDisplayType2","statisticAdminViewDisplayType3","statisticAdminViewDisplayType1Songs","statisticAdminViewDisplayType2Songs","statisticAdminViewDisplayType3Songs","statisticAdminViewDisplayType4Songs","statisticAdminViewTableHeadNoResQuery","statisticAdminViewTableHeadNoResResults","statisticAdminViewTableHeadNoResEmotion","statisticAdminViewTableHeadNoResMusicOccasion","statisticAdminViewTableHeadNoResInstrument","statisticAdminViewTableHeadNoResMusicStyle","statisticAdminViewTableHeadNoResMinDuration","statisticAdminViewTableHeadNoResMaxDuration","statisticAdminViewTableHeadNoResTimesCalled","statisticAdminViewTableHeadNoResDate","statisticsAdminViewTableNoResultsToShow","statisticAdminViewTableHeadRegDate","statisticAdminViewTableHeadTitle","statisticAdminViewTableHeadFirstName","statisticAdminViewTableHeadLastName","statisticAdminViewTableHeadProfession","statisticAdminViewTableHeadCompany","statisticAdminViewTableHeadEmail","statisticAdminViewTableHeadPhoneNumber","statisticAdminViewTableHeadAccState","statisticAdminViewTableHeadNoCarts","statisticAdminViewTableHeadName","statisticAdminViewTableHeadTotalNumber","statisticAdminViewTableHeadSongCount","statisticAdminViewTableHeadTimesCalled","statisticAdminViewTableHeadGuid","statisticAdminViewTableHeadKokoId","statisticAdminViewTableHeadAlbum","statisticAdminViewTableHeadDuration","statisticAdminViewTableHeadRecordingYear","statisticAdminViewTableHeadPlays","statisticAdminViewTableHeadDownloads","statisticAdminViewTableHeadArtists","statisticAdminViewGeneralTotalSongs","statisticAdminViewGeneralTotalArtists","statisticAdminViewGeneralTotalUsers","statisticAdminViewGeneralTotalCarts","statisticAdminViewGeneralAvgCarts","statisticAdminViewGeneralAvgSongs","statisticAdminViewGeneralNoCarts","statisticAdminViewExportStats","numberOfAllViewsOverDateRange","entries","users","block","unblock","verify","usersAdminViewTableHeadUserId","usersAdminViewTableHeadRegisterDate","usersAdminViewTableHeadTitle","usersAdminViewTableHeadName","usersAdminViewTableHeadSurName","usersAdminViewTableHeadCompany","usersAdminViewTableHeadEmail","usersAdminViewTableHeadNumber","usersAdminViewTableHeadAccState","usersAdminViewTableHeadButtonAction","dropdownAdminViewCreateNewItem","dropdownAdminViewLanguageSelector","dropdownAdminViewLanguageGerman","dropdownAdminViewTableHeadId","dropdownAdminViewTableHeadResKey","dropdownAdminViewTableHeadLucenePattern","dropdownAdminViewTableHeadCategory","dropdownAdminViewTableHeadLocalization","dropdownAdminViewTableHeadButtons","createDropdownItemModalTitle","editDropdownItemModalTitle","createDropdownItemModalKey","createDropdownItemModalLucenePattern","createDropdownItemModalLuceneCategory","createDropdownItemModalLuceneLocalization","createDropdownItemModalDate","createDropdownItemModalErrorLucenePattern","createDropdownItemModalSuccessMsg","editDropdownItemModalSuccessMsg","deleteDropdownItemModalSuccessMSG","deleteDropdownItemModalTitle","deleteDropdownItemModalMsg","deleteAppSupportMsgModalTitle","deleteAppSupportSuccessMSG","deleteAppSupportMsgModalMSG","deleteAppSupportTitleModalTitle","deleteAppSupportTitleSuccessMSG","deleteAppSupportTitleModalMSG","similaritySearchKokoIdRequiredError","similaritySearchKokoIdInvalidError","similaritySearchUrlRequiredError","similaritySearchUrlInvalidError","similaritySearchFileRequiredError","similaritySearchUrlKokoIdInvalid","similaritySearchFileMp3RequiredError","similaritySearchFileSizeError","similaritySearchNoResults","locale","fallbackLocale","silentTranslationWarn","password","resp","axios","post","apiRouteNames","prefix","identity","email","headers","withCredentials","status","set","stringify","CredentialCookie","sameSite","StatusCodes","OK","INTERNAL_SERVER_ERROR","error","axiosError","response","UNAUTHORIZED","valueOf","BAD_REQUEST","remove","SessionStorage","removeItem","songSearch","form","message","includes","SongSearchResponse","directLuceneSearch","req","errorMessage","getDropDownItems","langType","encodeURIComponent","arr","push","mapJsonToDropDown","getSongDetailed","createPasswordResetLink","resKey","userId","guid","isoldpasswordreset","isGuid","updateEmail","newEmail","account","getAccountInfo","updateAccount","info","verificationId","VerifyResponse","verifyUser","sortType","ascending","shoppingcart","mapJsonToCartInfo","CartsResponse","deleteCart","cartId","NOT_FOUND","copyCart","deleteCarts","cartIds","updateCart","desc","description","getCartSongs","numberOfEntries","queryId","searchResult","getCartsInfo","createCart","title","loadCart","addSongsToCart","songIds","addSongToCart","songId","deleteSongsInCart","deleteSongInCart","downloadAllSongsAsMP3","file","responseType","url","URL","createObjectURL","Blob","link","document","createElement","href","fileName","split","replaceAll","setAttribute","body","appendChild","click","downloadAllSongsAsWAV","downloadAkmFile","downloadMp3Zip","type","objectUrl","downloadWavZip","getPublicLink","publicLink","searchUser","mapJsonToUserResults","shareCartWithUsers","userIds","getShortAccountInfo","mapJsonToShortAccountInfo","getExportTargets","mapJsonToTargetExportTargetItems","exportTargetSong","request","getTargetExportSongs","mapJsonToTargetExportSongs","getPublicSongs","cartid","searchPublicSong","getSortedSongs","switchTrackItemsOrder","songIdA","songIdB","moveTrackItemToPos","pos","CONFLICT","getLatestCollections","news","searchThemeCarts","editThemeCart","coverFileName","showThemeCart","deleteThemeCart","cloneThemeCart","deleteThemeCarts","ids","el","getThemecartsCoverFileNames","createThemecart","uploadCollectionCoverFile","formData","FormData","append","exportCartAsExcel","exportKokoIDsAsExcel","kokoId","getMaintainanceInfo","maintainance","mapJsonToMaintainancePeriods","getAllMaintainanceInfo","mapJsonToMaintainancePeriodEdits","updateMaintainanceInfo","startDateUTC","Math","floor","startDate","getTime","endDateUTC","endDate","getSortedUsers","mapJsonToUsersInfo","UserSearchInfo","results","blockUser","deleteUser","unblockUser","verifyUserAsAdmin","getViewsPerMonth","sortAfterDate","statistics","startDateUnix","endDateUnix","getNewUsersPerMonth","getQueriesPerMonth","getDropdownsPerMonth","getGenreStatistics","sortByCount","getKeywordStatistics","getQueryStatistics","getSongStatistics","getCartStatistics","getUserStatistics","mapJsonToUserStatistics","getGeneralStatistics","getDropdownStatistics","language","getDropdownItemsForTable","lang","addDropdownItem","editDropdownItem","deleteDropdownItem","getAppSupportMessages","langId","addAppSupportMessage","appMessage","updateAppSupportMessage","removeAppSupportMessage","getAppSupportMessageTitles","addAppSupportMessageTitle","appMessageTitle","updateAppSupportMessageTitle","removeAppSupportMessageTitle","getWebsiteViewStatistics","mapJsonToViewStatistics","exportGeneralStats","exportQueryStats","exportUserStats","exportSongStats","exportCartStats","exportDropdownStats","exportViewStats","exportNameCountStats","exportPerMonthStatsStats","exportKokoIDAlbumAsExcel","kokoAlbum","KokoId","searchForSimilarTrackWithKokoId","getDurationOfVideo","searchForSimilarTrackWithWeblink","startTime","searchForSimilarTrackWithFile","populateSimilarTracks","matches","RouteNav","constructor","_defineProperty","CartInfo","creationDate","lastLoadingDate","DropdownItem","TargetExportRequest","surname","uncPath","firstName","lastName","TargetExportProp","cartName","TargetExportSongInfo","hasBeenExported","AccountInfo","company","job","cel","celPrefix","SongSearchForm","numberOfSongs","musicStyle","emotion","musicOccasion","instrument","musicMinTimeM","musicMinTimeS","musicMaxTimeM","musicMaxTimeS","LuceneSearchRequest","currentpage","CreateAccountRequest","super","Themecart","publicGuid","ExtendedThemecart","order","ThemecartEditRequest","ThemecartCreateRequest","DropDownCartItem","text","value","DropDownCoverItem","MaintainancePeriod","MaintainancePeriodEdit","GeneralStatistic","totalSongs","totalArtists","totalRegisteredUsers","totalCarts","averageCarts","averageSongsPerCarts","userWithNoCarts","UserStatistic","registrationDate","profession","phoneNumber","accountState","numberOfCarts","UserStatistics","BarDiagramItem","y","UserInfo","DropdownItemEditRequest","resourceSheetKey","lucenePattern","categoryId","localization","KokoIdRange","startKokoId","endKokoId","AppSupportMessage","appTitleId","AppSupportMessageUI","EditAppSupportMessage","AppSupportMessageTitle","AppSupportMessageTitleUI","EditAppSupportMessageTitle","ViewStatistic","timesCalled","ViewStatistics","totalTimesCalled","NewsCookie","version","expirationDate","ARTISTTYPES","PHONEPREFIXES","PASSWORD_REGEX_PAT","CEL_REGEX_PAT","KokoId_REGEX_PAT","KokoId_Album_REGEX_PAT","Similaritysearch_URL_PAT","Similaritysearch_Youtube_PAT","SONG_RESULTS_PER_PAGE","CART_RESULTS_PER_PAGE","SONGS_PLAYED_LOCALSTORAGE_KEY","SEARCH_FORM_SESSIONSTORAGE_KEY","cartManagement","NEWS_MODAL_IDENTIFIER_KEY","CURRENT_NEWS_VERSION","DROPDOWN_ITEMS_CATEGORY_DE","t","toString","perMonthStatistics","views","newUsers","queries","dropdowns","zeroPad","num","places","String","padStart","guidRegEx","RegExp","test","mapJsonToTargetExportSong","json","minutes","duration","seconds","jsonObj","resourceKey","toDateTime","mapJsonToUserResult","userArray","userRes","mapJsonToTargetExportTargetItem","targetExportItems","targetExportItemsTransformed","mapJsonToMaintainancePeriod","mainItems","maintItemsTransformed","mapJsonToMaintainancePeriodEdit","mapJsonToUserInfo","mapJsonToUserStatistic","registrationDateUnix","mapJsonToViewStatistic","stats","mapUserSortStringToNumber","mapQueryStatsSortStringToNumber","mapSongStatsSortStringToNumber","mapCartStatsSortStringToNumber","mapUserStatsSortStringToNumber","mapDropdownStatsSortStringToNumber","mapViewStatsSortStringToNumber","createSongSearchForm","search","musicMinTimeM1","convertToNumber","musicMinTimeS1","musicMaxTimeM1","musicMaxTimeS1","isTruthy","isEmptyOrUndefined","trim","isNaN","Number","compareSongSearchForms","form1","form2","secs","setSeconds","isSearchEmpty","addHoursToDateTime","c","setTime","removeHoursToDateTime","addEmptyViewStats","statsArray","sortAsc","statsClone","map","sort","a","b","newStats","dates","firstDate","lastDate","setDate","getDate","stat","exists","myStorage","sessionStorage","getItem","setItem","clear","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","deferred","O","result","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","r","n","getter","__esModule","d","definition","o","defineProperty","enumerable","f","e","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","Function","obj","prop","hasOwnProperty","inProgress","dataWebpackPrefix","l","done","script","needAttach","scripts","getElementsByTagName","getAttribute","timeout","nc","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","setTimeout","bind","head","Symbol","toStringTag","p","createStylesheet","fullhref","oldTag","resolve","reject","linkTag","rel","nonce","onLinkComplete","errorType","realHref","err","insertBefore","nextSibling","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","then","installedChunks","installedChunkData","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}