Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 5fd0bee

Browse files
authoredSep 14, 2024
Merge pull request #548 from sinamics/api
Return node data from controller as first priority.
2 parents 314bb65 + a06772a commit 5fd0bee

File tree

10 files changed

+160
-192
lines changed

10 files changed

+160
-192
lines changed
 

‎src/components/networkByIdPage/table/memberEditCell.tsx

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,6 @@ const MemberEditCell = ({ nwid, central = false, organizationId }: IProp) => {
3737
);
3838

3939
const { data: me } = api.auth.me.useQuery();
40-
const { mutate: updateMemberDatabaseOnly } =
41-
api.networkMember.UpdateDatabaseOnly.useMutation({
42-
onError: handleApiError,
43-
onSuccess: handleApiSuccess({
44-
actions: [refetchNetworkById],
45-
toastMessage: t(
46-
"networkById.networkMembersTable.toastMessages.memberNameUpdated",
47-
),
48-
}),
49-
});
5040

5141
const { mutate: updateMember } = api.networkMember.Update.useMutation({
5242
onError: handleApiError,
@@ -86,14 +76,12 @@ const MemberEditCell = ({ nwid, central = false, organizationId }: IProp) => {
8676

8777
const submitName = (e: React.MouseEvent<HTMLButtonElement>) => {
8878
e.preventDefault();
89-
updateMemberDatabaseOnly({
79+
updateMember({
80+
updateParams: { name: value as string },
81+
memberId: original.id,
82+
organizationId,
9083
nwid,
91-
id: original.id,
9284
central,
93-
organizationId,
94-
updateParams: {
95-
name: value as string,
96-
},
9785
});
9886

9987
inputRef.current?.blur();

‎src/pages/api/__tests__/v1/network/network.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ describe("/api/createNetwork", () => {
88
status: jest.fn().mockReturnThis(),
99
end: jest.fn(),
1010
json: jest.fn().mockReturnThis(),
11-
setHeader: jest.fn(), // Mock `setHeader` rate limiter uses it
11+
setHeader: jest.fn(),
1212
} as unknown as NextApiResponse;
1313

1414
await apiNetworkHandler(req, res);

‎src/pages/api/__tests__/v1/networkMembers/updateMember.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ jest.mock("~/utils/ztApi", () => {
3333
return {
3434
...originalModule,
3535
member_update: jest.fn(),
36+
member_details: jest.fn(),
3637
};
3738
});
3839
describe("Update Network Members", () => {
@@ -105,11 +106,18 @@ describe("Update Network Members", () => {
105106
networkMembers: [{ id: "memberId" }],
106107
});
107108

109+
prisma.network_members.findUnique = jest.fn().mockResolvedValue({
110+
id: "memberId",
111+
authorized: false,
112+
});
113+
108114
// mock the token
109115
prisma.aPIToken.findUnique = jest.fn().mockResolvedValue({
110116
expiresAt: new Date(),
111117
});
112118

119+
(ztController.member_details as jest.Mock).mockResolvedValue([]);
120+
113121
const req = {
114122
method: "POST",
115123
headers: { "x-ztnet-auth": "validApiKey" },

‎src/pages/api/v1/network/[id]/member/[memberId]/index.ts

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ const POST_updateNetworkMember = SecuredPrivateApiRoute(
6565
const validatedInput = updateableFieldsMetaSchema.parse(body);
6666

6767
const updateableFields = {
68-
name: { type: "string", destinations: ["database"] },
68+
name: { type: "string", destinations: ["controller"] },
6969
authorized: { type: "boolean", destinations: ["controller"] },
7070
};
7171

@@ -101,14 +101,9 @@ const POST_updateNetworkMember = SecuredPrivateApiRoute(
101101
},
102102
});
103103

104-
if (!network?.networkMembers || network.networkMembers.length === 0) {
105-
return res
106-
.status(401)
107-
.json({ error: "Member or Network not found or access denied." });
108-
}
104+
const dbMember = network?.networkMembers?.[0];
109105

110-
if (Object.keys(databasePayload).length > 0) {
111-
// if users click the re-generate icon on IP address
106+
if (dbMember && Object.keys(databasePayload).length > 0) {
112107
await ctx.prisma.network.update({
113108
where: {
114109
nwid: networkId,
@@ -119,7 +114,7 @@ const POST_updateNetworkMember = SecuredPrivateApiRoute(
119114
where: {
120115
id_nwid: {
121116
id: memberId,
122-
nwid: networkId, // this should be the value of `nwid` you are looking for
117+
nwid: networkId,
123118
},
124119
},
125120
data: {
@@ -149,15 +144,32 @@ const POST_updateNetworkMember = SecuredPrivateApiRoute(
149144
});
150145
}
151146

152-
// @ts-expect-error
153-
const caller = appRouter.createCaller(ctx);
154-
const networkAndMembers = await caller.networkMember.getMemberById({
155-
nwid: networkId,
156-
id: memberId,
157-
});
147+
// Fetch the latest data from both database and controller
148+
const [updatedDbMember, controllerMember] = await Promise.all([
149+
ctx.prisma.network_members.findUnique({
150+
where: {
151+
id_nwid: {
152+
id: memberId,
153+
nwid: networkId,
154+
},
155+
},
156+
}),
157+
// @ts-expect-error
158+
ztController.member_details(ctx, networkId, memberId, false),
159+
]);
160+
if (!controllerMember) {
161+
return res.status(404).json({ error: "Member not found in controller" });
162+
}
158163

159-
return res.status(200).json(networkAndMembers);
164+
// Merge the database and controller data
165+
const mergedMember = {
166+
...updatedDbMember,
167+
...controllerMember,
168+
};
169+
170+
return res.status(200).json(mergedMember);
160171
} catch (cause) {
172+
console.error(cause);
161173
return handleApiErrors(cause, res);
162174
}
163175
},

‎src/pages/api/v1/network/[id]/member/index.ts

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -40,28 +40,29 @@ const GET_networkMembers = SecuredPrivateApiRoute(
4040
},
4141
async (_req, res, { networkId, ctx }) => {
4242
try {
43-
const arr = [];
44-
const networks = await prisma.network.findUnique({
45-
where: {
46-
nwid: networkId,
47-
},
48-
include: {
49-
networkMembers: true,
50-
},
51-
});
43+
const controllerMember = await ztController.local_network_detail(
44+
// @ts-expect-error: fake request object
45+
ctx,
46+
networkId,
47+
false,
48+
);
5249

53-
for (const member of networks.networkMembers) {
54-
const controllerMember = await ztController.member_details(
55-
//@ts-expect-error
56-
ctx,
57-
networkId,
58-
member.id,
59-
false,
60-
);
61-
arr.push({ ...member, ...controllerMember });
62-
}
50+
const networkMembers = await Promise.all(
51+
controllerMember.members.map(async (member) => {
52+
const dbMember = await prisma.network_members.findUnique({
53+
where: {
54+
id_nwid: {
55+
nwid: member.nwid,
56+
id: member.id,
57+
},
58+
},
59+
});
6360

64-
return res.status(200).json(arr);
61+
return { ...dbMember, ...member };
62+
}),
63+
);
64+
65+
return res.status(200).json(networkMembers);
6566
} catch (cause) {
6667
return handleApiErrors(cause, res);
6768
}

‎src/pages/api/v1/org/[orgid]/network/[nwid]/member/[memberId]/index.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ export const POST_orgUpdateNetworkMember = SecuredOrganizationApiRoute(
135135
where: {
136136
id_nwid: {
137137
id: memberId,
138-
nwid: networkId, // this should be the value of `nwid` you are looking for
138+
nwid: networkId,
139139
},
140140
},
141141
data: {
@@ -225,14 +225,24 @@ export const GET_orgNetworkMemberById = SecuredOrganizationApiRoute(
225225
const validatedContext = HandlerContextSchema.parse(context);
226226
const { networkId, memberId, ctx } = validatedContext;
227227

228+
const controllerMember = await ztController.local_network_detail(
229+
// @ts-expect-error: fake request object
230+
ctx,
231+
networkId,
232+
false,
233+
);
234+
235+
const findControllermemberById = controllerMember.members.find(
236+
(member) => member.id === memberId,
237+
);
228238
// @ts-expect-error
229239
const caller = appRouter.createCaller(ctx);
230240
const networkAndMembers = await caller.networkMember.getMemberById({
231241
nwid: networkId,
232242
id: memberId,
233243
});
234244

235-
return res.status(200).json(networkAndMembers);
245+
return res.status(200).json({ ...networkAndMembers, ...findControllermemberById });
236246
} catch (cause) {
237247
return handleApiErrors(cause, res);
238248
}

‎src/server/api/__tests__/networkMembers/updateDatabaseOnly.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ test("updateDatabaseOnly test", async () => {
4242
id: "12234",
4343
updateParams: {
4444
deleted: false,
45-
name: "test name",
4645
},
4746
};
4847

@@ -52,6 +51,7 @@ test("updateDatabaseOnly test", async () => {
5251
wss: null,
5352
res: null,
5453
});
54+
5555
// @ts-expect-error -- awaiting fix:
5656
prisma.network.update.mockResolvedValue(mockOutput);
5757

@@ -68,7 +68,7 @@ test("updateDatabaseOnly test", async () => {
6868
where: {
6969
id_nwid: {
7070
id: input.id,
71-
nwid: input.nwid, // this should be the value of `nwid` you are looking for
71+
nwid: input.nwid,
7272
},
7373
},
7474
data: {

0 commit comments

Comments
 (0)