From fcc5d99d400dd5128741d2c1e956e7ef6742494b Mon Sep 17 00:00:00 2001
From: Hayden <64056131+hay-kot@users.noreply.github.com>
Date: Sat, 22 Oct 2022 11:51:07 -0800
Subject: [PATCH] chore: frontend testing setup (#1739)
* add vitest
* initialize lib w/ tests
* move to dev dep
* run tests in CI
* update file names
* move api folder to lib
* move api and api types to same folder
* update generator outpath
* rm husky
* i guess i _did_ need those types
* reorg types
* extract validators into testable components
* (WIP) start composable testing
* fix import type
* fix linter complaint
* simplify icon type def
* fix linter errors (maybe?)
* rename client file for sorting
---
.github/workflows/partial-frontend.yml | 4 +
.gitignore | 1 -
dev/code-generation/gen_ts_types.py | 2 +-
frontend/.husky/.gitignore | 1 -
.../Domain/Group/GroupExportData.vue | 2 +-
.../Domain/Group/GroupMealPlanRuleForm.vue | 2 +-
.../Domain/Group/GroupWebhookEditor.vue | 2 +-
.../Domain/Recipe/RecipeActionMenu.vue | 2 +-
.../components/Domain/Recipe/RecipeAssets.vue | 2 +-
.../Domain/Recipe/RecipeCardSection.vue | 10 +-
.../components/Domain/Recipe/RecipeChips.vue | 2 +-
.../Domain/Recipe/RecipeComments.vue | 2 +-
.../Domain/Recipe/RecipeContextMenu.vue | 4 +-
.../Domain/Recipe/RecipeDataTable.vue | 4 +-
.../Domain/Recipe/RecipeDialogSearch.vue | 2 +-
.../Domain/Recipe/RecipeDialogShare.vue | 2 +-
.../Domain/Recipe/RecipeFavoriteBadge.vue | 2 +-
.../Domain/Recipe/RecipeIngredientEditor.vue | 2 +-
.../Domain/Recipe/RecipeIngredients.vue | 2 +-
.../Domain/Recipe/RecipeInstructions.vue | 2 +-
.../components/Domain/Recipe/RecipeList.vue | 4 +-
.../components/Domain/Recipe/RecipeNotes.vue | 2 +-
.../Domain/Recipe/RecipeNutrition.vue | 2 +-
.../RecipeOcrEditorPage.vue | 6 +-
.../RecipeOcrEditorPageCanvas.vue | 4 +-
.../Domain/Recipe/RecipeOrganizerDialog.vue | 2 +-
.../Domain/Recipe/RecipeOrganizerPage.vue | 2 +-
.../Domain/Recipe/RecipeOrganizerSelector.vue | 6 +-
.../Domain/Recipe/RecipePage/RecipePage.vue | 4 +-
.../RecipePageParts/RecipePageComments.vue | 4 +-
.../RecipePageEditorToolbar.vue | 4 +-
.../RecipePageParts/RecipePageFooter.vue | 4 +-
.../RecipePageParts/RecipePageHeader.vue | 4 +-
.../RecipePageIngredientEditor.vue | 4 +-
.../RecipePageIngredientToolsView.vue | 4 +-
.../RecipePageInstructions.vue | 4 +-
.../RecipePageParts/RecipePageOrganizers.vue | 4 +-
.../RecipePageParts/RecipePageScale.vue | 4 +-
.../RecipePageTitleContent.vue | 4 +-
.../Domain/Recipe/RecipePrintView.vue | 9 +-
.../Domain/Recipe/RecipeSettingsSwitches.vue | 2 +-
.../components/Domain/Recipe/RecipeTools.vue | 2 +-
.../Domain/ShoppingList/MultiPurposeLabel.vue | 2 +-
.../Domain/ShoppingList/ShoppingListItem.vue | 6 +-
.../ShoppingList/ShoppingListItemEditor.vue | 6 +-
.../components/Domain/User/UserAvatar.vue | 4 +-
frontend/components/global/InputLabelType.vue | 6 +-
.../components/global/RecipeJsonEditor.vue | 1 -
frontend/components/global/ReportTable.vue | 2 +-
frontend/composables/api/api-client.ts | 9 +-
frontend/composables/api/use-app-info.ts | 2 +-
.../partials/use-actions-factory.ts | 2 +-
.../composables/recipe-page/shared-state.ts | 2 +-
.../recipes/use-recipe-ingredients.ts | 2 +-
.../composables/recipes/use-recipe-meta.ts | 4 +-
.../composables/recipes/use-recipe-search.ts | 2 +-
.../composables/recipes/use-recipe-tools.ts | 2 +-
frontend/composables/recipes/use-recipe.ts | 2 +-
frontend/composables/recipes/use-recipes.ts | 13 +-
.../composables/store/use-category-store.ts | 2 +-
frontend/composables/store/use-food-store.ts | 2 +-
frontend/composables/store/use-label-store.ts | 2 +-
frontend/composables/store/use-tag-store.ts | 2 +-
frontend/composables/store/use-tool-store.ts | 2 +-
frontend/composables/store/use-unit-store.ts | 2 +-
frontend/composables/use-backups.ts | 2 +-
frontend/composables/use-display-text.ts | 2 +-
frontend/composables/use-group-cookbooks.ts | 2 +-
frontend/composables/use-group-mealplan.ts | 2 +-
frontend/composables/use-group-webhooks.ts | 2 +-
frontend/composables/use-groups.ts | 2 +-
frontend/composables/use-passwords.test.ts | 32 ++
frontend/composables/use-passwords.ts | 41 +--
frontend/composables/use-user.ts | 2 +-
frontend/composables/use-validators.ts | 22 +-
frontend/{ => lib}/api/admin/admin-about.ts | 4 +-
.../{ => lib}/api/admin/admin-analytics.ts | 4 +-
frontend/{ => lib}/api/admin/admin-backups.ts | 6 +-
frontend/{ => lib}/api/admin/admin-groups.ts | 6 +-
.../{ => lib}/api/admin/admin-maintenance.ts | 6 +-
frontend/{ => lib}/api/admin/admin-tasks.ts | 4 +-
frontend/{ => lib}/api/admin/admin-users.ts | 4 +-
.../_base.ts => lib/api/base/base-clients.ts} | 7 +-
frontend/lib/api/base/index.ts | 1 +
frontend/lib/api/base/route.ts | 38 +++
frontend/lib/api/base/routes.test.ts | 24 ++
.../admin-api.ts => lib/api/client-admin.ts} | 2 +-
.../api/client-public.ts} | 2 +-
.../{api/index.ts => lib/api/client-user.ts} | 59 ++--
frontend/{ => lib}/api/config.ts | 0
frontend/lib/api/index.ts | 3 +
frontend/{ => lib}/api/public/explore.ts | 4 +-
frontend/{ => lib}/api/public/shared.ts | 4 +-
frontend/{ => lib}/api/public/validators.ts | 4 +-
.../api-types => lib/api/types}/admin.ts | 0
.../api-types => lib/api/types}/analytics.ts | 0
.../api-types => lib/api/types}/cookbook.ts | 0
.../api-types => lib/api/types}/events.ts | 0
.../api-types => lib/api/types}/group.ts | 0
.../api-types => lib/api/types}/labels.ts | 0
.../api-types => lib/api/types}/meal-plan.ts | 0
.../api.ts => lib/api/types/non-generated.ts} | 8 +
.../{types/api-types => lib/api/types}/ocr.ts | 0
.../api-types => lib/api/types}/recipe.ts | 0
.../api-types => lib/api/types}/reports.ts | 0
.../api-types => lib/api/types}/response.ts | 0
.../api-types => lib/api/types}/server.ts | 0
.../api-types => lib/api/types}/static.ts | 0
.../api-types => lib/api/types}/user.ts | 0
.../api/user}/backups.ts | 6 +-
.../api/user}/email.ts | 8 +-
.../api/user}/group-cookbooks.ts | 4 +-
.../api/user}/group-event-notifier.ts | 10 +-
.../api/user}/group-mealplan-rules.ts | 4 +-
.../api/user}/group-mealplan.ts | 4 +-
.../api/user}/group-migrations.ts | 6 +-
.../user}/group-multiple-purpose-labels.ts | 10 +-
.../api/user}/group-reports.ts | 4 +-
.../api/user}/group-seeder.ts | 6 +-
.../api/user}/group-shopping-lists.ts | 12 +-
.../api/user}/group-tasks.ts | 4 +-
.../api/user}/group-webhooks.ts | 4 +-
.../api/user}/groups.ts | 15 +-
.../class-interfaces => lib/api/user}/ocr.ts | 4 +-
.../api/user}/organizer-categories.ts | 6 +-
.../api/user}/organizer-tags.ts | 6 +-
.../api/user}/organizer-tools.ts | 7 +-
.../api/user}/recipe-bulk-actions.ts | 6 +-
.../api/user}/recipe-foods.ts | 4 +-
.../api/user}/recipe-units.ts | 4 +-
.../api/user}/recipes/index.ts | 0
.../api/user}/recipes/recipe-comments.ts | 4 +-
.../api/user}/recipes/recipe-share.ts | 4 +-
.../api/user}/recipes/recipe.ts | 6 +-
.../api/user}/upload.ts | 2 +-
.../api/user}/user-registration.ts | 4 +-
.../api/user}/users.ts | 4 +-
.../api/user}/utils.ts | 4 +-
frontend/lib/icons/icon-type.ts | 3 +
frontend/{utils => lib}/icons/icons.ts | 0
frontend/{utils => lib}/icons/index.ts | 0
frontend/lib/validators/index.ts | 2 +
frontend/lib/validators/inputs.test.ts | 70 +++++
frontend/lib/validators/inputs.ts | 28 ++
frontend/lib/validators/password.test.ts | 30 ++
frontend/lib/validators/password.ts | 45 +++
frontend/package.json | 5 +-
frontend/pages/admin/analytics.vue | 2 +-
frontend/pages/admin/background-tasks.vue | 2 +-
frontend/pages/admin/backups.vue | 2 +-
frontend/pages/admin/maintenance/index.vue | 2 +-
frontend/pages/admin/manage/groups/_id.vue | 2 +-
frontend/pages/admin/manage/groups/index.vue | 2 +-
frontend/pages/admin/manage/users/_id.vue | 2 +-
frontend/pages/admin/manage/users/index.vue | 2 +-
frontend/pages/admin/parser.vue | 15 +-
frontend/pages/admin/site-settings.vue | 4 +-
frontend/pages/group/data/foods.vue | 2 +-
frontend/pages/group/data/labels.vue | 2 +-
frontend/pages/group/data/recipes.vue | 4 +-
frontend/pages/group/data/units.vue | 2 +-
frontend/pages/group/mealplan/planner.vue | 2 +-
frontend/pages/group/mealplan/settings.vue | 2 +-
frontend/pages/group/members.vue | 2 +-
frontend/pages/group/migrations.vue | 7 +-
frontend/pages/group/notifiers.vue | 2 +-
frontend/pages/group/reports/_id.vue | 2 +-
.../pages/recipe/_slug/ingredient-parser.vue | 6 +-
frontend/pages/recipe/_slug/old.vue | 2 +-
frontend/pages/recipe/create/bulk.vue | 2 +-
frontend/pages/recipe/create/debug.vue | 2 +-
frontend/pages/register/register.vue | 2 +-
frontend/pages/search.vue | 4 +-
frontend/pages/shopping-lists/_id.vue | 2 +-
frontend/pages/user/profile/edit.vue | 2 +-
frontend/plugins/globals.ts | 4 +-
frontend/tsconfig.json | 7 +-
frontend/types/ocr-types.ts | 4 +-
frontend/types/recipe/organizers.ts | 7 -
frontend/utils/icons/icon-type.ts | 135 ---------
frontend/vitest.config.js | 14 +
frontend/yarn.lock | 274 ++++++++++++++++++
182 files changed, 902 insertions(+), 487 deletions(-)
delete mode 100644 frontend/.husky/.gitignore
create mode 100644 frontend/composables/use-passwords.test.ts
rename frontend/{ => lib}/api/admin/admin-about.ts (92%)
rename frontend/{ => lib}/api/admin/admin-analytics.ts (67%)
rename frontend/{ => lib}/api/admin/admin-backups.ts (87%)
rename frontend/{ => lib}/api/admin/admin-groups.ts (76%)
rename frontend/{ => lib}/api/admin/admin-maintenance.ts (89%)
rename frontend/{ => lib}/api/admin/admin-tasks.ts (75%)
rename frontend/{ => lib}/api/admin/admin-users.ts (81%)
rename frontend/{api/_base.ts => lib/api/base/base-clients.ts} (90%)
create mode 100644 frontend/lib/api/base/index.ts
create mode 100644 frontend/lib/api/base/route.ts
create mode 100644 frontend/lib/api/base/routes.test.ts
rename frontend/{api/admin-api.ts => lib/api/client-admin.ts} (94%)
rename frontend/{api/public-api.ts => lib/api/client-public.ts} (87%)
rename frontend/{api/index.ts => lib/api/client-user.ts} (55%)
rename frontend/{ => lib}/api/config.ts (100%)
create mode 100644 frontend/lib/api/index.ts
rename frontend/{ => lib}/api/public/explore.ts (77%)
rename frontend/{ => lib}/api/public/shared.ts (74%)
rename frontend/{ => lib}/api/public/validators.ts (89%)
rename frontend/{types/api-types => lib/api/types}/admin.ts (100%)
rename frontend/{types/api-types => lib/api/types}/analytics.ts (100%)
rename frontend/{types/api-types => lib/api/types}/cookbook.ts (100%)
rename frontend/{types/api-types => lib/api/types}/events.ts (100%)
rename frontend/{types/api-types => lib/api/types}/group.ts (100%)
rename frontend/{types/api-types => lib/api/types}/labels.ts (100%)
rename frontend/{types/api-types => lib/api/types}/meal-plan.ts (100%)
rename frontend/{types/api.ts => lib/api/types/non-generated.ts} (83%)
rename frontend/{types/api-types => lib/api/types}/ocr.ts (100%)
rename frontend/{types/api-types => lib/api/types}/recipe.ts (100%)
rename frontend/{types/api-types => lib/api/types}/reports.ts (100%)
rename frontend/{types/api-types => lib/api/types}/response.ts (100%)
rename frontend/{types/api-types => lib/api/types}/server.ts (100%)
rename frontend/{types/api-types => lib/api/types}/static.ts (100%)
rename frontend/{types/api-types => lib/api/types}/user.ts (100%)
rename frontend/{api/class-interfaces => lib/api/user}/backups.ts (87%)
rename frontend/{api/class-interfaces => lib/api/user}/email.ts (70%)
rename frontend/{api/class-interfaces => lib/api/user}/group-cookbooks.ts (86%)
rename frontend/{api/class-interfaces => lib/api/user}/group-event-notifier.ts (65%)
rename frontend/{api/class-interfaces => lib/api/user}/group-mealplan-rules.ts (70%)
rename frontend/{api/class-interfaces => lib/api/user}/group-mealplan.ts (85%)
rename frontend/{api/class-interfaces => lib/api/user}/group-migrations.ts (78%)
rename frontend/{api/class-interfaces => lib/api/user}/group-multiple-purpose-labels.ts (53%)
rename frontend/{api/class-interfaces => lib/api/user}/group-reports.ts (81%)
rename frontend/{api/class-interfaces => lib/api/user}/group-seeder.ts (78%)
rename frontend/{api/class-interfaces => lib/api/user}/group-shopping-lists.ts (86%)
rename frontend/{api/class-interfaces => lib/api/user}/group-tasks.ts (68%)
rename frontend/{api/class-interfaces => lib/api/user}/group-webhooks.ts (71%)
rename frontend/{api/class-interfaces => lib/api/user}/groups.ts (86%)
rename frontend/{api/class-interfaces => lib/api/user}/ocr.ts (90%)
rename frontend/{api/class-interfaces => lib/api/user}/organizer-categories.ts (76%)
rename frontend/{api/class-interfaces => lib/api/user}/organizer-tags.ts (74%)
rename frontend/{api/class-interfaces => lib/api/user}/organizer-tools.ts (82%)
rename frontend/{api/class-interfaces => lib/api/user}/recipe-bulk-actions.ts (90%)
rename frontend/{api/class-interfaces => lib/api/user}/recipe-foods.ts (78%)
rename frontend/{api/class-interfaces => lib/api/user}/recipe-units.ts (78%)
rename frontend/{api/class-interfaces => lib/api/user}/recipes/index.ts (100%)
rename frontend/{api/class-interfaces => lib/api/user}/recipes/recipe-comments.ts (85%)
rename frontend/{api/class-interfaces => lib/api/user}/recipes/recipe-share.ts (70%)
rename frontend/{api/class-interfaces => lib/api/user}/recipes/recipe.ts (96%)
rename frontend/{api/class-interfaces => lib/api/user}/upload.ts (75%)
rename frontend/{api/class-interfaces => lib/api/user}/user-registration.ts (74%)
rename frontend/{api/class-interfaces => lib/api/user}/users.ts (96%)
rename frontend/{api/class-interfaces => lib/api/user}/utils.ts (78%)
create mode 100644 frontend/lib/icons/icon-type.ts
rename frontend/{utils => lib}/icons/icons.ts (100%)
rename frontend/{utils => lib}/icons/index.ts (100%)
create mode 100644 frontend/lib/validators/index.ts
create mode 100644 frontend/lib/validators/inputs.test.ts
create mode 100644 frontend/lib/validators/inputs.ts
create mode 100644 frontend/lib/validators/password.test.ts
create mode 100644 frontend/lib/validators/password.ts
delete mode 100644 frontend/utils/icons/icon-type.ts
create mode 100644 frontend/vitest.config.js
diff --git a/.github/workflows/partial-frontend.yml b/.github/workflows/partial-frontend.yml
index bdb8999a..ec16a53c 100644
--- a/.github/workflows/partial-frontend.yml
+++ b/.github/workflows/partial-frontend.yml
@@ -38,6 +38,10 @@ jobs:
run: yarn lint
working-directory: "frontend"
+ - name: Run tests 🧪
+ run: yarn test:ci
+ working-directory: "frontend"
+
build:
runs-on: ubuntu-latest
diff --git a/.gitignore b/.gitignore
index 231db452..164c8186 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,7 +55,6 @@ develop-eggs/
downloads/
eggs/
.eggs/
-lib/
lib64/
parts/
!frontend/src/components/Recipe/Parts/
diff --git a/dev/code-generation/gen_ts_types.py b/dev/code-generation/gen_ts_types.py
index d1c319e8..96391dce 100644
--- a/dev/code-generation/gen_ts_types.py
+++ b/dev/code-generation/gen_ts_types.py
@@ -75,7 +75,7 @@ def generate_typescript_types() -> None:
return str_path
schema_path = PROJECT_DIR / "mealie" / "schema"
- types_dir = PROJECT_DIR / "frontend" / "types" / "api-types"
+ types_dir = PROJECT_DIR / "frontend" / "lib" / "api" / "types"
ignore_dirs = ["__pycache__", "static", "_mealie"]
diff --git a/frontend/.husky/.gitignore b/frontend/.husky/.gitignore
deleted file mode 100644
index 31354ec1..00000000
--- a/frontend/.husky/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-_
diff --git a/frontend/components/Domain/Group/GroupExportData.vue b/frontend/components/Domain/Group/GroupExportData.vue
index b47d5935..64cf4efe 100644
--- a/frontend/components/Domain/Group/GroupExportData.vue
+++ b/frontend/components/Domain/Group/GroupExportData.vue
@@ -20,7 +20,7 @@
\ No newline at end of file
+
diff --git a/frontend/components/Domain/Recipe/RecipeNotes.vue b/frontend/components/Domain/Recipe/RecipeNotes.vue
index db29f38d..f5edcaaf 100644
--- a/frontend/components/Domain/Recipe/RecipeNotes.vue
+++ b/frontend/components/Domain/Recipe/RecipeNotes.vue
@@ -31,7 +31,7 @@
\ No newline at end of file
+
diff --git a/frontend/components/global/RecipeJsonEditor.vue b/frontend/components/global/RecipeJsonEditor.vue
index a3399dc1..99067f8e 100644
--- a/frontend/components/global/RecipeJsonEditor.vue
+++ b/frontend/components/global/RecipeJsonEditor.vue
@@ -27,4 +27,3 @@ export default defineComponent({
},
});
-
diff --git a/frontend/components/global/ReportTable.vue b/frontend/components/global/ReportTable.vue
index 22b305c8..cab54139 100644
--- a/frontend/components/global/ReportTable.vue
+++ b/frontend/components/global/ReportTable.vue
@@ -26,7 +26,7 @@
-
+
diff --git a/frontend/pages/admin/site-settings.vue b/frontend/pages/admin/site-settings.vue
index cc2b0c57..0d61adf5 100644
--- a/frontend/pages/admin/site-settings.vue
+++ b/frontend/pages/admin/site-settings.vue
@@ -179,7 +179,7 @@ import {
import { useAdminApi, useUserApi } from "~/composables/api";
import { validators } from "~/composables/use-validators";
import { useAsyncKey } from "~/composables/use-utils";
-import { CheckAppConfig } from "~/types/api-types/admin";
+import { CheckAppConfig } from "~/lib/api/types/admin";
enum DockerVolumeState {
Unknown = "unknown",
@@ -259,7 +259,7 @@ export default defineComponent({
const { data } = await adminApi.about.checkApp();
if (data) {
- appConfig.value = { ...data, isSiteSecure: false};
+ appConfig.value = { ...data, isSiteSecure: false };
}
appConfig.value.isSiteSecure = isLocalHostOrHttps();
diff --git a/frontend/pages/group/data/foods.vue b/frontend/pages/group/data/foods.vue
index 5dd8e510..f9d07800 100644
--- a/frontend/pages/group/data/foods.vue
+++ b/frontend/pages/group/data/foods.vue
@@ -159,7 +159,7 @@ import { computed } from "vue-demi";
import type { LocaleObject } from "@nuxtjs/i18n";
import { validators } from "~/composables/use-validators";
import { useUserApi } from "~/composables/api";
-import { CreateIngredientFood, IngredientFood } from "~/types/api-types/recipe";
+import { CreateIngredientFood, IngredientFood } from "~/lib/api/types/recipe";
import MultiPurposeLabel from "~/components/Domain/ShoppingList/MultiPurposeLabel.vue";
import { useLocales } from "~/composables/use-locales";
import { useFoodStore, useLabelStore } from "~/composables/store";
diff --git a/frontend/pages/group/data/labels.vue b/frontend/pages/group/data/labels.vue
index e0990682..61423a09 100644
--- a/frontend/pages/group/data/labels.vue
+++ b/frontend/pages/group/data/labels.vue
@@ -116,7 +116,7 @@ import type { LocaleObject } from "@nuxtjs/i18n";
import { validators } from "~/composables/use-validators";
import { useUserApi } from "~/composables/api";
import MultiPurposeLabel from "~/components/Domain/ShoppingList/MultiPurposeLabel.vue";
-import { MultiPurposeLabelSummary } from "~/types/api-types/labels";
+import { MultiPurposeLabelSummary } from "~/lib/api/types/labels";
import { useLocales } from "~/composables/use-locales";
import { useLabelData, useLabelStore } from "~/composables/store";
diff --git a/frontend/pages/group/data/recipes.vue b/frontend/pages/group/data/recipes.vue
index 1163422c..de05c439 100644
--- a/frontend/pages/group/data/recipes.vue
+++ b/frontend/pages/group/data/recipes.vue
@@ -162,9 +162,9 @@ import RecipeDataTable from "~/components/Domain/Recipe/RecipeDataTable.vue";
import RecipeOrganizerSelector from "~/components/Domain/Recipe/RecipeOrganizerSelector.vue";
import { useUserApi } from "~/composables/api";
import { useRecipes, allRecipes } from "~/composables/recipes";
-import { Recipe, RecipeSettings } from "~/types/api-types/recipe";
+import { Recipe, RecipeSettings } from "~/lib/api/types/recipe";
import GroupExportData from "~/components/Domain/Group/GroupExportData.vue";
-import { GroupDataExport } from "~/types/api-types/group";
+import { GroupDataExport } from "~/lib/api/types/group";
import { MenuItem } from "~/components/global/BaseOverflowButton.vue";
import RecipeSettingsSwitches from "~/components/Domain/Recipe/RecipeSettingsSwitches.vue";
diff --git a/frontend/pages/group/data/units.vue b/frontend/pages/group/data/units.vue
index 5626bd33..96a23b42 100644
--- a/frontend/pages/group/data/units.vue
+++ b/frontend/pages/group/data/units.vue
@@ -159,7 +159,7 @@ import { computed, defineComponent, onMounted, ref } from "@nuxtjs/composition-a
import type { LocaleObject } from "@nuxtjs/i18n";
import { validators } from "~/composables/use-validators";
import { useUserApi } from "~/composables/api";
-import { CreateIngredientUnit, IngredientUnit } from "~/types/api-types/recipe";
+import { CreateIngredientUnit, IngredientUnit } from "~/lib/api/types/recipe";
import { useLocales } from "~/composables/use-locales";
import { useUnitStore } from "~/composables/store";
import { VForm } from "~/types/vuetify";
diff --git a/frontend/pages/group/mealplan/planner.vue b/frontend/pages/group/mealplan/planner.vue
index 6ef697dd..67500c18 100644
--- a/frontend/pages/group/mealplan/planner.vue
+++ b/frontend/pages/group/mealplan/planner.vue
@@ -271,7 +271,7 @@ import { useRecipes, allRecipes } from "~/composables/recipes";
import RecipeCardImage from "~/components/Domain/Recipe/RecipeCardImage.vue";
import RecipeCard from "~/components/Domain/Recipe/RecipeCard.vue";
import RecipeContextMenu from "~/components/Domain/Recipe/RecipeContextMenu.vue";
-import { PlanEntryType } from "~/types/api-types/meal-plan";
+import { PlanEntryType } from "~/lib/api/types/meal-plan";
import { useUserApi } from "~/composables/api";
export default defineComponent({
diff --git a/frontend/pages/group/mealplan/settings.vue b/frontend/pages/group/mealplan/settings.vue
index 430612ed..cfa9c90f 100644
--- a/frontend/pages/group/mealplan/settings.vue
+++ b/frontend/pages/group/mealplan/settings.vue
@@ -93,7 +93,7 @@
-
+
diff --git a/frontend/pages/group/notifiers.vue b/frontend/pages/group/notifiers.vue
index 14ab22ae..f5e532b1 100644
--- a/frontend/pages/group/notifiers.vue
+++ b/frontend/pages/group/notifiers.vue
@@ -106,7 +106,7 @@
import { defineComponent, useAsync, reactive, useContext, toRefs } from "@nuxtjs/composition-api";
import { useUserApi } from "~/composables/api";
import { useAsyncKey } from "~/composables/use-utils";
-import { GroupEventNotifierCreate, GroupEventNotifierOut } from "~/types/api-types/group";
+import { GroupEventNotifierCreate, GroupEventNotifierOut } from "~/lib/api/types/group";
interface OptionKey {
text: string;
diff --git a/frontend/pages/group/reports/_id.vue b/frontend/pages/group/reports/_id.vue
index 6624791e..5724b3ac 100644
--- a/frontend/pages/group/reports/_id.vue
+++ b/frontend/pages/group/reports/_id.vue
@@ -31,7 +31,7 @@