mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-13 11:23:12 -05:00
feat: User Tooltip (#4319)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from functools import cached_property
|
||||
from uuid import UUID
|
||||
|
||||
from fastapi import Query
|
||||
from fastapi import Depends, HTTPException
|
||||
from pydantic import UUID4
|
||||
|
||||
from mealie.routes._base.base_controllers import BaseUserController
|
||||
@@ -8,7 +9,7 @@ from mealie.routes._base.controller import controller
|
||||
from mealie.routes._base.routers import UserAPIRouter
|
||||
from mealie.schema.group.group_preferences import ReadGroupPreferences, UpdateGroupPreferences
|
||||
from mealie.schema.group.group_statistics import GroupStorage
|
||||
from mealie.schema.response.pagination import PaginationQuery
|
||||
from mealie.schema.response.pagination import PaginationBase, PaginationQuery
|
||||
from mealie.schema.user.user import GroupSummary, UserSummary
|
||||
from mealie.services.group_services.group_service import GroupService
|
||||
|
||||
@@ -26,13 +27,29 @@ class GroupSelfServiceController(BaseUserController):
|
||||
"""Returns the Group Data for the Current User"""
|
||||
return self.group.cast(GroupSummary)
|
||||
|
||||
@router.get("/members", response_model=list[UserSummary])
|
||||
def get_group_members(self, household_id: UUID4 | None = Query(None, alias="householdId")):
|
||||
"""Returns all users belonging to the current group, optionally filtered by household_id"""
|
||||
@router.get("/members", response_model=PaginationBase[UserSummary])
|
||||
def get_group_members(self, q: PaginationQuery = Depends()):
|
||||
"""Returns all users belonging to the current group"""
|
||||
|
||||
query_filter = f"household_id={household_id}" if household_id else None
|
||||
private_users = self.repos.users.page_all(PaginationQuery(page=1, per_page=-1, query_filter=query_filter)).items
|
||||
return [user.cast(UserSummary) for user in private_users]
|
||||
response = self.repos.users.page_all(q, override=UserSummary)
|
||||
response.set_pagination_guides(router.url_path_for("get_group_members"), q.model_dump())
|
||||
return response
|
||||
|
||||
@router.get("/members/{username_or_id}", response_model=UserSummary)
|
||||
def get_group_member(self, username_or_id: str | UUID4):
|
||||
"""Returns a single user belonging to the current group"""
|
||||
|
||||
try:
|
||||
UUID(username_or_id)
|
||||
key = "id"
|
||||
except ValueError:
|
||||
key = "username"
|
||||
|
||||
private_user = self.repos.users.get_one(username_or_id, key)
|
||||
if not private_user:
|
||||
raise HTTPException(status_code=404, detail="User Not Found")
|
||||
|
||||
return private_user.cast(UserSummary)
|
||||
|
||||
@router.get("/preferences", response_model=ReadGroupPreferences)
|
||||
def get_group_preferences(self):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from functools import cached_property
|
||||
|
||||
from fastapi import HTTPException, status
|
||||
from fastapi import Depends, HTTPException, status
|
||||
|
||||
from mealie.routes._base.base_controllers import BaseUserController
|
||||
from mealie.routes._base.controller import controller
|
||||
@@ -9,7 +9,7 @@ from mealie.schema.household.household import HouseholdInDB
|
||||
from mealie.schema.household.household_permissions import SetPermissions
|
||||
from mealie.schema.household.household_preferences import ReadHouseholdPreferences, UpdateHouseholdPreferences
|
||||
from mealie.schema.household.household_statistics import HouseholdStatistics
|
||||
from mealie.schema.response.pagination import PaginationQuery
|
||||
from mealie.schema.response.pagination import PaginationBase, PaginationQuery
|
||||
from mealie.schema.user.user import UserOut
|
||||
from mealie.services.household_services.household_service import HouseholdService
|
||||
|
||||
@@ -27,13 +27,20 @@ class HouseholdSelfServiceController(BaseUserController):
|
||||
"""Returns the Household Data for the Current User"""
|
||||
return self.household
|
||||
|
||||
@router.get("/members", response_model=list[UserOut])
|
||||
def get_household_members(self):
|
||||
@router.get("/members", response_model=PaginationBase[UserOut])
|
||||
def get_household_members(self, q: PaginationQuery = Depends()):
|
||||
"""Returns all users belonging to the current household"""
|
||||
private_users = self.repos.users.page_all(
|
||||
PaginationQuery(page=1, per_page=-1, query_filter=f"household_id={self.household_id}")
|
||||
).items
|
||||
return [user.cast(UserOut) for user in private_users]
|
||||
|
||||
qf_part = f"household_id={self.household_id}"
|
||||
if q.query_filter:
|
||||
q.query_filter = f"({q.query_filter}) AND {qf_part}"
|
||||
else:
|
||||
q.query_filter = qf_part
|
||||
|
||||
response = self.repos.users.page_all(q, override=UserOut)
|
||||
|
||||
response.set_pagination_guides(router.url_path_for("get_household_members"), q.model_dump())
|
||||
return response
|
||||
|
||||
@router.get("/preferences", response_model=ReadHouseholdPreferences)
|
||||
def get_household_preferences(self):
|
||||
|
||||
@@ -180,6 +180,7 @@ class UserOut(UserBase):
|
||||
|
||||
class UserSummary(MealieModel):
|
||||
id: UUID4
|
||||
username: str
|
||||
full_name: str
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user