diff --git a/frontend/composables/use-groups.ts b/frontend/composables/use-groups.ts index 8b2e8b682af8..01c164f4a577 100644 --- a/frontend/composables/use-groups.ts +++ b/frontend/composables/use-groups.ts @@ -1,30 +1,39 @@ import { useAsync, ref } from "@nuxtjs/composition-api"; -import { useAsyncKey } from "./use-utils"; import { useUserApi } from "~/composables/api"; -import { GroupBase } from "~/lib/api/types/user"; +import { GroupBase, GroupSummary } from "~/lib/api/types/user"; + +const groupSelfRef = ref(null); +const loading = ref(false); export const useGroupSelf = function () { const api = useUserApi(); + async function refreshGroupSelf() { + loading.value = true; + const { data } = await api.groups.getCurrentUserGroup(); + groupSelfRef.value = data; + loading.value = false; + } const actions = { get() { - const group = useAsync(async () => { - const { data } = await api.groups.getCurrentUserGroup(); + if (!(groupSelfRef.value || loading.value)) { + refreshGroupSelf(); + } - return data; - }, useAsyncKey()); - - return group; + return groupSelfRef; }, async updatePreferences() { - if (!group.value?.preferences) { + if (!groupSelfRef.value) { + await refreshGroupSelf(); + } + if (!groupSelfRef.value?.preferences) { return; } - const { data } = await api.groups.setPreferences(group.value.preferences); + const { data } = await api.groups.setPreferences(groupSelfRef.value.preferences); if (data) { - group.value.preferences = data; + groupSelfRef.value.preferences = data; } }, }; diff --git a/frontend/lib/api/types/user.ts b/frontend/lib/api/types/user.ts index 681dc5291afa..35ae18f132b6 100644 --- a/frontend/lib/api/types/user.ts +++ b/frontend/lib/api/types/user.ts @@ -48,6 +48,13 @@ export interface GroupInDB { users?: UserOut[]; preferences?: ReadGroupPreferences; } +export interface GroupSummary { + name: string; + id: string; + slug: string; + preferences?: ReadGroupPreferences; + +} export interface CategoryBase { name: string; id: string; diff --git a/frontend/lib/api/user/groups.ts b/frontend/lib/api/user/groups.ts index 090f4fabc590..19f5cff9152b 100644 --- a/frontend/lib/api/user/groups.ts +++ b/frontend/lib/api/user/groups.ts @@ -1,5 +1,5 @@ import { BaseCRUDAPI } from "../base/base-clients"; -import { CategoryBase, GroupBase, GroupInDB, UserOut } from "~/lib/api/types/user"; +import { CategoryBase, GroupBase, GroupInDB, GroupSummary, UserOut } from "~/lib/api/types/user"; import { CreateInviteToken, GroupAdminUpdate, @@ -35,7 +35,7 @@ export class GroupAPI extends BaseCRUDAPI(routes.groupsSelf); + return await this.requests.get(routes.groupsSelf); } async getCategories() { diff --git a/mealie/routes/groups/controller_group_self_service.py b/mealie/routes/groups/controller_group_self_service.py index 92fc53a13a60..ac63a5d02fc8 100644 --- a/mealie/routes/groups/controller_group_self_service.py +++ b/mealie/routes/groups/controller_group_self_service.py @@ -8,7 +8,7 @@ from mealie.routes._base.routers import UserAPIRouter from mealie.schema.group.group_permissions import SetPermissions from mealie.schema.group.group_preferences import ReadGroupPreferences, UpdateGroupPreferences from mealie.schema.group.group_statistics import GroupStatistics, GroupStorage -from mealie.schema.user.user import GroupInDB, UserOut +from mealie.schema.user.user import GroupSummary, UserOut from mealie.services.group_services.group_service import GroupService router = UserAPIRouter(prefix="/groups", tags=["Groups: Self Service"]) @@ -20,10 +20,10 @@ class GroupSelfServiceController(BaseUserController): def service(self) -> GroupService: return GroupService(self.group_id, self.repos) - @router.get("/self", response_model=GroupInDB) + @router.get("/self", response_model=GroupSummary) def get_logged_in_user_group(self): """Returns the Group Data for the Current User""" - return self.group + return self.group.cast(GroupSummary) @router.get("/members", response_model=list[UserOut]) def get_group_members(self): diff --git a/mealie/schema/user/user.py b/mealie/schema/user/user.py index 864ff6bd5ed7..a478866a5239 100644 --- a/mealie/schema/user/user.py +++ b/mealie/schema/user/user.py @@ -249,6 +249,19 @@ class GroupInDB(UpdateGroup): ] +class GroupSummary(GroupBase): + id: UUID4 + name: str + slug: str + preferences: ReadGroupPreferences | None = None + + @classmethod + def loader_options(cls) -> list[LoaderOption]: + return [ + joinedload(Group.preferences), + ] + + class GroupPagination(PaginationBase): items: list[GroupInDB]