fix: refactore code to be simpler

This commit is contained in:
mariodz95 2025-07-21 20:38:29 +02:00
commit a4cb5a0598
3 changed files with 18 additions and 25 deletions

View file

@ -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()

View file

@ -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)

View file

@ -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