Skip to content

Commit

Permalink
improved fetching members
Browse files Browse the repository at this point in the history
  • Loading branch information
sinamics committed Aug 9, 2023
1 parent 349a743 commit e743024
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 4 deletions.
1 change: 1 addition & 0 deletions src/server/api/routers/memberRouter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ export const networkMemberRouter = createTRPCRouter({
await ctx.prisma.network_members.create({
data: {
id: input.id,
address: input.id,
lastSeen: new Date(),
creationTime: new Date(),
nwid_ref: {
Expand Down
40 changes: 38 additions & 2 deletions src/server/api/routers/networkRouter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ export const networkRouter = createTRPCRouter({
.catch((err: APIError) => {
throwError(`${err.message}`);
});

// console.log(JSON.stringify(ztControllerResponse, null, 2));
if (!ztControllerResponse)
return throwError("Failed to get network details!");
Expand All @@ -142,29 +143,64 @@ export const networkRouter = createTRPCRouter({
ztControllerResponse.members,
);

// Update network members based on controller response and fetched peers data
await updateNetworkMembers(
ztControllerResponse.members,
peersForAllMembers,
);

// Fetch members which are marked as deleted/zombie in the database for a given network
const zombieMembers = await fetchZombieMembers(
input.nwid,
ztControllerResponse.members,
);

const enrichedMembers = await enrichMembers(
// Enrich controller members with additional database information and peer data
const controllerMembers = await enrichMembers(
input.nwid,
ztControllerResponse.members,
peersForAllMembers,
);

// Generate CIDR options for IP configuration
const { cidrOptions } = IPv4gen(null);

// Merging logic to ensure that members who only exist in local database ( added manually ) are also included in the response

// Create a map to store members by their id for efficient lookup
const mergedMembersMap = new Map();

// Process controllerMembers first for precedence
for (const member of controllerMembers) {
mergedMembersMap.set(member.id, member);
}

// Fetch members from the database for a given network ID where the members are not deleted
const databaseMembers = await ctx.prisma.network_members.findMany({
where: {
nwid: input.nwid,
deleted: false,
},
});

// Process databaseMembers
for (const member of databaseMembers) {
if (!mergedMembersMap.has(member.id)) {
mergedMembersMap.set(member.id, member);
}
}

// Convert the map back to an array of merged members
const mergedMembers = [...mergedMembersMap.values()];

// Construct the final response object
return {
network: {
...ztControllerResponse?.network,
...psqlNetworkData,
cidr: cidrOptions,
},
members: enrichedMembers,
members: mergedMembers,
zombieMembers,
};
}),
Expand Down
3 changes: 1 addition & 2 deletions src/utils/ztApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -545,8 +545,7 @@ export const peer = async (userZtAddress: string) => {

if (!response) return {} as ZTControllerGetPeer;
return response as ZTControllerGetPeer;
} catch (error) {
console.error(error);
} catch (_error) {
return [];
}
};

0 comments on commit e743024

Please sign in to comment.