From 476aefeeb038d8c45f77e193f710dede40e45bb6 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Sun, 19 Sep 2021 15:31:34 -0800 Subject: [PATCH] =?UTF-8?q?refactor(backend):=20=E2=99=BB=EF=B8=8F=20clean?= =?UTF-8?q?up=20HTTP=20service=20classes=20and=20remove=20database=20singl?= =?UTF-8?q?eton=20(#687)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor(backend): :recycle: cleanup duplicate code in http services * refactor(backend): :recycle: refactor database away from singleton design removed the database single and instead injected the session into a new Database class that is created during each request life-cycle. Now sessions no longer need to be passed into each method on the database All tests pass, but there are likely some hidden breaking changes that were not discovered. * fix venv * disable venv cache * fix install script * bump poetry version * postgres fixes * revert install * fix db initialization for postgres * add postgres to docker * refactor(backend): :recycle: cleanup unused and duplicate code in http services * refactor(backend): remove sessions from arguments * refactor(backend): :recycle: convert units and ingredients to use http service class * test(backend): :white_check_mark: add unit and food tests * lint * update tags * re-enable cache * fix missing fraction in db * fix lint Co-authored-by: hay-kot --- .github/workflows/backend-tests.yml | 4 +- docker-compose.yml | 21 +- frontend/pages/meal-plan/planner.vue | 2 +- mealie/app.py | 2 - mealie/core/dependencies/dependencies.py | 9 +- mealie/core/security.py | 8 +- mealie/db/data_access_layer/__init__.py | 2 +- ..._base_access_model.py => _access_model.py} | 101 ++- .../data_access_layer/access_model_factory.py | 145 +++++ mealie/db/data_access_layer/db_access.py | 98 --- .../data_access_layer/group_access_model.py | 4 +- .../db/data_access_layer/meal_access_model.py | 14 +- .../data_access_layer/recipe_access_model.py | 28 +- .../db/data_access_layer/user_access_model.py | 6 +- .../data_initialization/init_units_foods.py | 10 +- mealie/db/database.py | 11 +- mealie/db/db_setup.py | 2 +- mealie/db/init_db.py | 46 +- mealie/db/models/recipe/ingredient.py | 3 +- mealie/routes/about/events.py | 10 +- mealie/routes/about/notifications.py | 15 +- mealie/routes/admin/admin_about.py | 12 +- mealie/routes/admin/admin_group.py | 16 +- mealie/routes/categories/categories.py | 20 +- mealie/routes/groups/invitations.py | 6 +- mealie/routes/mealplans/__init__.py | 10 - mealie/routes/mealplans/crud.py | 126 ---- mealie/routes/mealplans/helpers.py | 50 -- mealie/routes/mealplans/mealplans.py | 8 - mealie/routes/recipe/all_recipe_routes.py | 8 +- mealie/routes/recipe/comments.py | 15 +- mealie/routes/recipe/image_and_assets.py | 11 +- mealie/routes/recipe/recipe_crud_routes.py | 12 +- mealie/routes/shopping_lists/__init__.py | 15 +- mealie/routes/site_settings/site_settings.py | 11 +- mealie/routes/tags/tags.py | 24 +- mealie/routes/unit_and_foods/__init__.py | 8 +- mealie/routes/unit_and_foods/food_routes.py | 44 -- mealie/routes/unit_and_foods/unit_routes.py | 44 -- mealie/routes/users/api_tokens.py | 11 +- mealie/routes/users/crud.py | 18 +- mealie/routes/users/favorites.py | 12 +- mealie/routes/users/passwords.py | 6 +- .../_base_http_service/base_http_service.py | 7 +- .../_base_http_service/crud_http_mixins.py | 47 +- mealie/services/backups/exports.py | 16 +- mealie/services/backups/imports.py | 23 +- mealie/services/events.py | 8 +- .../group_services/cookbook_service.py | 20 +- .../services/group_services/group_service.py | 24 +- mealie/services/group_services/group_utils.py | 9 +- .../services/group_services/meal_service.py | 17 +- .../group_services/webhook_service.py | 16 +- mealie/services/meal_services.py | 50 -- mealie/services/migrations/_migration_base.py | 10 +- mealie/services/recipe/recipe_food_service.py | 37 ++ mealie/services/recipe/recipe_service.py | 66 +- mealie/services/recipe/recipe_unit_service.py | 37 ++ mealie/services/scheduler/scheduled_jobs.py | 8 +- .../user_services/registration_service.py | 12 +- mealie/services/user_services/user_service.py | 4 +- mealie/utils/post_webhooks.py | 9 +- poetry.lock | 593 ++++++++++-------- pyproject.toml | 2 +- .../user_group_tests/test_group_webhooks.py | 7 +- .../user_recipe_tests/test_recipe_foods.py | 77 +++ .../user_recipe_tests/test_recipe_units.py | 84 +++ tests/utils/factories.py | 4 + 68 files changed, 1131 insertions(+), 1084 deletions(-) rename mealie/db/data_access_layer/{_base_access_model.py => _access_model.py} (59%) create mode 100644 mealie/db/data_access_layer/access_model_factory.py delete mode 100644 mealie/db/data_access_layer/db_access.py delete mode 100644 mealie/routes/mealplans/__init__.py delete mode 100644 mealie/routes/mealplans/crud.py delete mode 100644 mealie/routes/mealplans/helpers.py delete mode 100644 mealie/routes/mealplans/mealplans.py delete mode 100644 mealie/routes/unit_and_foods/food_routes.py delete mode 100644 mealie/routes/unit_and_foods/unit_routes.py delete mode 100644 mealie/services/meal_services.py create mode 100644 mealie/services/recipe/recipe_food_service.py create mode 100644 mealie/services/recipe/recipe_unit_service.py create mode 100644 tests/integration_tests/user_recipe_tests/test_recipe_foods.py create mode 100644 tests/integration_tests/user_recipe_tests/test_recipe_units.py diff --git a/.github/workflows/backend-tests.yml b/.github/workflows/backend-tests.yml index 1d1d2b8adc3f..776cd00f8b9e 100644 --- a/.github/workflows/backend-tests.yml +++ b/.github/workflows/backend-tests.yml @@ -37,7 +37,7 @@ jobs: # ----- install & configure poetry ----- #---------------------------------------------- - name: Install Poetry - uses: snok/install-poetry@v1.1.1 + uses: snok/install-poetry@v1 with: virtualenvs-create: true virtualenvs-in-project: true @@ -57,7 +57,7 @@ jobs: run: | poetry install poetry add "psycopg2-binary==2.8.6" - if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' + # if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' #---------------------------------------------- # run test suite #---------------------------------------------- diff --git a/docker-compose.yml b/docker-compose.yml index 73f653c196ce..0034a965b9e6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,12 +24,19 @@ services: ports: - 9092:80 environment: - # DB_ENGINE: postgres # Optional: 'sqlite', 'postgres' - # POSTGRES_USER: mealie - # POSTGRES_PASSWORD: mealie - # POSTGRES_SERVER: postgres - # POSTGRES_PORT: 5432 - # POSTGRES_DB: mealie - # WORKERS_PER_CORE: 0.5 + DB_ENGINE: postgres # Optional: 'sqlite', 'postgres' + POSTGRES_USER: mealie + POSTGRES_PASSWORD: mealie + POSTGRES_SERVER: postgres + POSTGRES_PORT: 5432 + POSTGRES_DB: mealie + WORKERS_PER_CORE: 0.5 MAX_WORKERS: 1 WEB_CONCURRENCY: 1 + postgres: + container_name: postgres + image: postgres + restart: always + environment: + POSTGRES_PASSWORD: mealie + POSTGRES_USER: mealie diff --git a/frontend/pages/meal-plan/planner.vue b/frontend/pages/meal-plan/planner.vue index 01c5112cf78d..13d5da9d6d4c 100644 --- a/frontend/pages/meal-plan/planner.vue +++ b/frontend/pages/meal-plan/planner.vue @@ -94,7 +94,7 @@