From 6fe72d9add96492475ab328ce370e3fd13bb531d Mon Sep 17 00:00:00 2001 From: sajjad Date: Tue, 2 Nov 2021 19:31:32 +0330 Subject: [PATCH] fix --- package-lock.json | 210 +++++++++++------- package.json | 2 + .../repository/bookmarksRepository.js | 18 ++ .../repository/countriesRepository.js | 12 + .../repository/productCategoriesRepository.js | 11 + .../repository/productRepository.js | 25 +++ .../repository/profileRepository.js | 18 ++ .../repository/programRepository.js | 1 - .../repository/programSerieRepository.js | 21 ++ src/abstraction/repository/usersRepository.js | 16 ++ .../repository/workoutToSerieRepository.js | 28 +++ .../resources/bookmarksResource.js | 16 ++ .../resources/countriesResource.js | 9 + .../resources/productCategoriesResource.js | 11 + src/abstraction/resources/productResource.js | 48 ++++ .../resources/productSubCategoryResource.js | 11 + src/abstraction/resources/profileResource.js | 42 ++++ src/abstraction/resources/programResource.js | 4 + .../resources/programSerieResource.js | 28 +++ .../resources/trainerProgramResource.js | 10 +- src/abstraction/resources/usersResource.js | 28 +++ src/abstraction/resources/workoutResource.js | 15 +- src/components/AddProduct/Main.vue | 197 ++++++++++++++-- src/components/Admin/Sections.vue | 2 +- src/components/Bookmarks/Main.vue | 23 +- .../Bookmarks/Programs/Programs.vue | 15 +- .../Bookmarks/Workouts/Workouts.vue | 10 +- src/components/Global/Input/DateInput.vue | 5 + src/components/Global/Input/TimeInput.vue | 2 +- src/components/Global/Section/Back.vue | 4 +- .../Global/Section/SectionTitle.vue | 9 +- src/components/Products/Item.vue | 4 +- src/components/Products/Main.vue | 54 +++-- src/components/Profile/Main.vue | 51 ++++- src/components/ProgramSeries/Item.vue | 22 +- src/components/ProgramSeries/Main.vue | 62 +++--- .../ProgramSeries/Modals/AddSeriesModal.vue | 101 +++++++++ src/components/Programs/Item.vue | 5 +- .../Programs/Modals/FiltersModal.vue | 10 +- src/components/Users/Item.vue | 36 ++- src/components/Users/Main.vue | 49 ++-- .../Users/Modals/ChangeRoleModal.vue | 62 ++++-- src/components/Users/Modals/FiltersModal.vue | 14 +- src/components/Workouts/Main.vue | 2 +- .../Workouts/Modals/FiltersModal.vue | 14 +- src/components/WorkoutsSeries/Item.vue | 85 +++++-- src/components/WorkoutsSeries/Main.vue | 93 +++++--- .../WorkoutsSeries/Modals/AddWorkoutModal.vue | 197 ++++++++++++++++ src/router/path.js | 6 +- src/router/url.js | 25 +++ src/store/modules/auth/actions.js | 1 - src/store/modules/auth/mutations.js | 4 +- src/store/modules/bookmarks/actions.js | 15 ++ src/store/modules/bookmarks/getters.js | 4 + src/store/modules/bookmarks/mutations.js | 9 + src/store/modules/bookmarks/state.js | 7 + src/store/modules/countries/actions.js | 8 + src/store/modules/countries/getters.js | 3 + src/store/modules/countries/mutations.js | 6 + src/store/modules/countries/state.js | 3 + .../modules/productCategories/actions.js | 8 + .../modules/productCategories/getters.js | 3 + .../modules/productCategories/mutations.js | 6 + src/store/modules/productCategories/state.js | 3 + src/store/modules/products/actions.js | 29 +++ src/store/modules/products/getters.js | 5 + src/store/modules/products/mutations.js | 21 ++ src/store/modules/products/state.js | 7 + src/store/modules/profile/actions.js | 13 ++ src/store/modules/profile/getters.js | 3 + src/store/modules/profile/mutations.js | 9 + src/store/modules/profile/state.js | 3 + src/store/modules/programSerie/actions.js | 21 ++ src/store/modules/programSerie/getters.js | 4 + src/store/modules/programSerie/mutations.js | 16 ++ src/store/modules/programSerie/state.js | 4 + src/store/modules/programs/actions.js | 1 - src/store/modules/programs/mutations.js | 21 +- .../modules/sportCategories/mutations.js | 8 +- src/store/modules/users/actions.js | 15 ++ src/store/modules/users/getters.js | 4 + src/store/modules/users/mutations.js | 15 ++ src/store/modules/users/state.js | 6 + .../modules/workoutCategories.js/mutations.js | 4 +- src/store/modules/workoutToSerie/actions.js | 31 +++ src/store/modules/workoutToSerie/getters.js | 5 + src/store/modules/workoutToSerie/mutations.js | 19 ++ src/store/modules/workoutToSerie/state.js | 5 + src/store/modules/workouts/mutations.js | 20 +- src/styles/vuetify/_modify.scss | 10 +- vue.config.js | 11 +- 91 files changed, 1767 insertions(+), 366 deletions(-) create mode 100644 src/abstraction/repository/bookmarksRepository.js create mode 100644 src/abstraction/repository/countriesRepository.js create mode 100644 src/abstraction/repository/productCategoriesRepository.js create mode 100644 src/abstraction/repository/productRepository.js create mode 100644 src/abstraction/repository/profileRepository.js create mode 100644 src/abstraction/repository/programSerieRepository.js create mode 100644 src/abstraction/repository/usersRepository.js create mode 100644 src/abstraction/repository/workoutToSerieRepository.js create mode 100644 src/abstraction/resources/bookmarksResource.js create mode 100644 src/abstraction/resources/countriesResource.js create mode 100644 src/abstraction/resources/productCategoriesResource.js create mode 100644 src/abstraction/resources/productResource.js create mode 100644 src/abstraction/resources/productSubCategoryResource.js create mode 100644 src/abstraction/resources/profileResource.js create mode 100644 src/abstraction/resources/programSerieResource.js create mode 100644 src/abstraction/resources/usersResource.js create mode 100644 src/components/ProgramSeries/Modals/AddSeriesModal.vue create mode 100644 src/components/WorkoutsSeries/Modals/AddWorkoutModal.vue create mode 100644 src/store/modules/bookmarks/actions.js create mode 100644 src/store/modules/bookmarks/getters.js create mode 100644 src/store/modules/bookmarks/mutations.js create mode 100644 src/store/modules/bookmarks/state.js create mode 100644 src/store/modules/countries/actions.js create mode 100644 src/store/modules/countries/getters.js create mode 100644 src/store/modules/countries/mutations.js create mode 100644 src/store/modules/countries/state.js create mode 100644 src/store/modules/productCategories/actions.js create mode 100644 src/store/modules/productCategories/getters.js create mode 100644 src/store/modules/productCategories/mutations.js create mode 100644 src/store/modules/productCategories/state.js create mode 100644 src/store/modules/products/actions.js create mode 100644 src/store/modules/products/getters.js create mode 100644 src/store/modules/products/mutations.js create mode 100644 src/store/modules/products/state.js create mode 100644 src/store/modules/profile/actions.js create mode 100644 src/store/modules/profile/getters.js create mode 100644 src/store/modules/profile/mutations.js create mode 100644 src/store/modules/profile/state.js create mode 100644 src/store/modules/programSerie/actions.js create mode 100644 src/store/modules/programSerie/getters.js create mode 100644 src/store/modules/programSerie/mutations.js create mode 100644 src/store/modules/programSerie/state.js create mode 100644 src/store/modules/users/actions.js create mode 100644 src/store/modules/users/getters.js create mode 100644 src/store/modules/users/mutations.js create mode 100644 src/store/modules/users/state.js create mode 100644 src/store/modules/workoutToSerie/actions.js create mode 100644 src/store/modules/workoutToSerie/getters.js create mode 100644 src/store/modules/workoutToSerie/mutations.js create mode 100644 src/store/modules/workoutToSerie/state.js diff --git a/package-lock.json b/package-lock.json index 614ef1c..b09c956 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1166,6 +1166,21 @@ "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=", "dev": true }, + "@riophae/vue-treeselect": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@riophae/vue-treeselect/-/vue-treeselect-0.4.0.tgz", + "integrity": "sha512-J4atYmBqXQmiPFK/0B5sXKjtnGc21mBJEiyKIDZwk0Q9XuynVFX6IJ4EpaLmUgL5Tve7HAS7wkiGGSti6Uaxcg==", + "requires": { + "@babel/runtime": "^7.3.1", + "babel-helper-vue-jsx-merge-props": "^2.0.3", + "easings-css": "^1.0.0", + "fuzzysearch": "^1.0.3", + "is-promise": "^2.1.0", + "lodash": "^4.0.0", + "material-colors": "^1.2.6", + "watch-size": "^2.0.0" + } + }, "@soda/friendly-errors-webpack-plugin": { "version": "1.8.0", "resolved": "https://registry.nlark.com/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.8.0.tgz", @@ -1753,6 +1768,63 @@ "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=", "dev": true }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, "ssri": { "version": "8.0.1", "resolved": "https://registry.nlark.com/ssri/download/ssri-8.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fssri%2Fdownload%2Fssri-8.0.1.tgz", @@ -1761,6 +1833,28 @@ "requires": { "minipass": "^3.1.1" } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.8.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.1.tgz", + "integrity": "sha512-V53TJbHmzjBhCG5OYI2JWy/aYDspz4oVHKxS43Iy212GjGIG1T3EsB3+GWXFm/1z5VwjdjLmdZUFYM70y77vtQ==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + } } } }, @@ -2375,6 +2469,11 @@ "resolve": "^1.12.0" } }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, "babel-loader": { "version": "8.2.2", "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.2.2.tgz?cache=0&sync_timestamp=1606424688085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.2.2.tgz", @@ -4552,6 +4651,11 @@ "stream-shift": "^1.0.0" } }, + "easings-css": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/easings-css/-/easings-css-1.0.0.tgz", + "integrity": "sha512-7Uq7NdazNfVtr0RNmPAys8it0zKCuaqxJStYKEl72D3j4gbvXhhaM7iWNbqhA4C94ygCye6VuyhzBRQC4szeBg==" + }, "easy-bem": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/easy-bem/-/easy-bem-1.1.1.tgz", @@ -5583,6 +5687,11 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "fuzzysearch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fuzzysearch/-/fuzzysearch-1.0.3.tgz", + "integrity": "sha1-3/yA9tawQiPyImqnndGUIxCW0Ag=" + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.2.tgz?cache=0&sync_timestamp=1603829621482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgensync%2Fdownload%2Fgensync-1.0.0-beta.2.tgz", @@ -6757,6 +6866,11 @@ "isobject": "^3.0.1" } }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.nlark.com/is-regex/download/is-regex-1.1.4.tgz?cache=0&sync_timestamp=1628221905423&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-regex%2Fdownload%2Fis-regex-1.1.4.tgz", @@ -7115,9 +7229,8 @@ }, "lodash": { "version": "4.17.21", - "resolved": "https://registry.nlark.com/lodash/download/lodash-4.17.21.tgz", - "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=", - "dev": true + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.debounce": { "version": "4.0.8", @@ -7215,6 +7328,11 @@ "object-visit": "^1.0.0" } }, + "material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz", @@ -11374,87 +11492,6 @@ } } }, - "vue-loader-v16": { - "version": "npm:vue-loader@16.8.1", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.1.tgz", - "integrity": "sha512-V53TJbHmzjBhCG5OYI2JWy/aYDspz4oVHKxS43Iy212GjGIG1T3EsB3+GWXFm/1z5VwjdjLmdZUFYM70y77vtQ==", - "dev": true, - "optional": true, - "requires": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "loader-utils": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "optional": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "optional": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "optional": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "vue-meta": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/vue-meta/-/vue-meta-2.4.0.tgz", @@ -11564,6 +11601,11 @@ "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz", "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==" }, + "watch-size": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watch-size/-/watch-size-2.0.0.tgz", + "integrity": "sha512-M92R89dNoTPWyCD+HuUEDdhaDnh9jxPGOwlDc0u51jAgmjUvzqaEMynXSr3BaWs+QdHYk4KzibPy1TFtjLmOZQ==" + }, "watchpack": { "version": "1.7.5", "resolved": "https://registry.nlark.com/watchpack/download/watchpack-1.7.5.tgz?cache=0&sync_timestamp=1621437900992&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.5.tgz", diff --git a/package.json b/package.json index 20fa818..9b0d094 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,13 @@ "lint": "vue-cli-service lint" }, "dependencies": { + "@riophae/vue-treeselect": "^0.4.0", "axios": "^0.21.4", "bootstrap": "^4.6.0", "core-js": "^3.6.5", "izitoast": "^1.4.0", "jquery": "^3.6.0", + "lodash": "^4.17.21", "meta-router": "^4.0.1", "module-alias": "^2.2.2", "popper.js": "^1.16.1", diff --git a/src/abstraction/repository/bookmarksRepository.js b/src/abstraction/repository/bookmarksRepository.js new file mode 100644 index 0000000..f7f7eb4 --- /dev/null +++ b/src/abstraction/repository/bookmarksRepository.js @@ -0,0 +1,18 @@ +import axios from "axios"; +import url from '@/router/url'; +import { getArray } from "../resources/bookmarksResource"; + +export default class BookmarsRepository { + async indexCourses() { + let response = await axios.get(url('indexCoursesBookmarks')); + if (response.status === 200) { + return getArray(response.data); + } + } + async indexWorkouts() { + let response = await axios.get(url('indexWorkoutsBookmarks')); + if (response.status === 200) { + return getArray(response.data); + } + } +} \ No newline at end of file diff --git a/src/abstraction/repository/countriesRepository.js b/src/abstraction/repository/countriesRepository.js new file mode 100644 index 0000000..f636f75 --- /dev/null +++ b/src/abstraction/repository/countriesRepository.js @@ -0,0 +1,12 @@ +import axios from "axios"; +import url from '@/router/url'; +import { getJson } from "../resources/countriesResource"; + +export default class CountriesRepository { + async index() { + let response = await axios.get(url("indexCountries")); + if (response.status === 200) { + return getJson(response.data) + } + } +} \ No newline at end of file diff --git a/src/abstraction/repository/productCategoriesRepository.js b/src/abstraction/repository/productCategoriesRepository.js new file mode 100644 index 0000000..1b0650f --- /dev/null +++ b/src/abstraction/repository/productCategoriesRepository.js @@ -0,0 +1,11 @@ +import axios from "axios"; +import url from "@/router/url"; +import { getArray } from "../resources/productCategoriesResource"; +export default class ProductCategoriesRepository { + async index() { + let response = await axios.get(url("indexProductCategories")); + if (response.status === 200) { + return getArray(response.data); + } + } +} diff --git a/src/abstraction/repository/productRepository.js b/src/abstraction/repository/productRepository.js new file mode 100644 index 0000000..1b10650 --- /dev/null +++ b/src/abstraction/repository/productRepository.js @@ -0,0 +1,25 @@ +import axios from "axios"; +import url from "@/router/url"; +import { getJson, setData, getArray, setQuery } from "../resources/productResource"; +export default class ProductRepository { + async index(data) { + let params = setQuery(data); + let response = await axios.get(url("indexProduct"), { params }); + if (response.status === 200) { + return getArray(response.data); + } + } + async show(productId) { + let response = await axios.get(url("showProduct", { product: productId })); + if (response.status === 200) { + return getJson(response.data.data); + } + } + async store(data) { + let json = setData(data); + let response = await axios.post(url("storeProduct"), json); + if (response.status === 201) { + return getJson(response.data); + } + } +} diff --git a/src/abstraction/repository/profileRepository.js b/src/abstraction/repository/profileRepository.js new file mode 100644 index 0000000..7df72b7 --- /dev/null +++ b/src/abstraction/repository/profileRepository.js @@ -0,0 +1,18 @@ +import axios from "axios"; +import url from '@/router/url' +import { setData, getJson } from '../resources/profileResource'; +export default class ProfileRepository { + async show() { + let response = await axios.get(url("showProfile")); + if (response.status === 200) { + return getJson(response.data.data); + } + } + async update(data) { + let json = setData(data, true); + let response = await axios.post(url("updateProfile"), json); + if (response.status === 200) { + return getJson(response.data.data); + } + } +} \ No newline at end of file diff --git a/src/abstraction/repository/programRepository.js b/src/abstraction/repository/programRepository.js index 8e8f7ac..559be95 100644 --- a/src/abstraction/repository/programRepository.js +++ b/src/abstraction/repository/programRepository.js @@ -15,7 +15,6 @@ export default class ProgramRepository { // data.pagination['itemsPerPage'] = 2 // } let params = setQuery(data); - // console.log('params', params); let response = await axios.get(url("indexProgram"), { headers: { 'accept-language': 'en' }, params diff --git a/src/abstraction/repository/programSerieRepository.js b/src/abstraction/repository/programSerieRepository.js new file mode 100644 index 0000000..d40c86d --- /dev/null +++ b/src/abstraction/repository/programSerieRepository.js @@ -0,0 +1,21 @@ +import axios from "axios"; +import url from "@/router/url"; +import { getJson, setData } from "../resources/programSerieResource"; +export default class ProgramSerieRepository { + async show(courseId) { + let response = await axios.get(url("showProgram", { course: courseId })); + if (response.status === 200) { + return getJson(response.data.data); + } + } + async store(data, courseId) { + let json = setData(data); + let response = await axios.post(url("storeSerie", { course: courseId }), json); + if (response.status === 201 || response.status === 200) { + return getJson(response.data); + } + } + async delete(data) { + await axios.delete(url("destroySerie", { serie: data })); + } +} \ No newline at end of file diff --git a/src/abstraction/repository/usersRepository.js b/src/abstraction/repository/usersRepository.js new file mode 100644 index 0000000..416b15e --- /dev/null +++ b/src/abstraction/repository/usersRepository.js @@ -0,0 +1,16 @@ +import axios from "axios"; +import url from "@/router/url"; +import { getArray, setQuery } from "../resources/usersResource"; + +export default class UsersRepository { + async index(data) { + let params = setQuery(data) + let response = await axios.get(url('indexUsers'), { params }) + if (response.status === 200) { + return getArray(response.data) + } + } + async delete(userId) { + await axios.delete(url("destroyUser", { user: userId })); + } +} \ No newline at end of file diff --git a/src/abstraction/repository/workoutToSerieRepository.js b/src/abstraction/repository/workoutToSerieRepository.js new file mode 100644 index 0000000..1116cf3 --- /dev/null +++ b/src/abstraction/repository/workoutToSerieRepository.js @@ -0,0 +1,28 @@ +import axios from "axios"; +import url from "@/router/url"; +import { getJson, getArray, setQuery, setData } from "../resources/workoutResource.js"; +export default class WorkoutToSerieRepository { + async index(data) { + let params = setQuery(data); + let response = await axios.get(url("indexClientWorkout"), { params }); + if (response.status === 200) { + return getArray(response.data); + } + } + async show(workoutId) { + let response = await axios.get(url("showClientWorkout", { workout: workoutId })); + if (response.status === 200) { + return getJson(response.data.data); + } + } + async store(data, serieId, workoutId) { + let json = setData(data); + let response = await axios.post(url("joinWorkoutToSerie", { serie: serieId, workout: workoutId }), json); + if (response.status === 201 || response.status === 200) { + return response.data; + } + } + async delete(data) { + await axios.delete(url("destroyWorkoutFromSerie", { serie: data.serieId, workout: data.workoutId })); + } +} \ No newline at end of file diff --git a/src/abstraction/resources/bookmarksResource.js b/src/abstraction/resources/bookmarksResource.js new file mode 100644 index 0000000..eb33e27 --- /dev/null +++ b/src/abstraction/resources/bookmarksResource.js @@ -0,0 +1,16 @@ +import { getJson as getJsonProgram } from './programResource' +import { getJson as getJsonWorkout } from './workoutResource' +export const getJson = (data) => ({ + id: data.id, + bookmarkable_type: data.bookmarkable_type, + bookmarkable_id: data.bookmarkable_id, + user_id: data.user_id, + + bookmark_data: data.courses ? getJsonProgram(data.courses) : getJsonWorkout(data.workouts), +}); +export const getArray = ({ data }) => { + // const pagination = SetPagination(meta); + console.log(data); + data = data.map(bookmark => getJson(bookmark)); + return { data }; +}; \ No newline at end of file diff --git a/src/abstraction/resources/countriesResource.js b/src/abstraction/resources/countriesResource.js new file mode 100644 index 0000000..9e51f91 --- /dev/null +++ b/src/abstraction/resources/countriesResource.js @@ -0,0 +1,9 @@ +export const getJson = (data) => ({ + id: data.id, + name: data.name, + code: data.code +}); +export const getArray = ({ data }) => { + data = data.map(country => getJson(country)) + return { data } +}; \ No newline at end of file diff --git a/src/abstraction/resources/productCategoriesResource.js b/src/abstraction/resources/productCategoriesResource.js new file mode 100644 index 0000000..47c0919 --- /dev/null +++ b/src/abstraction/resources/productCategoriesResource.js @@ -0,0 +1,11 @@ +export const getJson = (data) => ({ + id: data.id, + local_name: data.local_name, + name: data.name, + label: data.name, + children: data.children +}); +export const getArray = ({ data }) => { + data = data.map((productCategory) => getJson(productCategory)); + return { data }; +} \ No newline at end of file diff --git a/src/abstraction/resources/productResource.js b/src/abstraction/resources/productResource.js new file mode 100644 index 0000000..6fdaf55 --- /dev/null +++ b/src/abstraction/resources/productResource.js @@ -0,0 +1,48 @@ +import { objectToFormData } from "@/utils/objectToFormData"; +import { SetPagination, SetQueriesObject } from "@/utils/setQueriesObject"; + +export const getJson = (data) => ({ + id: data.id, + thumbnail: data.thumbnail, + title: data.title, + tags: data.tags, + description: data.description, + images: data.images, + name: data.name, + video_link: data.video_link, + purchase_link: data.purchase_link, + price: data.price, + weight: data.weight, + dimensions: data.dimensions, + product_category: data.product_category, + product_categories_id: data.product_category?.id, + product_category_id: data.product_category?.parent?.id +}); +export const setData = (data, isUpdate = false) => { + let formData = { + product_category_id: data.product_category_id, + title: data.title, + description: data.description, + purchase_link: data.purchase_link, + price: `${data.price}$`, + video_link: data.video_link, + name: data.name, + dimensions: `${data.dimensions}cm`, + weight: `${data.weight}kg`, + tags: data.tags, + batch_id: data.batch_id + }; + if (isUpdate) { + formData["_method"] = "put"; + } + return objectToFormData(formData); +}; +export const getArray = ({ data, meta }) => { + const pagination = SetPagination(meta); + data = data.map(product => getJson(product)); + return { data, pagination }; +}; + +export const setQuery = (data) => { + return SetQueriesObject(data); +}; diff --git a/src/abstraction/resources/productSubCategoryResource.js b/src/abstraction/resources/productSubCategoryResource.js new file mode 100644 index 0000000..2b69a0e --- /dev/null +++ b/src/abstraction/resources/productSubCategoryResource.js @@ -0,0 +1,11 @@ +export const getJsonProductSubCategory = (data) => ({ + id: data.id, + name: data.name, + label: data.name, + local_name: data.local_name, + children: data.children ? getArrayProductSubCategory(data.children) : [], +}); +export const getArrayProductSubCategory = (data) => { + data = data.map((productCategory) => getJsonProductSubCategory(productCategory)); + return data; +} \ No newline at end of file diff --git a/src/abstraction/resources/profileResource.js b/src/abstraction/resources/profileResource.js new file mode 100644 index 0000000..ac60390 --- /dev/null +++ b/src/abstraction/resources/profileResource.js @@ -0,0 +1,42 @@ +import { objectToFormData } from "@/utils/objectToFormData"; +export const getJson = (data) => ({ + id: data.id, + first_name: data.first_name, + last_name: data.last_name, + birthday: data.birthday, + weight: data.weight, + height: data.height, + arm_diameter: data.arm_diameter, + leg_diameter: data.leg_diameter, + details: data.details, + profile: data.profile, + address: data.address, + email: data.email, + cell_number: data.cell_number, + is_admin: data.is_admin, + is_trainer: data.is_trainer, + country: data.country, + country_id: data.country.id, + created_courses_count: data.created_courses_count, + joined_courses_count: data.joined_courses_count +}); +export const setData = (data, isUpdate = false) => { + let formData = { + first_name: data.first_name, + last_name: data.last_name, + birthday: data.birthday, + weight: data.weight, + height: data.height, + arm_diameter: data.arm_diameter, + leg_diameter: data.leg_diameter, + details: data.details, + address: data.address, + email: data.email, + cell_number: data.cell_number, + country_id: data.country_id, + }; + if (isUpdate) { + formData["_method"] = "put"; + } + return objectToFormData(formData); +} \ No newline at end of file diff --git a/src/abstraction/resources/programResource.js b/src/abstraction/resources/programResource.js index 4410fc5..a3b21d5 100644 --- a/src/abstraction/resources/programResource.js +++ b/src/abstraction/resources/programResource.js @@ -5,6 +5,7 @@ import { objectToFormData } from "@/utils/objectToFormData"; export const getJson = (data) => ({ id: data.id, trainer: data.trainer ? getJsonTrainer(data.trainer) : {}, + trainer_id: data.trainer_id, sport_category: data.trainer ? getJsonSportCategory(data.trainer) : {}, sport_category_id: data.sport_category_id, thumbnail: data.thumbnail, @@ -15,6 +16,9 @@ export const getJson = (data) => ({ description: data.description, series_count: data.series_count, workouts_count: data.workouts_count, + language_id: data.language_id, + type: data.type, + period: data.period }); export const setData = (data, isUpdate = false) => { let formData = { diff --git a/src/abstraction/resources/programSerieResource.js b/src/abstraction/resources/programSerieResource.js new file mode 100644 index 0000000..6633fe5 --- /dev/null +++ b/src/abstraction/resources/programSerieResource.js @@ -0,0 +1,28 @@ +import { getJsonTrainer } from './trainerProgramResource'; +import { objectToFormData } from "@/utils/objectToFormData"; +export const getJson = (data) => ({ + id: data.id, + trainer: data.trainer ? getJsonTrainer(data.trainer) : {}, + sport_category_id: data.sport_category_id, + verified: data.verified, + title: data.title, + description: data.description, + thumbnail: data.thumbnail, + course_type: data.course_type, + tags: data.tags, + series_count: data.series_count, + workouts_count: data.workouts_count, + series: data.series, + course_series_id: data.course_series_id, + estimate_time: data.estimate_time, + repeat: data.repeat, + name: data.name +}); +export const setData = (data) => { + let formData = { + name: data.name, + estimate_time: data.estimate_time, + repeat: data.repeat + }; + return objectToFormData(formData); +}; \ No newline at end of file diff --git a/src/abstraction/resources/trainerProgramResource.js b/src/abstraction/resources/trainerProgramResource.js index 7cf3970..15541fe 100644 --- a/src/abstraction/resources/trainerProgramResource.js +++ b/src/abstraction/resources/trainerProgramResource.js @@ -7,5 +7,11 @@ export const getJsonTrainer = (data) => ({ height: data.height, arm_diameter: data.arm_diameter, leg_diameter: data.leg_diameter, - details: data.details -}) \ No newline at end of file + details: data.details, + profile: data.profile, + address: data.address, + email: data.email, + cell_number: data.cell_number, + is_admin: data.is_admin, + is_trainer: data.is_trainer, +}); \ No newline at end of file diff --git a/src/abstraction/resources/usersResource.js b/src/abstraction/resources/usersResource.js new file mode 100644 index 0000000..7612a88 --- /dev/null +++ b/src/abstraction/resources/usersResource.js @@ -0,0 +1,28 @@ +import { SetPagination, SetQueriesObject } from "@/utils/setQueriesObject"; +export const getJson = (data) => ({ + id: data.id, + first_name: data.first_name, + last_name: data.last_name, + birthday: data.birthday, + weight: data.weight, + height: data.height, + arm_diameter: data.arm_diameter, + leg_diameter: data.leg_diameter, + details: data.details, + profile: data.profile, + address: data.address, + email: data.email, + cell_number: data.cell_number, + is_admin: data.is_admin, + is_trainer: data.is_trainer, + created_courses_count: data.created_courses_count, + joined_courses_count: data.joined_courses_count +}); +export const getArray = ({ data, meta }) => { + const pagination = SetPagination(meta); + data = data.map((user) => getJson(user)); + return { data, pagination }; +}; +export const setQuery = (data) => { + return SetQueriesObject(data); +}; diff --git a/src/abstraction/resources/workoutResource.js b/src/abstraction/resources/workoutResource.js index 1d9b622..be643c4 100644 --- a/src/abstraction/resources/workoutResource.js +++ b/src/abstraction/resources/workoutResource.js @@ -1,11 +1,11 @@ import { objectToFormData } from "@/utils/objectToFormData"; -import { SetQueriesObject } from "@/utils/setQueriesObject"; +import { SetPagination, SetQueriesObject } from "@/utils/setQueriesObject"; export const getJson = (data) => ({ id: data.id, local_name: data.local_name, name: data.name, - workout_category_id: data.workout_category.id, - sport_category_id: data.workout_category.sport_category ? data.workout_category.sport_category.id : null, + workout_category_id: data.workout_category?.id, + sport_category_id: data.workout_category?.sport_category ? data.workout_category.sport_category.id : null, description: data.description, suggested_per_set: data.suggested_per_set, suggested_set: data.suggested_set, @@ -29,16 +29,19 @@ export const setData = (data, isUpdate = false) => { suggested_time: data.suggested_time, batch_id: data.batch_id, tags: data.tags, + set: data.set, + per_set: data.per_set, + estimate_time: data.estimate_time }; if (isUpdate) { formData["_method"] = "put"; } return objectToFormData(formData); }; -export const getArray = ({ data }) => { - +export const getArray = ({ data, meta }) => { + const pagination = SetPagination(meta); data = data.map((workout) => getJson(workout)); - return { data }; + return { data, pagination }; }; export const setQuery = (data) => { diff --git a/src/components/AddProduct/Main.vue b/src/components/AddProduct/Main.vue index ba4a31d..52d633a 100644 --- a/src/components/AddProduct/Main.vue +++ b/src/components/AddProduct/Main.vue @@ -15,12 +15,11 @@
-
- -
- select a workout image -
-
+
@@ -28,16 +27,37 @@ + @@ -48,6 +68,8 @@ placeholder="product name" label="product name" class="no-error-msg pt-0 mt-0" + dark + v-model="form.name" > @@ -64,6 +88,8 @@ rows="3" label="description" placeholder="description" + dark + v-model="form.description" > @@ -78,6 +104,9 @@ placeholder="price" label="price" class="no-error-msg pt-0 mt-0" + prefix="$" + dark + v-model="form.price" > @@ -107,22 +144,39 @@ - + persistent-hint + small-chips + dark + > + + @@ -155,6 +209,7 @@ text="add the product" class="custom-btn add-btn" height="25" + @click.native="submit" /> @@ -163,19 +218,88 @@ + \ No newline at end of file diff --git a/src/components/Admin/Sections.vue b/src/components/Admin/Sections.vue index fa313fc..0906855 100644 --- a/src/components/Admin/Sections.vue +++ b/src/components/Admin/Sections.vue @@ -5,7 +5,7 @@