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:48 +0000

1from functools import cached_property 1a

2from uuid import UUID 1a

3 

4from fastapi import Depends, HTTPException 1a

5from pydantic import UUID4 1a

6 

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

15 

16router = UserAPIRouter(prefix="/groups", tags=["Groups: Self Service"]) 1a

17 

18 

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) 

24 

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) 

29 

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

33 

34 response = self.repos.users.page_all(q, override=UserSummary) 1c

35 response.set_pagination_guides(router.url_path_for("get_group_members"), q.model_dump()) 1c

36 return response 1c

37 

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

41 

42 try: 1cb

43 UUID(username_or_id) 1cb

44 key = "id" 

45 except ValueError: 1cb

46 key = "username" 1cb

47 

48 private_user = self.repos.users.get_one(username_or_id, key) 1cb

49 if not private_user: 49 ↛ 52line 49 didn't jump to line 52 because the condition on line 49 was always true1cb

50 raise HTTPException(status_code=404, detail="User Not Found") 1cb

51 

52 return private_user.cast(UserSummary) 

53 

54 @router.get("/preferences", response_model=ReadGroupPreferences) 1a

55 def get_group_preferences(self): 1a

56 return self.group.preferences 

57 

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) 

61 

62 @router.get("/storage", response_model=GroupStorage) 1a

63 def get_storage(self): 1a

64 return self.service.calculate_group_storage()