Skip to content

Commit 842f8ef

Browse files
committed
🚸 Auto-update typebot if it was migrated while getting it
1 parent 7fd4b33 commit 842f8ef

File tree

5 files changed

+55
-12
lines changed

5 files changed

+55
-12
lines changed

apps/builder/src/features/typebot/api/getTypebot.ts

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
import { TRPCError } from "@trpc/server";
22
import prisma from "@typebot.io/prisma";
3+
import { DbNull } from "@typebot.io/prisma/enum";
34
import { getTypebotAccessRight } from "@typebot.io/typebot/helpers/getTypebotAccessRight";
45
import { isReadTypebotForbidden } from "@typebot.io/typebot/helpers/isReadTypebotForbidden";
56
import { migrateTypebot } from "@typebot.io/typebot/migrations/migrateTypebot";
6-
import { typebotSchema } from "@typebot.io/typebot/schemas/typebot";
7+
import {
8+
type Typebot,
9+
type TypebotV6,
10+
typebotSchema,
11+
} from "@typebot.io/typebot/schemas/typebot";
712
import { z } from "@typebot.io/zod";
813
import { publicProcedure } from "@/helpers/server/trpc";
914

@@ -70,12 +75,47 @@ export const getTypebot = publicProcedure
7075
});
7176

7277
try {
73-
const parsedTypebot = migrateToLatestVersion
74-
? await migrateTypebot(typebotSchema.parse(existingTypebot))
75-
: typebotSchema.parse(existingTypebot);
78+
const { typebot, wasMigrated } = (
79+
migrateToLatestVersion
80+
? await migrateTypebot(typebotSchema.parse(existingTypebot))
81+
: {
82+
typebot: typebotSchema.parse(existingTypebot),
83+
wasMigrated: false,
84+
}
85+
) as
86+
| { typebot: TypebotV6; wasMigrated: true }
87+
| { typebot: Typebot; wasMigrated: false };
88+
89+
if (wasMigrated)
90+
await prisma.typebot.update({
91+
where: {
92+
id: existingTypebot.id,
93+
},
94+
data: {
95+
version: typebot.version,
96+
name: typebot.name,
97+
icon: typebot.icon,
98+
selectedThemeTemplateId: typebot.selectedThemeTemplateId,
99+
events: typebot.events,
100+
groups: typebot.groups,
101+
theme: typebot.theme ? typebot.theme : undefined,
102+
settings: typebot.settings ? typebot.settings : undefined,
103+
folderId: typebot.folderId,
104+
variables: typebot.variables,
105+
edges: typebot.edges,
106+
resultsTablePreferences:
107+
typebot.resultsTablePreferences === null
108+
? DbNull
109+
: typebot.resultsTablePreferences,
110+
publicId: typebot.publicId === null ? null : typebot.publicId,
111+
customDomain: typebot.customDomain,
112+
isClosed: typebot.isClosed,
113+
whatsAppCredentialsId: typebot.whatsAppCredentialsId ?? undefined,
114+
},
115+
});
76116

77117
return {
78-
typebot: parsedTypebot,
118+
typebot,
79119
currentUserMode: getTypebotAccessRight(user, existingTypebot),
80120
};
81121
} catch (err) {

apps/builder/src/features/typebot/api/importTypebot.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ const importingTypebotSchema = z.preprocess(
6969

7070
type ImportingTypebot = z.infer<typeof importingTypebotSchema>;
7171

72-
const migrateImportingTypebot = (
72+
const migrateImportingTypebot = async (
7373
typebot: ImportingTypebot,
7474
): Promise<TypebotV6> => {
7575
const fullTypebot = {
@@ -87,7 +87,7 @@ const migrateImportingTypebot = (
8787
publicId: null,
8888
riskLevel: null,
8989
} satisfies Typebot;
90-
return migrateTypebot(fullTypebot);
90+
return (await migrateTypebot(fullTypebot)).typebot;
9191
};
9292

9393
export const importTypebot = authenticatedProcedure

apps/builder/src/features/typebot/api/updateTypebot.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ export const updateTypebot = authenticatedProcedure
216216
},
217217
});
218218

219-
const migratedTypebot = await migrateTypebot(
219+
const { typebot: migratedTypebot } = await migrateTypebot(
220220
typebotSchema.parse(newTypebot),
221221
);
222222

packages/scripts/src/inspectTypebot.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ const inspectTypebot = async () => {
2828
const typebot = await prisma.typebot.findFirst({
2929
where,
3030
select: {
31+
version: true,
3132
id: true,
3233
name: true,
3334
riskLevel: true,

packages/typebot/src/migrations/migrateTypebot.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@ import type { Typebot, TypebotV6 } from "../schemas/typebot";
55
import { migrateTypebotFromV3ToV4 } from "./migrateTypebotFromV3ToV4";
66
import { migrateTypebotFromV5ToV6 } from "./migrateTypebotFromV5ToV6";
77

8-
export const migrateTypebot = async (typebot: Typebot): Promise<TypebotV6> => {
9-
if (isTypebotAtLeastV6(typebot)) return typebot;
8+
export const migrateTypebot = async (
9+
typebot: Typebot,
10+
): Promise<{ typebot: TypebotV6; wasMigrated: boolean }> => {
11+
if (isTypebotAtLeastV6(typebot)) return { typebot, wasMigrated: false };
1012
let migratedTypebot: any = typebot;
1113
if (migratedTypebot.version === "3")
1214
migratedTypebot = await migrateTypebotFromV3ToV4(typebot);
1315
if (migratedTypebot.version === "4" || migratedTypebot.version === "5")
14-
migratedTypebot = migrateTypebotFromV5ToV6(migratedTypebot);
15-
return migratedTypebot;
16+
migratedTypebot = await migrateTypebotFromV5ToV6(migratedTypebot);
17+
return { typebot: migratedTypebot, wasMigrated: true };
1618
};
1719

1820
export const migratePublicTypebot = async (

0 commit comments

Comments
 (0)