Coverage for opt/mealie/lib/python3.12/site-packages/mealie/routes/groups/controller_group_self_service.py: 96%
46 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 03:04 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 03:04 +0000
1from functools import cached_property
2from uuid import UUID
4from fastapi import Depends, HTTPException
5from pydantic import UUID4
7from mealie.routes._base.base_controllers import BaseUserController
8from mealie.routes._base.controller import controller
9from mealie.routes._base.routers import UserAPIRouter
10from mealie.schema.group.group_preferences import ReadGroupPreferences, UpdateGroupPreferences
11from mealie.schema.group.group_statistics import GroupStorage
12from mealie.schema.response.pagination import PaginationBase, PaginationQuery
13from mealie.schema.user.user import GroupSummary, UserSummary
14from mealie.services.group_services.group_service import GroupService
16router = UserAPIRouter(prefix="/groups", tags=["Groups: Self Service"])
19@controller(router)
20class GroupSelfServiceController(BaseUserController):
21 @cached_property
22 def service(self) -> GroupService:
23 return GroupService(self.group_id, self.repos)
25 @router.get("/self", response_model=GroupSummary)
26 def get_logged_in_user_group(self):
27 """Returns the Group Data for the Current User"""
28 return self.group.cast(GroupSummary)
30 @router.get("/members", response_model=PaginationBase[UserSummary])
31 def get_group_members(self, q: PaginationQuery = Depends()):
32 """Returns all users belonging to the current group"""
34 response = self.repos.users.page_all(q, override=UserSummary)
35 response.set_pagination_guides(router.url_path_for("get_group_members"), q.model_dump())
36 return response
38 @router.get("/members/{username_or_id}", response_model=UserSummary)
39 def get_group_member(self, username_or_id: str | UUID4):
40 """Returns a single user belonging to the current group"""
42 try:
43 UUID(username_or_id)
44 key = "id"
45 except ValueError:
46 key = "username"
48 private_user = self.repos.users.get_one(username_or_id, key)
49 if not private_user: 49 ↛ 52line 49 didn't jump to line 52 because the condition on line 49 was always true
50 raise HTTPException(status_code=404, detail="User Not Found")
52 return private_user.cast(UserSummary)
54 @router.get("/preferences", response_model=ReadGroupPreferences)
55 def get_group_preferences(self):
56 return self.group.preferences
58 @router.put("/preferences", response_model=ReadGroupPreferences)
59 def update_group_preferences(self, new_pref: UpdateGroupPreferences):
60 return self.repos.group_preferences.update(self.group_id, new_pref)
62 @router.get("/storage", response_model=GroupStorage)
63 def get_storage(self):
64 return self.service.calculate_group_storage()