mirror of
https://github.com/hay-kot/mealie.git
synced 2025-08-22 14:33:33 -07:00
fix: refactore code to be simpler
This commit is contained in:
parent
71c6d49127
commit
a4cb5a0598
3 changed files with 18 additions and 25 deletions
|
@ -83,11 +83,11 @@ class RepositoryGeneric[Schema: MealieModel, Model: SqlAlchemyBase]:
|
|||
else:
|
||||
return q
|
||||
|
||||
def _filter_builder(self, skip_household: bool = False, **kwargs) -> dict[str, Any]:
|
||||
def _filter_builder(self, **kwargs) -> dict[str, Any]:
|
||||
dct = {}
|
||||
if self.group_id:
|
||||
dct["group_id"] = self.group_id
|
||||
if self.household_id and not skip_household:
|
||||
if self.household_id:
|
||||
dct["household_id"] = self.household_id
|
||||
|
||||
return {**dct, **kwargs}
|
||||
|
@ -133,9 +133,7 @@ class RepositoryGeneric[Schema: MealieModel, Model: SqlAlchemyBase]:
|
|||
result = self.session.execute(q).unique().scalars().all()
|
||||
return [eff_schema.model_validate(x) for x in result]
|
||||
|
||||
def _query_one(
|
||||
self, match_value: str | int | UUID4, match_key: str | None = None, skip_household: bool = False
|
||||
) -> Model:
|
||||
def _query_one(self, match_value: str | int | UUID4, match_key: str | None = None) -> Model:
|
||||
"""
|
||||
Query the sql database for one item an return the sql alchemy model
|
||||
object. If no match key is provided the primary_key attribute will be used.
|
||||
|
@ -143,7 +141,7 @@ class RepositoryGeneric[Schema: MealieModel, Model: SqlAlchemyBase]:
|
|||
if match_key is None:
|
||||
match_key = self.primary_key
|
||||
|
||||
fltr = self._filter_builder(**{match_key: match_value}, skip_household=skip_household)
|
||||
fltr = self._filter_builder(**{match_key: match_value})
|
||||
return self.session.execute(self._query().filter_by(**fltr)).unique().scalars().one()
|
||||
|
||||
def get_one(
|
||||
|
@ -152,7 +150,6 @@ class RepositoryGeneric[Schema: MealieModel, Model: SqlAlchemyBase]:
|
|||
key: str | None = None,
|
||||
any_case=False,
|
||||
override_schema=None,
|
||||
skip_household: str = False,
|
||||
) -> Schema | None:
|
||||
key = key or self.primary_key
|
||||
eff_schema = override_schema or self.schema
|
||||
|
@ -161,11 +158,9 @@ class RepositoryGeneric[Schema: MealieModel, Model: SqlAlchemyBase]:
|
|||
|
||||
if any_case:
|
||||
search_attr = getattr(self.model, key)
|
||||
q = q.where(func.lower(search_attr) == str(value).lower()).filter_by(
|
||||
**self._filter_builder(skip_household=skip_household)
|
||||
)
|
||||
q = q.where(func.lower(search_attr) == str(value).lower()).filter_by(**self._filter_builder())
|
||||
else:
|
||||
q = q.filter_by(**self._filter_builder(**{key: value}, skip_household=skip_household))
|
||||
q = q.filter_by(**self._filter_builder(**{key: value}))
|
||||
|
||||
result = self.session.execute(q).unique().scalars().one_or_none()
|
||||
|
||||
|
@ -203,9 +198,7 @@ class RepositoryGeneric[Schema: MealieModel, Model: SqlAlchemyBase]:
|
|||
|
||||
return [self.schema.model_validate(x) for x in new_documents]
|
||||
|
||||
def update(
|
||||
self, match_value: str | int | UUID4, new_data: dict | BaseModel, skip_household: bool = False
|
||||
) -> Schema:
|
||||
def update(self, match_value: str | int | UUID4, new_data: dict | BaseModel) -> Schema:
|
||||
"""Update a database entry.
|
||||
Args:
|
||||
session (Session): Database Session
|
||||
|
@ -217,7 +210,7 @@ class RepositoryGeneric[Schema: MealieModel, Model: SqlAlchemyBase]:
|
|||
"""
|
||||
new_data = new_data if isinstance(new_data, dict) else new_data.model_dump()
|
||||
|
||||
entry = self._query_one(match_value=match_value, skip_household=skip_household)
|
||||
entry = self._query_one(match_value=match_value)
|
||||
entry.update(session=self.session, **new_data)
|
||||
|
||||
self.session.commit()
|
||||
|
|
|
@ -73,8 +73,8 @@ class HttpRepo[C: BaseModel, R: BaseModel, U: BaseModel]:
|
|||
|
||||
return item
|
||||
|
||||
def get_one(self, item_id: int | str | UUID4, key: str | None = None, skip_household: bool = False) -> R:
|
||||
item = self.repo.get_one(item_id, key, skip_household=skip_household)
|
||||
def get_one(self, item_id: int | str | UUID4, key: str | None = None) -> R:
|
||||
item = self.repo.get_one(item_id, key)
|
||||
|
||||
if not item:
|
||||
raise HTTPException(
|
||||
|
@ -84,8 +84,8 @@ class HttpRepo[C: BaseModel, R: BaseModel, U: BaseModel]:
|
|||
|
||||
return item
|
||||
|
||||
def update_one(self, data: U, item_id: int | str | UUID4, skip_household: bool = False) -> R:
|
||||
item = self.repo.get_one(item_id, skip_household=skip_household)
|
||||
def update_one(self, data: U, item_id: int | str | UUID4) -> R:
|
||||
item = self.repo.get_one(item_id)
|
||||
|
||||
if not item:
|
||||
raise HTTPException(
|
||||
|
@ -94,7 +94,7 @@ class HttpRepo[C: BaseModel, R: BaseModel, U: BaseModel]:
|
|||
)
|
||||
|
||||
try:
|
||||
item = self.repo.update(item_id, data, skip_household=skip_household) # type: ignore
|
||||
item = self.repo.update(item_id, data) # type: ignore
|
||||
except Exception as ex:
|
||||
self.handle_exception(ex)
|
||||
|
||||
|
|
|
@ -523,7 +523,8 @@ class RecipeController(BaseRecipeController):
|
|||
|
||||
@router.put("/{slug}/image", response_model=UpdateImageResponse, tags=["Recipe: Images and Assets"])
|
||||
def update_recipe_image(self, slug: str, image: bytes = File(...), extension: str = Form(...)):
|
||||
recipe = self.mixins.get_one(slug, skip_household=True)
|
||||
self.repos.household_id = None
|
||||
recipe = self.mixins.get_one(slug)
|
||||
data_service = RecipeDataService(recipe.id)
|
||||
data_service.write_image(image, extension)
|
||||
|
||||
|
@ -540,7 +541,7 @@ class RecipeController(BaseRecipeController):
|
|||
file: UploadFile = File(...),
|
||||
):
|
||||
"""Upload a file to store as a recipe asset"""
|
||||
skip_household = True
|
||||
self.repos.household_id = None
|
||||
if "." in extension:
|
||||
extension = extension.split(".")[-1]
|
||||
|
||||
|
@ -551,7 +552,7 @@ class RecipeController(BaseRecipeController):
|
|||
file_name = f"{file_slug}.{extension}"
|
||||
asset_in = RecipeAsset(name=name, icon=icon, file_name=file_name)
|
||||
|
||||
recipe = self.mixins.get_one(slug, skip_household=skip_household)
|
||||
recipe = self.mixins.get_one(slug)
|
||||
|
||||
dest = recipe.asset_dir / file_name
|
||||
|
||||
|
@ -568,9 +569,8 @@ class RecipeController(BaseRecipeController):
|
|||
if not dest.is_file():
|
||||
raise HTTPException(status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
|
||||
recipe = self.mixins.get_one(slug, skip_household=skip_household)
|
||||
recipe.assets.append(asset_in)
|
||||
|
||||
self.mixins.update_one(recipe, slug, skip_household=skip_household)
|
||||
self.mixins.update_one(recipe, slug)
|
||||
|
||||
return asset_in
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue