in packages/better-auth/src/plugins/organization/adapter.ts [316:387]
findFullOrganization: async ({
organizationId,
isSlug,
includeTeams,
}: {
organizationId: string;
isSlug?: boolean;
includeTeams?: boolean;
}) => {
const org = await adapter.findOne<Organization>({
model: "organization",
where: [{ field: isSlug ? "slug" : "id", value: organizationId }],
});
if (!org) {
return null;
}
const [invitations, members, teams] = await Promise.all([
adapter.findMany<Invitation>({
model: "invitation",
where: [{ field: "organizationId", value: org.id }],
}),
adapter.findMany<Member>({
model: "member",
where: [{ field: "organizationId", value: org.id }],
limit: options?.membershipLimit || 100,
}),
includeTeams
? adapter.findMany<Team>({
model: "team",
where: [{ field: "organizationId", value: org.id }],
})
: null,
]);
if (!org) return null;
const userIds = members.map((member) => member.userId);
const users =
userIds.length > 0
? await adapter.findMany<User>({
model: "user",
where: [{ field: "id", value: userIds, operator: "in" }],
limit: options?.membershipLimit || 100,
})
: [];
const userMap = new Map(users.map((user) => [user.id, user]));
const membersWithUsers = members.map((member) => {
const user = userMap.get(member.userId);
if (!user) {
throw new BetterAuthError(
"Unexpected error: User not found for member",
);
}
return {
...member,
user: {
id: user.id,
name: user.name,
email: user.email,
image: user.image,
},
};
});
return {
...org,
invitations,
members: membersWithUsers,
teams,
};
},