From 6e0f0e487bac1d5cb04bbd702e76f8fa5401d8ff Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Wed, 1 Feb 2023 09:32:39 +0100 Subject: [PATCH] :card_file_box: Remove list types from db schema --- .../procedures/subscribeWebhookProcedure.ts | 9 ++++++- apps/builder/src/pages/api/auth/adapter.ts | 1 + apps/builder/src/pages/api/users/[userId].ts | 10 +++++-- .../steps/[stepId]/subscribeWebhook.ts | 9 ++++++- .../blocks/[blockId]/subscribeWebhook.ts | 9 ++++++- .../pages/api/typebots/[typebotId]/results.ts | 1 + .../migration.sql | 26 +++++++++++++++++++ packages/db/prisma/schema.prisma | 14 +++++----- packages/utils/playwright/databaseActions.ts | 17 +++++++++--- packages/utils/playwright/databaseSetup.ts | 8 +++++- 10 files changed, 88 insertions(+), 16 deletions(-) create mode 100644 packages/db/prisma/migrations/20230201082042_remove_scalar_list_types/migration.sql diff --git a/apps/builder/src/features/blocks/integrations/webhook/api/procedures/subscribeWebhookProcedure.ts b/apps/builder/src/features/blocks/integrations/webhook/api/procedures/subscribeWebhookProcedure.ts index f9c6bb7d7..89beb49d3 100644 --- a/apps/builder/src/features/blocks/integrations/webhook/api/procedures/subscribeWebhookProcedure.ts +++ b/apps/builder/src/features/blocks/integrations/webhook/api/procedures/subscribeWebhookProcedure.ts @@ -54,7 +54,14 @@ export const subscribeWebhookProcedure = authenticatedProcedure await prisma.webhook.upsert({ where: { id: webhookBlock.webhookId }, update: { url, body: '{{state}}', method: 'POST' }, - create: { url, body: '{{state}}', method: 'POST', typebotId }, + create: { + url, + body: '{{state}}', + method: 'POST', + typebotId, + headers: [], + queryParams: [], + }, }) return { diff --git a/apps/builder/src/pages/api/auth/adapter.ts b/apps/builder/src/pages/api/auth/adapter.ts index 2bfb9027b..831c46527 100644 --- a/apps/builder/src/pages/api/auth/adapter.ts +++ b/apps/builder/src/pages/api/auth/adapter.ts @@ -49,6 +49,7 @@ export function CustomAdapter(p: PrismaClient): Adapter { }, }, }, + onboardingCategories: [], }, }) if (process.env.USER_CREATED_WEBHOOK_URL) diff --git a/apps/builder/src/pages/api/users/[userId].ts b/apps/builder/src/pages/api/users/[userId].ts index e41d8dfd7..eab9c30be 100644 --- a/apps/builder/src/pages/api/users/[userId].ts +++ b/apps/builder/src/pages/api/users/[userId].ts @@ -2,6 +2,7 @@ import prisma from '@/lib/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { getAuthenticatedUser } from '@/features/auth/api' import { methodNotAllowed, notAuthenticated } from 'utils/api' +import { User } from 'db' const handler = async (req: NextApiRequest, res: NextApiResponse) => { const user = await getAuthenticatedUser(req) @@ -9,10 +10,15 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => { const id = req.query.userId as string if (req.method === 'PUT') { - const data = typeof req.body === 'string' ? JSON.parse(req.body) : req.body + const data = ( + typeof req.body === 'string' ? JSON.parse(req.body) : req.body + ) as User const typebots = await prisma.user.update({ where: { id }, - data, + data: { + ...data, + onboardingCategories: data.onboardingCategories ?? [], + }, }) return res.send({ typebots }) } diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/steps/[stepId]/subscribeWebhook.ts b/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/steps/[stepId]/subscribeWebhook.ts index 43bfb1f55..af58aab68 100644 --- a/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/steps/[stepId]/subscribeWebhook.ts +++ b/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/steps/[stepId]/subscribeWebhook.ts @@ -30,7 +30,14 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => { await prisma.webhook.upsert({ where: { id: webhookId }, update: { url, body: '{{state}}', method: 'POST' }, - create: { url, body: '{{state}}', method: 'POST', typebotId }, + create: { + url, + body: '{{state}}', + method: 'POST', + typebotId, + headers: [], + queryParams: [], + }, }) return res.send({ message: 'success' }) diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/subscribeWebhook.ts b/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/subscribeWebhook.ts index f51b7ccc3..443f87e5d 100644 --- a/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/subscribeWebhook.ts +++ b/apps/viewer/src/pages/api/typebots/[typebotId]/blocks/[blockId]/subscribeWebhook.ts @@ -29,7 +29,14 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => { await prisma.webhook.upsert({ where: { id: webhookId }, update: { url, body: '{{state}}', method: 'POST' }, - create: { url, body: '{{state}}', method: 'POST', typebotId }, + create: { + url, + body: '{{state}}', + method: 'POST', + typebotId, + headers: [], + queryParams: [], + }, }) return res.send({ message: 'success' }) diff --git a/apps/viewer/src/pages/api/typebots/[typebotId]/results.ts b/apps/viewer/src/pages/api/typebots/[typebotId]/results.ts index 7ceb517c6..d2972f44a 100644 --- a/apps/viewer/src/pages/api/typebots/[typebotId]/results.ts +++ b/apps/viewer/src/pages/api/typebots/[typebotId]/results.ts @@ -32,6 +32,7 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => { data: { typebotId, isCompleted: false, + variables: [], }, }) res.send({ result }) diff --git a/packages/db/prisma/migrations/20230201082042_remove_scalar_list_types/migration.sql b/packages/db/prisma/migrations/20230201082042_remove_scalar_list_types/migration.sql new file mode 100644 index 000000000..51e6ac1f0 --- /dev/null +++ b/packages/db/prisma/migrations/20230201082042_remove_scalar_list_types/migration.sql @@ -0,0 +1,26 @@ +ALTER TABLE + "PublicTypebot" +ALTER COLUMN + variables TYPE JSONB USING array_to_json(variables); + +ALTER TABLE + "Result" +ALTER COLUMN + variables TYPE JSONB USING array_to_json(variables); + +ALTER TABLE + "Typebot" +ALTER COLUMN + variables TYPE JSONB USING array_to_json(variables); + +ALTER TABLE + "User" +ALTER COLUMN + "onboardingCategories" TYPE JSONB USING array_to_json("onboardingCategories"); + +ALTER TABLE + "Webhook" +ALTER COLUMN + "queryParams" TYPE JSONB USING array_to_json("queryParams"), +ALTER COLUMN + "headers" TYPE JSONB USING array_to_json("headers"); \ No newline at end of file diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index e885818cc..cb9d7afec 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -46,9 +46,9 @@ model User { emailVerified DateTime? image String? company String? - onboardingCategories String[] + onboardingCategories Json graphNavigation GraphNavigation? - preferredAppAppearance String? + preferredAppAppearance String? accounts Account[] apiTokens ApiToken[] CollaboratorsOnTypebots CollaboratorsOnTypebots[] @@ -157,7 +157,7 @@ model Typebot { name String folderId String? groups Json - variables Json[] + variables Json edges Json theme Json settings Json @@ -204,7 +204,7 @@ model PublicTypebot { updatedAt DateTime @default(now()) @updatedAt typebotId String @unique groups Json - variables Json[] + variables Json edges Json theme Json settings Json @@ -216,7 +216,7 @@ model Result { createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @updatedAt typebotId String - variables Json[] + variables Json isCompleted Boolean hasStarted Boolean? isArchived Boolean? @default(false) @@ -266,8 +266,8 @@ model Webhook { id String @id @default(cuid()) url String? method String - queryParams Json[] - headers Json[] + queryParams Json + headers Json body String? typebotId String typebot Typebot @relation(fields: [typebotId], references: [id], onDelete: Cascade) diff --git a/packages/utils/playwright/databaseActions.ts b/packages/utils/playwright/databaseActions.ts index 0abcbd14b..67b33907b 100644 --- a/packages/utils/playwright/databaseActions.ts +++ b/packages/utils/playwright/databaseActions.ts @@ -41,7 +41,8 @@ export const injectFakeResults = async ({ : new Date(), isCompleted: rand > 0.5, hasStarted: true, - } + variables: [], + } satisfies Prisma.ResultCreateManyInput }), ], }) @@ -135,7 +136,10 @@ export const createWorkspaces = async (workspaces: Partial[]) => { export const updateUser = (data: Partial) => prisma.user.update({ - data, + data: { + ...data, + onboardingCategories: data.onboardingCategories ?? [], + }, where: { id: userId, }, @@ -149,7 +153,14 @@ export const createWebhook = async ( await prisma.webhook.delete({ where: { id: 'webhook1' } }) } catch {} return prisma.webhook.create({ - data: { method: 'GET', typebotId, id: 'webhook1', ...webhookProps }, + data: { + method: 'GET', + typebotId, + id: 'webhook1', + ...webhookProps, + queryParams: webhookProps?.queryParams ?? [], + headers: webhookProps?.headers ?? [], + }, }) } diff --git a/packages/utils/playwright/databaseSetup.ts b/packages/utils/playwright/databaseSetup.ts index 0769f2568..af17d1eb4 100644 --- a/packages/utils/playwright/databaseSetup.ts +++ b/packages/utils/playwright/databaseSetup.ts @@ -58,6 +58,7 @@ export const setupUsers = async () => { email: 'user@email.com', name: 'John Doe', graphNavigation: GraphNavigation.TRACKPAD, + onboardingCategories: [], apiTokens: { createMany: { data: [ @@ -82,7 +83,12 @@ export const setupUsers = async () => { }, }) await prisma.user.create({ - data: { id: otherUserId, email: 'other-user@email.com', name: 'James Doe' }, + data: { + id: otherUserId, + email: 'other-user@email.com', + name: 'James Doe', + onboardingCategories: [], + }, }) return prisma.memberInWorkspace.createMany({ data: [