Skip to content

Commit f1e8d63

Browse files
authored
Merge pull request #3321 from michael-genson/fix/repeated-calls-to-groups-self
fix: Repeated calls to group self
2 parents 04e6601 + abbaf12 commit f1e8d63

File tree

5 files changed

+45
-16
lines changed

5 files changed

+45
-16
lines changed

frontend/composables/use-groups.ts

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,39 @@
11
import { useAsync, ref } from "@nuxtjs/composition-api";
2-
import { useAsyncKey } from "./use-utils";
32
import { useUserApi } from "~/composables/api";
4-
import { GroupBase } from "~/lib/api/types/user";
3+
import { GroupBase, GroupSummary } from "~/lib/api/types/user";
4+
5+
const groupSelfRef = ref<GroupSummary | null>(null);
6+
const loading = ref(false);
57

68
export const useGroupSelf = function () {
79
const api = useUserApi();
10+
async function refreshGroupSelf() {
11+
loading.value = true;
12+
const { data } = await api.groups.getCurrentUserGroup();
13+
groupSelfRef.value = data;
14+
loading.value = false;
15+
}
816

917
const actions = {
1018
get() {
11-
const group = useAsync(async () => {
12-
const { data } = await api.groups.getCurrentUserGroup();
13-
14-
return data;
15-
}, useAsyncKey());
19+
if (!(groupSelfRef.value || loading.value)) {
20+
refreshGroupSelf();
21+
}
1622

17-
return group;
23+
return groupSelfRef;
1824
},
1925
async updatePreferences() {
20-
if (!group.value?.preferences) {
26+
if (!groupSelfRef.value) {
27+
await refreshGroupSelf();
28+
}
29+
if (!groupSelfRef.value?.preferences) {
2130
return;
2231
}
2332

24-
const { data } = await api.groups.setPreferences(group.value.preferences);
33+
const { data } = await api.groups.setPreferences(groupSelfRef.value.preferences);
2534

2635
if (data) {
27-
group.value.preferences = data;
36+
groupSelfRef.value.preferences = data;
2837
}
2938
},
3039
};

frontend/lib/api/types/user.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@ export interface GroupInDB {
4848
users?: UserOut[];
4949
preferences?: ReadGroupPreferences;
5050
}
51+
export interface GroupSummary {
52+
name: string;
53+
id: string;
54+
slug: string;
55+
preferences?: ReadGroupPreferences;
56+
57+
}
5158
export interface CategoryBase {
5259
name: string;
5360
id: string;

frontend/lib/api/user/groups.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { BaseCRUDAPI } from "../base/base-clients";
2-
import { CategoryBase, GroupBase, GroupInDB, UserOut } from "~/lib/api/types/user";
2+
import { CategoryBase, GroupBase, GroupInDB, GroupSummary, UserOut } from "~/lib/api/types/user";
33
import {
44
CreateInviteToken,
55
GroupAdminUpdate,
@@ -35,7 +35,7 @@ export class GroupAPI extends BaseCRUDAPI<GroupBase, GroupInDB, GroupAdminUpdate
3535
/** Returns the Group Data for the Current User
3636
*/
3737
async getCurrentUserGroup() {
38-
return await this.requests.get<GroupInDB>(routes.groupsSelf);
38+
return await this.requests.get<GroupSummary>(routes.groupsSelf);
3939
}
4040

4141
async getCategories() {

mealie/routes/groups/controller_group_self_service.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from mealie.schema.group.group_permissions import SetPermissions
99
from mealie.schema.group.group_preferences import ReadGroupPreferences, UpdateGroupPreferences
1010
from mealie.schema.group.group_statistics import GroupStatistics, GroupStorage
11-
from mealie.schema.user.user import GroupInDB, UserOut
11+
from mealie.schema.user.user import GroupSummary, UserOut
1212
from mealie.services.group_services.group_service import GroupService
1313

1414
router = UserAPIRouter(prefix="/groups", tags=["Groups: Self Service"])
@@ -20,10 +20,10 @@ class GroupSelfServiceController(BaseUserController):
2020
def service(self) -> GroupService:
2121
return GroupService(self.group_id, self.repos)
2222

23-
@router.get("/self", response_model=GroupInDB)
23+
@router.get("/self", response_model=GroupSummary)
2424
def get_logged_in_user_group(self):
2525
"""Returns the Group Data for the Current User"""
26-
return self.group
26+
return self.group.cast(GroupSummary)
2727

2828
@router.get("/members", response_model=list[UserOut])
2929
def get_group_members(self):

mealie/schema/user/user.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,19 @@ def loader_options(cls) -> list[LoaderOption]:
249249
]
250250

251251

252+
class GroupSummary(GroupBase):
253+
id: UUID4
254+
name: str
255+
slug: str
256+
preferences: ReadGroupPreferences | None = None
257+
258+
@classmethod
259+
def loader_options(cls) -> list[LoaderOption]:
260+
return [
261+
joinedload(Group.preferences),
262+
]
263+
264+
252265
class GroupPagination(PaginationBase):
253266
items: list[GroupInDB]
254267

0 commit comments

Comments
 (0)