mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-12-30 13:50:42 -05:00
improve backend performance with caching
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from logging import getLogger
|
||||
from random import randint
|
||||
from typing import Callable
|
||||
|
||||
from mealie.db.db_base import BaseDocument
|
||||
from mealie.db.models.event import Event, EventNotification
|
||||
@@ -20,11 +21,15 @@ from mealie.schema.admin import SiteTheme
|
||||
from mealie.schema.events import Event as EventSchema
|
||||
from mealie.schema.events import EventNotificationIn
|
||||
from mealie.schema.meal_plan import MealPlanOut, ShoppingListOut
|
||||
from mealie.schema.recipe import (CommentOut, Recipe, RecipeCategoryResponse,
|
||||
RecipeIngredientFood, RecipeIngredientUnit,
|
||||
RecipeTagResponse)
|
||||
from mealie.schema.user import (GroupInDB, LongLiveTokenInDB, SignUpOut,
|
||||
UserInDB)
|
||||
from mealie.schema.recipe import (
|
||||
CommentOut,
|
||||
Recipe,
|
||||
RecipeCategoryResponse,
|
||||
RecipeIngredientFood,
|
||||
RecipeIngredientUnit,
|
||||
RecipeTagResponse,
|
||||
)
|
||||
from mealie.schema.user import GroupInDB, LongLiveTokenInDB, SignUpOut, UserInDB
|
||||
from sqlalchemy.orm.session import Session
|
||||
|
||||
logger = getLogger()
|
||||
@@ -36,9 +41,9 @@ class _Recipes(BaseDocument):
|
||||
self.sql_model: RecipeModel = RecipeModel
|
||||
self.schema: Recipe = Recipe
|
||||
|
||||
def get_all_not_private(
|
||||
self, session: Session, limit: int = None, order_by: str = None, start=0, override_schema=None
|
||||
):
|
||||
self.observers = []
|
||||
|
||||
def get_all_public(self, session: Session, limit: int = None, order_by: str = None, start=0, override_schema=None):
|
||||
eff_schema = override_schema or self.schema
|
||||
|
||||
if order_by:
|
||||
@@ -86,6 +91,15 @@ class _Recipes(BaseDocument):
|
||||
session, attribute_name=RecipeModel.tags, attr_match=None, count=count, override_schema=override_schema
|
||||
)
|
||||
|
||||
def subscribe(self, func: Callable) -> None:
|
||||
print("Subscripe", func)
|
||||
self.observers.append(func)
|
||||
|
||||
def update_observers(self) -> None:
|
||||
print("Updating Observers", self.observers)
|
||||
for observer in self.observers:
|
||||
observer()
|
||||
|
||||
|
||||
class _IngredientFoods(BaseDocument):
|
||||
def __init__(self) -> None:
|
||||
|
||||
@@ -16,20 +16,24 @@ class BaseDocument:
|
||||
self.store: str
|
||||
self.sql_model: SqlAlchemyBase
|
||||
self.schema: BaseModel
|
||||
self.observers: list = None
|
||||
|
||||
def get_all(
|
||||
self, session: Session, limit: int = None, order_by: str = None, start=0, end=9999, override_schema=None
|
||||
) -> list[dict]:
|
||||
logger.info("Starting Query")
|
||||
eff_schema = override_schema or self.schema
|
||||
|
||||
if order_by:
|
||||
order_attr = getattr(self.sql_model, str(order_by))
|
||||
logger.info("Ending Query")
|
||||
|
||||
return [
|
||||
eff_schema.from_orm(x)
|
||||
for x in session.query(self.sql_model).order_by(order_attr.desc()).offset(start).limit(limit).all()
|
||||
]
|
||||
|
||||
logger.info("Ending Query")
|
||||
return [eff_schema.from_orm(x) for x in session.query(self.sql_model).offset(start).limit(limit).all()]
|
||||
|
||||
def get_all_limit_columns(self, session: Session, fields: list[str], limit: int = None) -> list[SqlAlchemyBase]:
|
||||
@@ -129,6 +133,9 @@ class BaseDocument:
|
||||
session.add(new_document)
|
||||
session.commit()
|
||||
|
||||
if hasattr(self, "update_observers"):
|
||||
self.update_observers()
|
||||
|
||||
return self.schema.from_orm(new_document)
|
||||
|
||||
def update(self, session: Session, match_value: str, new_data: dict) -> BaseModel:
|
||||
@@ -146,6 +153,9 @@ class BaseDocument:
|
||||
entry = self._query_one(session=session, match_value=match_value)
|
||||
entry.update(session=session, **new_data)
|
||||
|
||||
if hasattr(self, "update_observers"):
|
||||
self.update_observers()
|
||||
|
||||
session.commit()
|
||||
return self.schema.from_orm(entry)
|
||||
|
||||
@@ -169,12 +179,18 @@ class BaseDocument:
|
||||
session.delete(result)
|
||||
session.commit()
|
||||
|
||||
if hasattr(self, "update_observers"):
|
||||
self.update_observers()
|
||||
|
||||
return results_as_model
|
||||
|
||||
def delete_all(self, session: Session) -> None:
|
||||
session.query(self.sql_model).delete()
|
||||
session.commit()
|
||||
|
||||
if hasattr(self, "update_observers"):
|
||||
self.update_observers()
|
||||
|
||||
def count_all(self, session: Session, match_key=None, match_value=None) -> int:
|
||||
if None in [match_key, match_value]:
|
||||
return session.query(self.sql_model).count()
|
||||
|
||||
Reference in New Issue
Block a user