From c1370afb166d4311de21fbdec6f3ce77a315cdcc Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Tue, 4 May 2021 20:45:11 -0800 Subject: [PATCH] Refactor/backend routers (#388) * update router * update caddy file * setup depends in docker-fole * make changes for serving on subpath * set dev config * fix router signups * consolidate links * backup-functionality to dashboard * new user card * consolidate theme into profile * fix theme tests * fix pg tests * fix pg tests * remove unused import * mobile margin Co-authored-by: hay-kot --- .vscode/settings.json | 19 +- Caddyfile | 10 +- Caddyfile.dev | 9 + docker-compose.yml | 2 + frontend/src/api/recipe.js | 10 +- frontend/src/api/themes.js | 20 +- .../FormHelpers/ColorPickerDialog.vue | 12 +- .../FormHelpers}/ImportOptions.vue | 8 +- .../src/components/Recipe/Parts/Assets.vue | 15 +- .../components/Recipe/RecipeViewer/index.vue | 2 +- .../components/UI/Buttons/TheUploadBtn.vue | 7 +- frontend/src/components/UI/CardSection.vue | 66 +++--- .../components/UI/Dialogs/BackupDialog.vue | 142 ++++++++++++ .../src/components/UI/Dialogs/BaseDialog.vue | 35 ++- .../UI/Dialogs}/ImportDialog.vue | 2 +- .../Dashboard => components/UI}/StatCard.vue | 27 ++- frontend/src/components/UI/TheSidebar.vue | 10 - .../Admin/Backup/AvailableBackupCard.vue | 79 ------- .../src/pages/Admin/Backup/NewBackupCard.vue | 113 --------- frontend/src/pages/Admin/Backup/index.vue | 75 ------ .../pages/Admin/Dashboard/BackupViewer.vue | 15 +- .../src/pages/Admin/Dashboard/EventViewer.vue | 4 +- frontend/src/pages/Admin/Dashboard/index.vue | 2 +- .../src/pages/Admin/Profile/ThemeCard.vue | 215 ++++++++++++++++++ frontend/src/pages/Admin/Profile/UserCard.vue | 190 ++++++++++++++++ frontend/src/pages/Admin/Profile/index.vue | 215 ++---------------- .../src/pages/Admin/Theme/NewThemeDialog.vue | 89 -------- frontend/src/pages/Admin/Theme/ThemeCard.vue | 88 ------- frontend/src/pages/Admin/Theme/index.vue | 155 ------------- frontend/src/pages/HomePage.vue | 1 + frontend/src/pages/Recipes/AllRecipes.vue | 1 + frontend/src/routes/admin.js | 17 -- frontend/src/routes/index.js | 1 + frontend/src/store/modules/userSettings.js | 2 +- mealie/app.py | 24 +- mealie/db/database.py | 2 +- mealie/db/models/theme.py | 34 +-- mealie/routes/about/__init__.py | 4 +- mealie/routes/groups/__init__.py | 8 + mealie/routes/mealplans/__init__.py | 9 + mealie/routes/media/__init__.py | 7 + mealie/routes/media/recipe.py | 41 ++++ mealie/routes/media/user.py | 0 mealie/routes/recipe/__init__.py | 13 +- mealie/routes/recipe/recipe_crud_routes.py | 33 ++- mealie/routes/recipe/recipe_media.py | 70 ------ mealie/routes/site_settings/__init__.py | 9 + mealie/routes/theme_routes.py | 20 +- mealie/routes/users/__init__.py | 9 + mealie/routes/users/users.py | 9 - mealie/schema/theme.py | 5 +- .../integration_tests/test_settings_routes.py | 17 +- 52 files changed, 878 insertions(+), 1094 deletions(-) create mode 100644 Caddyfile.dev rename frontend/src/{pages/Admin/Backup => components/FormHelpers}/ImportOptions.vue (92%) create mode 100644 frontend/src/components/UI/Dialogs/BackupDialog.vue rename frontend/src/{pages/Admin/Backup => components/UI/Dialogs}/ImportDialog.vue (97%) rename frontend/src/{pages/Admin/Dashboard => components/UI}/StatCard.vue (71%) delete mode 100644 frontend/src/pages/Admin/Backup/AvailableBackupCard.vue delete mode 100644 frontend/src/pages/Admin/Backup/NewBackupCard.vue delete mode 100644 frontend/src/pages/Admin/Backup/index.vue create mode 100644 frontend/src/pages/Admin/Profile/ThemeCard.vue create mode 100644 frontend/src/pages/Admin/Profile/UserCard.vue delete mode 100644 frontend/src/pages/Admin/Theme/NewThemeDialog.vue delete mode 100644 frontend/src/pages/Admin/Theme/ThemeCard.vue delete mode 100644 frontend/src/pages/Admin/Theme/index.vue create mode 100644 mealie/routes/media/__init__.py create mode 100644 mealie/routes/media/recipe.py create mode 100644 mealie/routes/media/user.py delete mode 100644 mealie/routes/recipe/recipe_media.py delete mode 100644 mealie/routes/users/users.py diff --git a/.vscode/settings.json b/.vscode/settings.json index 21ff09b98881..b0dfef42d8b3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,28 +1,19 @@ { "python.formatting.provider": "black", "python.pythonPath": ".venv/bin/python3.9", - "python.linting.pylintEnabled": true, + "python.linting.pylintEnabled": false, "python.linting.enabled": true, "python.testing.unittestEnabled": false, "python.testing.nosetestsEnabled": false, "python.testing.pytestEnabled": true, "python.testing.autoTestDiscoverOnSaveEnabled": false, "python.testing.pytestArgs": ["tests"], - "cSpell.enableFiletypes": [ - "!javascript", - "!python", - "!yaml" - ], + "cSpell.enableFiletypes": ["!javascript", "!python", "!yaml"], "i18n-ally.localesPaths": "frontend/src/locales/messages", "i18n-ally.sourceLanguage": "en-US", "i18n-ally.enabledFrameworks": ["vue"], "i18n-ally.keystyle": "nested", - "cSpell.words": [ - "compression", - "hkotel", - "performant", - "postgres", - "webp" - ], - "search.mode": "reuseEditor" + "cSpell.words": ["compression", "hkotel", "performant", "postgres", "webp"], + "search.mode": "reuseEditor", + "python.linting.flake8Enabled": true } diff --git a/Caddyfile b/Caddyfile index 0faf9fe7d519..73fb21ab345b 100644 --- a/Caddyfile +++ b/Caddyfile @@ -6,11 +6,11 @@ :80 { @proxied path /api/* /docs /openapi.json - root * /app/dist - encode gzip + encode gzip zstd uri strip_suffix / - handle_path /api/recipes/media/* { + # Handles Recipe Images / Assets + handle_path /api/media/recipes/* { root * /app/data/recipes/ file_server } @@ -20,8 +20,8 @@ } handle { - try_files {path}.html {path} / + root * /app/dist + try_files {path}.html {path} /index.html file_server } - } \ No newline at end of file diff --git a/Caddyfile.dev b/Caddyfile.dev new file mode 100644 index 000000000000..f8d99bb39756 --- /dev/null +++ b/Caddyfile.dev @@ -0,0 +1,9 @@ +{ + admin off +} + +localhost { + handle /mealie/* { + reverse_proxy http://127.0.0.1:9090 + } +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 07593c5670d3..09452c92cf5a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,6 +6,8 @@ services: dockerfile: Dockerfile container_name: mealie restart: always + depends_on: + - "postgres" ports: - 9090:80 environment: diff --git a/frontend/src/api/recipe.js b/frontend/src/api/recipe.js index 4410b23a1e11..948f766d5062 100644 --- a/frontend/src/api/recipe.js +++ b/frontend/src/api/recipe.js @@ -135,14 +135,18 @@ export const recipeAPI = { }, recipeImage(recipeSlug) { - return `/api/recipes/media/${recipeSlug}/images/original.webp`; + return `/api/media/recipes/${recipeSlug}/images/original.webp`; }, recipeSmallImage(recipeSlug) { - return `/api/recipes/media/${recipeSlug}/images/min-original.webp`; + return `/api/media/recipes/${recipeSlug}/images/min-original.webp`; }, recipeTinyImage(recipeSlug) { - return `/api/recipes/media/${recipeSlug}/images/tiny-original.webp`; + return `/api/media/recipes/${recipeSlug}/images/tiny-original.webp`; + }, + + recipeAssetPath(recipeSlug, assetName) { + return `api/media/recipes/${recipeSlug}/assets/${assetName}`; }, }; diff --git a/frontend/src/api/themes.js b/frontend/src/api/themes.js index cfd433594398..0917afb31a4d 100644 --- a/frontend/src/api/themes.js +++ b/frontend/src/api/themes.js @@ -6,10 +6,10 @@ const prefix = baseURL + "themes"; const settingsURLs = { allThemes: `${baseURL}themes`, - specificTheme: themeName => `${prefix}/${themeName}`, + specificTheme: id => `${prefix}/${id}`, createTheme: `${prefix}/create`, - updateTheme: themeName => `${prefix}/${themeName}`, - deleteTheme: themeName => `${prefix}/${themeName}`, + updateTheme: id => `${prefix}/${id}`, + deleteTheme: id => `${prefix}/${id}`, }; export const themeAPI = { @@ -32,22 +32,18 @@ export const themeAPI = { ); }, - update(themeName, colors) { - const body = { - name: themeName, - colors: colors, - }; + update(data) { return apiReq.put( - settingsURLs.updateTheme(themeName), - body, + settingsURLs.updateTheme(data.id), + data, () => i18n.t("settings.theme.error-updating-theme"), () => i18n.t("settings.theme.theme-updated") ); }, - delete(themeName) { + delete(id) { return apiReq.delete( - settingsURLs.deleteTheme(themeName), + settingsURLs.deleteTheme(id), null, () => i18n.t("settings.theme.error-deleting-theme"), () => i18n.t("settings.theme.theme-deleted") diff --git a/frontend/src/components/FormHelpers/ColorPickerDialog.vue b/frontend/src/components/FormHelpers/ColorPickerDialog.vue index 3c0fc13be4b3..13ba003ec499 100644 --- a/frontend/src/components/FormHelpers/ColorPickerDialog.vue +++ b/frontend/src/components/FormHelpers/ColorPickerDialog.vue @@ -3,7 +3,7 @@

{{ buttonText }}

- + diff --git a/frontend/src/pages/Admin/Backup/ImportOptions.vue b/frontend/src/components/FormHelpers/ImportOptions.vue similarity index 92% rename from frontend/src/pages/Admin/Backup/ImportOptions.vue rename to frontend/src/components/FormHelpers/ImportOptions.vue index 35e783c06450..74f133edbbe6 100644 --- a/frontend/src/pages/Admin/Backup/ImportOptions.vue +++ b/frontend/src/components/FormHelpers/ImportOptions.vue @@ -1,8 +1,8 @@ diff --git a/frontend/src/pages/Admin/Backup/ImportDialog.vue b/frontend/src/components/UI/Dialogs/ImportDialog.vue similarity index 97% rename from frontend/src/pages/Admin/Backup/ImportDialog.vue rename to frontend/src/components/UI/Dialogs/ImportDialog.vue index 0aed4c0e2f46..49eef5a33082 100644 --- a/frontend/src/pages/Admin/Backup/ImportDialog.vue +++ b/frontend/src/components/UI/Dialogs/ImportDialog.vue @@ -48,7 +48,7 @@ - - diff --git a/frontend/src/pages/Admin/Backup/NewBackupCard.vue b/frontend/src/pages/Admin/Backup/NewBackupCard.vue deleted file mode 100644 index e7d903a12b55..000000000000 --- a/frontend/src/pages/Admin/Backup/NewBackupCard.vue +++ /dev/null @@ -1,113 +0,0 @@ - - - - - diff --git a/frontend/src/pages/Admin/Backup/index.vue b/frontend/src/pages/Admin/Backup/index.vue deleted file mode 100644 index 6644901b50bc..000000000000 --- a/frontend/src/pages/Admin/Backup/index.vue +++ /dev/null @@ -1,75 +0,0 @@ - - - - - diff --git a/frontend/src/pages/Admin/Dashboard/BackupViewer.vue b/frontend/src/pages/Admin/Dashboard/BackupViewer.vue index 5ef1259685c6..cda4e95df8f4 100644 --- a/frontend/src/pages/Admin/Dashboard/BackupViewer.vue +++ b/frontend/src/pages/Admin/Dashboard/BackupViewer.vue @@ -26,6 +26,8 @@ + + mdi-plus Create @@ -36,7 +38,7 @@ - mdi-backup-restore + mdi-database @@ -65,13 +67,14 @@ import TheUploadBtn from "@/components/UI/Buttons/TheUploadBtn"; import ImportSummaryDialog from "@/components/ImportSummaryDialog"; import { api } from "@/api"; -import StatCard from "./StatCard"; -import ImportDialog from "../Backup/ImportDialog"; +import StatCard from "@/components/UI/StatCard"; +import BackupDialog from "@/components/UI/Dialogs/BackupDialog"; +import ImportDialog from "@/components/UI/Dialogs/ImportDialog"; export default { - components: { StatCard, ImportDialog, TheUploadBtn, ImportSummaryDialog }, + components: { StatCard, ImportDialog, TheUploadBtn, ImportSummaryDialog, BackupDialog }, data() { return { - color: "secondary", + color: "accent", selectedName: "", selectedDate: "", loading: false, @@ -91,7 +94,6 @@ export default { async getAvailableBackups() { const response = await api.backups.requestAvailable(); this.availableBackups = response.imports; - console.log(this.availableBackups); }, async deleteBackup(name) { @@ -106,6 +108,7 @@ export default { this.selectedName = backup.name; this.$refs.import_dialog.open(); }, + async importBackup(data) { this.loading = true; const response = await api.backups.import(data.name, data); diff --git a/frontend/src/pages/Admin/Dashboard/EventViewer.vue b/frontend/src/pages/Admin/Dashboard/EventViewer.vue index 5070c677b6eb..417fe1a176a7 100644 --- a/frontend/src/pages/Admin/Dashboard/EventViewer.vue +++ b/frontend/src/pages/Admin/Dashboard/EventViewer.vue @@ -49,12 +49,12 @@ + + \ No newline at end of file diff --git a/frontend/src/pages/Admin/Profile/UserCard.vue b/frontend/src/pages/Admin/Profile/UserCard.vue new file mode 100644 index 000000000000..190c0fd65142 --- /dev/null +++ b/frontend/src/pages/Admin/Profile/UserCard.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/frontend/src/pages/Admin/Profile/index.vue b/frontend/src/pages/Admin/Profile/index.vue index 106d4b9899b5..9aea25370871 100644 --- a/frontend/src/pages/Admin/Profile/index.vue +++ b/frontend/src/pages/Admin/Profile/index.vue @@ -1,206 +1,27 @@ diff --git a/frontend/src/pages/Admin/Theme/NewThemeDialog.vue b/frontend/src/pages/Admin/Theme/NewThemeDialog.vue deleted file mode 100644 index f704bada500d..000000000000 --- a/frontend/src/pages/Admin/Theme/NewThemeDialog.vue +++ /dev/null @@ -1,89 +0,0 @@ - - - - - diff --git a/frontend/src/pages/Admin/Theme/ThemeCard.vue b/frontend/src/pages/Admin/Theme/ThemeCard.vue deleted file mode 100644 index e0d67e2855f0..000000000000 --- a/frontend/src/pages/Admin/Theme/ThemeCard.vue +++ /dev/null @@ -1,88 +0,0 @@ - - - - - diff --git a/frontend/src/pages/Admin/Theme/index.vue b/frontend/src/pages/Admin/Theme/index.vue deleted file mode 100644 index 4c30adf7df22..000000000000 --- a/frontend/src/pages/Admin/Theme/index.vue +++ /dev/null @@ -1,155 +0,0 @@ - - - - - diff --git a/frontend/src/pages/HomePage.vue b/frontend/src/pages/HomePage.vue index abc1f7d52d71..f8d0b5cd1f15 100644 --- a/frontend/src/pages/HomePage.vue +++ b/frontend/src/pages/HomePage.vue @@ -1,6 +1,7 @@