mirror of
https://github.com/documenso/documenso.git
synced 2026-07-10 13:06:00 +10:00
44 lines
1.0 KiB
TypeScript
44 lines
1.0 KiB
TypeScript
import { prisma } from '@documenso/prisma';
|
|
import type { TeamGroup } from '@prisma/client';
|
|
|
|
export type GetUserTeamIdsOptions = {
|
|
userId: number;
|
|
};
|
|
|
|
/**
|
|
* Pre-resolve all team groups a user has access to via their organisation group memberships,
|
|
* keyed by team ID.
|
|
*
|
|
* This is significantly cheaper than joining team groups inline in a Prisma `findMany`
|
|
* because it avoids deep EXISTS subqueries and redundant LEFT JOINs per row.
|
|
*/
|
|
export const getUserTeamGroups = async ({ userId }: GetUserTeamIdsOptions): Promise<Map<number, TeamGroup[]>> => {
|
|
const teamGroups = await prisma.teamGroup.findMany({
|
|
where: {
|
|
organisationGroup: {
|
|
organisationGroupMembers: {
|
|
some: {
|
|
organisationMember: {
|
|
userId,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
const map = new Map<number, TeamGroup[]>();
|
|
|
|
for (const tg of teamGroups) {
|
|
const existing = map.get(tg.teamId);
|
|
|
|
if (existing) {
|
|
existing.push(tg);
|
|
} else {
|
|
map.set(tg.teamId, [tg]);
|
|
}
|
|
}
|
|
|
|
return map;
|
|
};
|