From 17201334b607ff9e83980280c7e819638405a12c Mon Sep 17 00:00:00 2001 From: Keith Williams Date: Mon, 9 Sep 2024 15:05:38 -0300 Subject: [PATCH] Modified the view to use UNION for user/team bookings (#16558) --- packages/features/insights/server/events.ts | 6 +- .../features/insights/server/trpc-router.ts | 24 ++++--- .../migration.sql | 71 +++++++++++++++++++ packages/prisma/schema.prisma | 1 + 4 files changed, 92 insertions(+), 10 deletions(-) create mode 100644 packages/prisma/migrations/20240909162522_union_insights_data/migration.sql diff --git a/packages/features/insights/server/events.ts b/packages/features/insights/server/events.ts index 4d35e53a7a..1dcb92d5b7 100644 --- a/packages/features/insights/server/events.ts +++ b/packages/features/insights/server/events.ts @@ -363,12 +363,13 @@ class EventsInsights { userId: { in: userIdsFromOrg, }, - teamId: null, + isTeamBooking: false, }, { teamId: { in: [organizationId, ...teamsFromOrg.map((t) => t.id)], }, + isTeamBooking: true, }, ], }; @@ -390,12 +391,13 @@ class EventsInsights { OR: [ { teamId, + isTeamBooking: true, }, { userId: { in: userIdsFromTeam, }, - teamId: null, + isTeamBooking: false, }, ], }; diff --git a/packages/features/insights/server/trpc-router.ts b/packages/features/insights/server/trpc-router.ts index 8cd051ae98..e93b14c502 100644 --- a/packages/features/insights/server/trpc-router.ts +++ b/packages/features/insights/server/trpc-router.ts @@ -213,12 +213,13 @@ export const insightsRouter = router({ userId: { in: userIdsFromOrg, }, - teamId: null, + isTeamBooking: false, }, { teamId: { in: [ctx.user.organizationId, ...teamsFromOrg.map((t) => t.id)], }, + isTeamBooking: true, }, ], }; @@ -240,12 +241,13 @@ export const insightsRouter = router({ OR: [ { teamId, + isTeamBooking: true, }, { userId: { in: userIdsFromTeam, }, - teamId: null, + isTeamBooking: false, }, ], }; @@ -438,12 +440,13 @@ export const insightsRouter = router({ userId: { in: userIdsFromOrg, }, - teamId: null, + isTeamBooking: false, }, { teamId: { in: [ctx.user.organizationId, ...teamsFromOrg.map((t) => t.id)], }, + isTeamBooking: true, }, ], }; @@ -465,12 +468,13 @@ export const insightsRouter = router({ OR: [ { teamId, + isTeamBooking: true, }, { userId: { in: userIdsFromTeams, }, - teamId: null, + isTeamBooking: false, }, ], }; @@ -614,12 +618,13 @@ export const insightsRouter = router({ userId: { in: userIdsFromOrg, }, - teamId: null, + isTeamBooking: false, }, { teamId: { in: [ctx.user.organizationId, ...teamsFromOrg.map((t) => t.id)], }, + isTeamBooking: true, }, ], }; @@ -642,12 +647,13 @@ export const insightsRouter = router({ OR: [ { teamId, + isTeamBooking: true, }, { userId: { in: userIdsFromTeams, }, - teamId: null, + isTeamBooking: false, }, ], }; @@ -815,10 +821,11 @@ export const insightsRouter = router({ teamId: { in: [ctx.user?.organizationId, ...teamsFromOrg.map((t) => t.id)], }, + isTeamBooking: true, }, { userId: ctx.user?.id, - teamId: null, + isTeamBooking: false, }, ], }; @@ -841,12 +848,13 @@ export const insightsRouter = router({ OR: [ { teamId, + isTeamBooking: true, }, { userId: { in: userIdsFromTeams, }, - teamId: null, + isTeamBooking: false, }, ], }; diff --git a/packages/prisma/migrations/20240909162522_union_insights_data/migration.sql b/packages/prisma/migrations/20240909162522_union_insights_data/migration.sql new file mode 100644 index 0000000000..87b9e42030 --- /dev/null +++ b/packages/prisma/migrations/20240909162522_union_insights_data/migration.sql @@ -0,0 +1,71 @@ +CREATE OR REPLACE VIEW public."BookingTimeStatus" +AS +SELECT + "Booking".id, + "Booking".uid, + "Booking"."eventTypeId", + "Booking".title, + "Booking".description, + "Booking"."startTime", + "Booking"."endTime", + "Booking"."createdAt", + "Booking".location, + "Booking".paid, + "Booking".status, + "Booking".rescheduled, + "Booking"."userId", + et."teamId", + et.length AS "eventLength", + CASE + WHEN "Booking".rescheduled IS TRUE THEN 'rescheduled'::text + WHEN "Booking".status = 'cancelled'::"BookingStatus" AND "Booking".rescheduled IS NULL THEN 'cancelled'::text + WHEN "Booking"."endTime" < now() THEN 'completed'::text + WHEN "Booking"."endTime" > now() THEN 'uncompleted'::text + ELSE NULL::text + END AS "timeStatus", + et."parentId" AS "eventParentId", + "u"."email" AS "userEmail", + "u"."username" AS "username", + "Booking"."ratingFeedback", + "Booking"."rating", + "Booking"."noShowHost", + false as "isTeamBooking" +FROM "Booking" +LEFT JOIN "EventType" et ON "Booking"."eventTypeId" = et.id +LEFT JOIN users u ON u.id = "Booking"."userId" +WHERE et."teamId" IS NULL +UNION +SELECT + "Booking".id, + "Booking".uid, + "Booking"."eventTypeId", + "Booking".title, + "Booking".description, + "Booking"."startTime", + "Booking"."endTime", + "Booking"."createdAt", + "Booking".location, + "Booking".paid, + "Booking".status, + "Booking".rescheduled, + "Booking"."userId", + et."teamId", + et.length AS "eventLength", + CASE + WHEN "Booking".rescheduled IS TRUE THEN 'rescheduled'::text + WHEN "Booking".status = 'cancelled'::"BookingStatus" AND "Booking".rescheduled IS NULL THEN 'cancelled'::text + WHEN "Booking"."endTime" < now() THEN 'completed'::text + WHEN "Booking"."endTime" > now() THEN 'uncompleted'::text + ELSE NULL::text + END AS "timeStatus", + et."parentId" AS "eventParentId", + "u"."email" AS "userEmail", + "u"."username" AS "username", + "Booking"."ratingFeedback", + "Booking"."rating", + "Booking"."noShowHost", + true as "isTeamBooking" +FROM "Booking" +LEFT JOIN "EventType" et ON "Booking"."eventTypeId" = et.id +LEFT JOIN users u ON u.id = "Booking"."userId" +WHERE "et"."teamId" IS NOT NULL diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index a7af4dbc7f..7c48c344c0 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -1229,6 +1229,7 @@ view BookingTimeStatus { ratingFeedback String? rating Int? noShowHost Boolean? + isTeamBooking Boolean } model CalendarCache {