From 2fd8d24204bccece053f2a23fff28e98f3e84c81 Mon Sep 17 00:00:00 2001 From: Keith Williams Date: Thu, 9 Jan 2025 13:42:26 -0300 Subject: [PATCH] perf: Improve routing insights view (#18557) * perf: Improve routing insights view * fix: remove old join --------- Co-authored-by: Eunjae Lee Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com> --- .../migration.sql | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 packages/prisma/migrations/20250109145213_update_routing_form_response/migration.sql diff --git a/packages/prisma/migrations/20250109145213_update_routing_form_response/migration.sql b/packages/prisma/migrations/20250109145213_update_routing_form_response/migration.sql new file mode 100644 index 0000000000..cea8495fc7 --- /dev/null +++ b/packages/prisma/migrations/20250109145213_update_routing_form_response/migration.sql @@ -0,0 +1,66 @@ +CREATE OR REPLACE VIEW "RoutingFormResponse" AS +WITH assignment_reasons_agg AS ( + SELECT + ar."bookingId", + json_agg( + json_build_object( + 'reasonString', ar."reasonString" + ) + ) as reasons + FROM "AssignmentReason" ar + GROUP BY ar."bookingId" +) +SELECT + r.id, + r.response, + ( + SELECT jsonb_object_agg( + key, + CASE + WHEN jsonb_typeof(value->'value') = 'string' + THEN jsonb_build_object( + 'label', value->'label', + 'value', lower((value->>'value')::text) + ) + ELSE value + END + ) + FROM jsonb_each(r.response::jsonb) + ) as "responseLowercase", + f.id as "formId", + f.name as "formName", + f."teamId" as "formTeamId", + f."userId" as "formUserId", + b.uid as "bookingUid", + b.status as "bookingStatus", + CASE b.status + WHEN 'accepted' THEN 1 + WHEN 'pending' THEN 2 + WHEN 'awaiting_host' THEN 3 + WHEN 'cancelled' THEN 4 + WHEN 'rejected' THEN 5 + END as "bookingStatusOrder", + b."createdAt" as "bookingCreatedAt", + b."startTime" as "bookingStartTime", + b."endTime" as "bookingEndTime", + (SELECT + json_agg( + json_build_object( + 'name', a.name, 'timeZone', a."timeZone", 'email', a.email + ) + ) + FROM "Attendee" a + WHERE "a"."bookingId" = b.id + ) as "bookingAttendees", + u.id as "bookingUserId", + u.name as "bookingUserName", + u.email as "bookingUserEmail", + u."avatarUrl" as "bookingUserAvatarUrl", + COALESCE((ar.reasons->0)->>'reasonString', '') as "bookingAssignmentReason", + LOWER(COALESCE((ar.reasons->0)->>'reasonString', '')) as "bookingAssignmentReasonLowercase", + r."createdAt" as "createdAt" +FROM "App_RoutingForms_FormResponse" r +LEFT JOIN "App_RoutingForms_Form" f ON r."formId" = f.id +LEFT JOIN "Booking" b ON r."routedToBookingUid" = b.uid +LEFT JOIN "users" u ON b."userId" = u.id +LEFT JOIN assignment_reasons_agg ar ON b.id = ar."bookingId";