feat: add group statistics on profile page

* resolve file not found error and add constants

* add group stats and storage functionality

* generate new types

* add statistics and storage cap graphs

* fix: add loadFood query param #1103

* refactor to flex view
This commit is contained in:
Hayden
2022-03-27 15:12:18 -08:00
committed by GitHub
parent b57e42a3b3
commit 1e90dc2022
13 changed files with 326 additions and 32 deletions

View File

@@ -1,3 +1,5 @@
from functools import cached_property
from fastapi import HTTPException, status
from mealie.routes._base.abc_controller import BaseUserController
@@ -5,13 +7,29 @@ from mealie.routes._base.controller import controller
from mealie.routes._base.routers import UserAPIRouter
from mealie.schema.group.group_permissions import SetPermissions
from mealie.schema.group.group_preferences import ReadGroupPreferences, UpdateGroupPreferences
from mealie.schema.group.group_statistics import GroupStatistics, GroupStorage
from mealie.schema.user.user import GroupInDB, UserOut
from mealie.services.group_services.group_service import GroupService
router = UserAPIRouter(prefix="/groups", tags=["Groups: Self Service"])
@controller(router)
class GroupSelfServiceController(BaseUserController):
@cached_property
def service(self) -> GroupService:
return GroupService(self.group_id, self.repos)
@router.get("/self", response_model=GroupInDB)
def get_logged_in_user_group(self):
"""Returns the Group Data for the Current User"""
return self.group
@router.get("/members", response_model=list[UserOut])
def get_group_members(self):
"""Returns the Group of user lists"""
return self.repos.users.multi_query(query_by={"group_id": self.group.id}, override_schema=UserOut)
@router.get("/preferences", response_model=ReadGroupPreferences)
def get_group_preferences(self):
return self.group.preferences
@@ -20,18 +38,8 @@ class GroupSelfServiceController(BaseUserController):
def update_group_preferences(self, new_pref: UpdateGroupPreferences):
return self.repos.group_preferences.update(self.group_id, new_pref)
@router.get("/self", response_model=GroupInDB)
async def get_logged_in_user_group(self):
"""Returns the Group Data for the Current User"""
return self.group
@router.get("/members", response_model=list[UserOut])
async def get_group_members(self):
"""Returns the Group of user lists"""
return self.repos.users.multi_query(query_by={"group_id": self.group.id}, override_schema=UserOut)
@router.put("/permissions", response_model=UserOut)
async def set_member_permissions(self, permissions: SetPermissions):
def set_member_permissions(self, permissions: SetPermissions):
self.checks.can_manage()
target_user = self.repos.users.get(permissions.user_id)
@@ -47,3 +55,11 @@ class GroupSelfServiceController(BaseUserController):
target_user.can_organize = permissions.can_organize
return self.repos.users.update(permissions.user_id, target_user)
@router.get("/statistics", response_model=GroupStatistics)
def get_statistics(self):
return self.service.calculate_statistics()
@router.get("/storage", response_model=GroupStorage)
def get_storage(self):
return self.service.calculate_group_storage()