mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-01-22 00:41:19 -05:00
* upgrade sqlalchemy to 2.0 * rewrite all db models to sqla 2.0 mapping api * fix some importing and typing weirdness * fix types of a lot of nullable columns * remove get_ref methods * fix issues found by tests * rewrite all queries in repository_recipe to 2.0 style * rewrite all repository queries to 2.0 api * rewrite all remaining queries to 2.0 api * remove now-unneeded __allow_unmapped__ flag * remove and fix some unneeded cases of "# type: ignore" * fix formatting * bump black version * run black * can this please be the last one. okay. just. okay. * fix repository errors * remove return * drop open API validator --------- Co-authored-by: Sören Busch <fleshgolem@gmx.net>
36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
from pydantic import UUID4
|
|
from sqlalchemy import func, select
|
|
|
|
from mealie.db.models.group import Group
|
|
from mealie.db.models.recipe.category import Category
|
|
from mealie.db.models.recipe.recipe import RecipeModel
|
|
from mealie.db.models.recipe.tag import Tag
|
|
from mealie.db.models.recipe.tool import Tool
|
|
from mealie.db.models.users.users import User
|
|
from mealie.schema.group.group_statistics import GroupStatistics
|
|
from mealie.schema.user.user import GroupInDB
|
|
|
|
from ..db.models._model_base import SqlAlchemyBase
|
|
from .repository_generic import RepositoryGeneric
|
|
|
|
|
|
class RepositoryGroup(RepositoryGeneric[GroupInDB, Group]):
|
|
def get_by_name(self, name: str) -> GroupInDB | None:
|
|
dbgroup = self.session.execute(select(self.model).filter_by(name=name)).scalars().one_or_none()
|
|
if dbgroup is None:
|
|
return None
|
|
return self.schema.from_orm(dbgroup)
|
|
|
|
def statistics(self, group_id: UUID4) -> GroupStatistics:
|
|
def model_count(model: type[SqlAlchemyBase]) -> int:
|
|
stmt = select(func.count(model.id)).filter_by(group_id=group_id)
|
|
return self.session.scalar(stmt)
|
|
|
|
return GroupStatistics(
|
|
total_recipes=model_count(RecipeModel),
|
|
total_users=model_count(User),
|
|
total_categories=model_count(Category),
|
|
total_tags=model_count(Tag),
|
|
total_tools=model_count(Tool),
|
|
)
|