refactor(backend): ♻️ cleanup HTTP service classes and remove database singleton (#687)

* refactor(backend): ♻️ cleanup duplicate code in http services

* refactor(backend): ♻️ 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): ♻️ cleanup unused and duplicate code in http services

* refactor(backend): remove sessions from arguments

* refactor(backend): ♻️ convert units and ingredients to use http service class

* test(backend):  add unit and food tests

* lint

* update tags

* re-enable cache

* fix missing fraction in db

* fix lint

Co-authored-by: hay-kot <hay-kot@pm.me>
This commit is contained in:
Hayden
2021-09-19 15:31:34 -08:00
committed by GitHub
parent c0e3f04c23
commit 476aefeeb0
68 changed files with 1131 additions and 1084 deletions

View File

@@ -1,10 +1,9 @@
from sqlalchemy.orm import Session
from mealie.core import root_logger
from mealie.core.config import settings
from mealie.core.security import hash_password
from mealie.db.data_access_layer.access_model_factory import Database
from mealie.db.data_initialization.init_units_foods import default_recipe_unit_init
from mealie.db.database import db
from mealie.db.database import get_database
from mealie.db.db_setup import create_session, engine
from mealie.db.models._model_base import SqlAlchemyBase
from mealie.schema.admin import SiteSettings
@@ -21,30 +20,24 @@ def create_all_models():
SqlAlchemyBase.metadata.create_all(engine)
def init_db(session: Session = None) -> None:
create_all_models()
if not session:
session = create_session()
with session:
default_group_init(session)
default_settings_init(session)
default_user_init(session)
default_recipe_unit_init(db, session)
def init_db(db: Database) -> None:
default_group_init(db)
default_settings_init(db)
default_user_init(db)
default_recipe_unit_init(db)
def default_settings_init(session: Session):
document = db.settings.create(session, SiteSettings().dict())
def default_settings_init(db: Database):
document = db.settings.create(SiteSettings().dict())
logger.info(f"Created Site Settings: \n {document}")
def default_group_init(session: Session):
def default_group_init(db: Database):
logger.info("Generating Default Group")
create_new_group(session, GroupBase(name=settings.DEFAULT_GROUP))
create_new_group(db, GroupBase(name=settings.DEFAULT_GROUP))
def default_user_init(session: Session):
def default_user_init(db: Database):
default_user = {
"full_name": "Change Me",
"username": "admin",
@@ -55,21 +48,26 @@ def default_user_init(session: Session):
}
logger.info("Generating Default User")
db.users.create(session, default_user)
db.users.create(default_user)
def main():
create_all_models()
session = create_session()
db = get_database(session)
try:
session = create_session()
init_user = db.users.get(session, "1", "id")
init_user = db.users.get("1", "id")
except Exception:
init_db()
init_db(db)
return
if init_user:
logger.info("Database Exists")
else:
logger.info("Database Doesn't Exists, Initializing...")
init_db()
init_db(db)
create_general_event("Initialize Database", "Initialize database with default values", session)