* add eslint config * migrate autoLock to features * migrate teamService to features * migrate userCreationService * migrate insights services to features * migrate ProfileRepository * update imports * migrate filter segmen tests * migrate filter segment repository * migrate getBusyTimes * migrate getLocaleFromRequest * refactor csvUtils * make filename clearer * migrate getLuckyUser integration test * migrate autoLock test to features * wip * refactors * migrate useBookerUrl * migrate more * wip * Migrate eventTypeRepository * membership repository * update imports * update imports * migrate * move organization repository * update imports * update imports * wip * wip * wip * wip * wip * wip * wip * wip * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix tests * fix type checks * fix * fix * migrate * update imports * fix tests * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix
33 lines
985 B
TypeScript
33 lines
985 B
TypeScript
import type { Session } from "next-auth";
|
|
|
|
import { UserRepository } from "@calcom/features/users/repositories/UserRepository";
|
|
import prisma from "@calcom/prisma";
|
|
import type { TrpcSessionUser } from "@calcom/trpc/server/types";
|
|
|
|
type MyStatsOptions = {
|
|
ctx: {
|
|
user: NonNullable<TrpcSessionUser>;
|
|
session: Session;
|
|
};
|
|
};
|
|
|
|
export const myStatsHandler = async ({ ctx }: MyStatsOptions) => {
|
|
const { user: sessionUser } = ctx;
|
|
|
|
const additionalUserInfo = await new UserRepository(prisma).getUserStats({ userId: sessionUser.id });
|
|
|
|
const sumOfTeamEventTypes = additionalUserInfo?.teams.reduce(
|
|
(sum, team) => sum + team.team.eventTypes.length,
|
|
0
|
|
);
|
|
|
|
return {
|
|
id: sessionUser.id,
|
|
sumOfBookings: additionalUserInfo?._count.bookings,
|
|
sumOfCalendars: additionalUserInfo?._count.userLevelSelectedCalendars,
|
|
sumOfTeams: additionalUserInfo?._count.teams,
|
|
sumOfEventTypes: additionalUserInfo?._count.eventTypes,
|
|
sumOfTeamEventTypes,
|
|
};
|
|
};
|