Files
calendar/packages/trpc/server/routers/viewer/teams/listMembers.handler.ts
T
d180e14013 feat: insights orgs [CAL-1888] (#9551)
* initial commit

* fixes on data returned

* mobile style fixes

* Update on styles and dates not being shown on graphics

* feat: update insights filters UI (#9756)

* feat: update insights filters UI

Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>

* Fixes for filters with new UI

* fix initialConfig lost while clearing filters

* Add single user conditional for first render

---------

Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: Alan <alannnc@gmail.com>

---------

Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: Efraín Rochín <roae.85@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
2023-06-29 19:03:44 +02:00

57 lines
1.3 KiB
TypeScript

import type { TrpcSessionUser } from "@calcom/trpc/server/trpc";
import type { TListMembersInputSchema } from "./listMembers.schema";
import type { PrismaClient } from ".prisma/client";
type ListMembersOptions = {
ctx: {
user: NonNullable<TrpcSessionUser>;
prisma: PrismaClient;
};
input: TListMembersInputSchema;
};
export const listMembersHandler = async ({ ctx, input }: ListMembersOptions) => {
const { prisma } = ctx;
const teams = await prisma.team.findMany({
where: {
id: {
in: input.teamIds,
},
members: {
some: {
user: {
id: ctx.user.id,
},
accepted: true,
},
},
},
select: {
members: {
select: {
user: {
select: {
id: true,
name: true,
username: true,
},
},
accepted: true,
},
},
},
});
type UserMap = Record<number, (typeof teams)[number]["members"][number]["user"] & { accepted: boolean }>;
// flatten users to be unique by id
const users = teams
.flatMap((t) => t.members)
.reduce(
(acc, m) => (m.user.id in acc ? acc : { ...acc, [m.user.id]: { ...m.user, accepted: m.accepted } }),
{} as UserMap
);
return Object.values(users);
};