From f29f6632e827f8c9fd70a9dc4da8659f9d42f3ef Mon Sep 17 00:00:00 2001 From: Hariom Balhara Date: Fri, 16 Feb 2024 18:02:05 +0530 Subject: [PATCH] fix: Managed children event listing for organization members (#13722) * Fetch event-types by userId for childEvents and filter out those events that dont belong to the user * Add test --- packages/lib/server/repository/eventType.ts | 22 +++++++++++++++++-- .../viewer/eventTypes/getByViewer.handler.ts | 11 +++++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/packages/lib/server/repository/eventType.ts b/packages/lib/server/repository/eventType.ts index 8581bad380..fdba24993f 100644 --- a/packages/lib/server/repository/eventType.ts +++ b/packages/lib/server/repository/eventType.ts @@ -88,7 +88,7 @@ export class EventTypeRepository { } static async findAllByUpId( - { upId }: { upId: string }, + { upId, userId }: { upId: string; userId: number }, { orderBy, where = {}, @@ -156,6 +156,13 @@ export class EventTypeRepository { { profileId, }, + // Fetch children event-types by userId because profileId is wrong + { + userId, + parentId: { + not: null, + }, + }, ], ...where, }, @@ -165,7 +172,18 @@ export class EventTypeRepository { } else { return await prisma.eventType.findMany({ where: { - profileId, + OR: [ + { + profileId, + }, + // Fetch children event-types by userId because profileId is wrong + { + userId: userId, + parentId: { + not: null, + }, + }, + ], ...where, }, select, diff --git a/packages/trpc/server/routers/viewer/eventTypes/getByViewer.handler.ts b/packages/trpc/server/routers/viewer/eventTypes/getByViewer.handler.ts index af0657e726..82435014e8 100644 --- a/packages/trpc/server/routers/viewer/eventTypes/getByViewer.handler.ts +++ b/packages/trpc/server/routers/viewer/eventTypes/getByViewer.handler.ts @@ -65,6 +65,7 @@ export const getByViewerHandler = async ({ ctx, input }: GetByViewerOptions) => ? EventTypeRepository.findAllByUpId( { upId: lightProfile.upId, + userId: ctx.user.id, }, { where: { @@ -131,7 +132,15 @@ export const getByViewerHandler = async ({ ctx, input }: GetByViewerOptions) => ), }); - const userEventTypes = await Promise.all(profileEventTypes.map(mapEventType)); + const userEventTypes = (await Promise.all(profileEventTypes.map(mapEventType))).filter((eventType) => { + const isAChildEvent = eventType.parentId; + // A child event only has one user + const childEventAssignee = eventType.users[0]; + if (isAChildEvent && childEventAssignee.id != ctx.user.id) { + return false; + } + return true; + }); type EventTypeGroup = { teamId?: number | null;