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