Coverage for opt/mealie/lib/python3.12/site-packages/mealie/routes/households/controller_mealplan_rules.py: 100%

37 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 03:04 +0000

1from functools import cached_property 

2 

3from fastapi import Depends 

4from pydantic import UUID4 

5 

6from mealie.routes._base.base_controllers import BaseUserController 

7from mealie.routes._base.controller import controller 

8from mealie.routes._base.mixins import HttpRepo 

9from mealie.routes._base.routers import UserAPIRouter 

10from mealie.schema import mapper 

11from mealie.schema.meal_plan.plan_rules import PlanRulesCreate, PlanRulesOut, PlanRulesPagination, PlanRulesSave 

12from mealie.schema.response.pagination import PaginationQuery 

13 

14router = UserAPIRouter(prefix="/households/mealplans/rules", tags=["Households: Mealplan Rules"]) 

15 

16 

17@controller(router) 

18class GroupMealplanConfigController(BaseUserController): 

19 @cached_property 

20 def repo(self): 

21 return self.repos.group_meal_plan_rules 

22 

23 @cached_property 

24 def mixins(self): 

25 return HttpRepo[PlanRulesCreate, PlanRulesOut, PlanRulesOut](self.repo, self.logger) 

26 

27 @router.get("", response_model=PlanRulesPagination) 

28 def get_all(self, q: PaginationQuery = Depends(PaginationQuery)): 

29 response = self.repo.page_all( 

30 pagination=q, 

31 override=PlanRulesOut, 

32 ) 

33 

34 response.set_pagination_guides(router.url_path_for("get_all"), q.model_dump()) 

35 return response 

36 

37 @router.post("", response_model=PlanRulesOut, status_code=201) 

38 def create_one(self, data: PlanRulesCreate): 

39 save = mapper.cast(data, PlanRulesSave, group_id=self.group.id, household_id=self.household.id) 

40 return self.mixins.create_one(save) 

41 

42 @router.get("/{item_id}", response_model=PlanRulesOut) 

43 def get_one(self, item_id: UUID4): 

44 return self.mixins.get_one(item_id) 

45 

46 @router.put("/{item_id}", response_model=PlanRulesOut) 

47 def update_one(self, item_id: UUID4, data: PlanRulesCreate): 

48 return self.mixins.update_one(data, item_id) 

49 

50 @router.delete("/{item_id}", response_model=PlanRulesOut) 

51 def delete_one(self, item_id: UUID4): 

52 return self.mixins.delete_one(item_id) # type: ignore