From 21694c039aeba1c947eb3a2dac11e9905d6da074 Mon Sep 17 00:00:00 2001 From: Eunjae Lee Date: Tue, 14 Jan 2025 16:28:39 +0100 Subject: [PATCH] perf: improve routing insights view (2) (#18566) --- .../migration.sql | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 packages/prisma/migrations/20250109161330_update_routing_form_response/migration.sql diff --git a/packages/prisma/migrations/20250109161330_update_routing_form_response/migration.sql b/packages/prisma/migrations/20250109161330_update_routing_form_response/migration.sql new file mode 100644 index 0000000000..345e77eca9 --- /dev/null +++ b/packages/prisma/migrations/20250109161330_update_routing_form_response/migration.sql @@ -0,0 +1,72 @@ +CREATE OR REPLACE VIEW "RoutingFormResponse" AS +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( + ( + SELECT + ar."reasonString" + FROM "AssignmentReason" ar + WHERE ar."bookingId" = b.id + LIMIT 1 + ), + '' + ) as "bookingAssignmentReason", + COALESCE( + ( + SELECT + LOWER(ar."reasonString") + FROM "AssignmentReason" ar + WHERE ar."bookingId" = b.id + LIMIT 1 + ), + '' + ) 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