From e068955fbffbd865610e7b80f24b144f9b1bbf32 Mon Sep 17 00:00:00 2001 From: Johannes <72809645+jobenjada@users.noreply.github.com> Date: Thu, 16 Oct 2025 08:34:04 -0700 Subject: [PATCH] fix: removes unused migration and language flag from the codebase (#6704) --- apps/web/lib/environment/service.ts | 6 -- .../modules/ee/contacts/lib/contacts.test.ts | 45 -------------- .../migration.ts | 60 ------------------- 3 files changed, 111 deletions(-) delete mode 100644 packages/database/migration/20251016000000_add_language_attribute_key/migration.ts diff --git a/apps/web/lib/environment/service.ts b/apps/web/lib/environment/service.ts index 840726442a..044d9e10a5 100644 --- a/apps/web/lib/environment/service.ts +++ b/apps/web/lib/environment/service.ts @@ -168,12 +168,6 @@ export const createEnvironment = async ( description: "Your contact's last name", type: "default", }, - { - key: "language", - name: "Language", - description: "The language preference of a contact", - type: "default", - }, ], }, }, diff --git a/apps/web/modules/ee/contacts/lib/contacts.test.ts b/apps/web/modules/ee/contacts/lib/contacts.test.ts index 8fa8d0e8de..b32374a844 100644 --- a/apps/web/modules/ee/contacts/lib/contacts.test.ts +++ b/apps/web/modules/ee/contacts/lib/contacts.test.ts @@ -319,51 +319,6 @@ describe("createContactsFromCSV", () => { createContactsFromCSV(csvData, environmentId, "skip", { email: "email", name: "name" }) ).rejects.toThrow(genericError); }); - - test("handles language attribute key like other default attributes", async () => { - vi.mocked(prisma.contact.findMany).mockResolvedValue([]); - vi.mocked(prisma.contactAttribute.findMany).mockResolvedValue([]); - vi.mocked(prisma.contactAttributeKey.findMany).mockResolvedValue([ - { key: "email", id: "id-email" }, - { key: "userId", id: "id-userId" }, - { key: "firstName", id: "id-firstName" }, - { key: "lastName", id: "id-lastName" }, - { key: "language", id: "id-language" }, - ] as any); - vi.mocked(prisma.contact.create).mockResolvedValue({ - id: "c1", - environmentId, - createdAt: new Date(), - updatedAt: new Date(), - attributes: [ - { attributeKey: { key: "email" }, value: "john@example.com" }, - { attributeKey: { key: "userId" }, value: "user123" }, - { attributeKey: { key: "firstName" }, value: "John" }, - { attributeKey: { key: "lastName" }, value: "Doe" }, - { attributeKey: { key: "language" }, value: "en" }, - ], - } as any); - const csvData = [ - { - email: "john@example.com", - userId: "user123", - firstName: "John", - lastName: "Doe", - language: "en", - }, - ]; - const result = await createContactsFromCSV(csvData, environmentId, "skip", { - email: "email", - userId: "userId", - firstName: "firstName", - lastName: "lastName", - language: "language", - }); - expect(Array.isArray(result)).toBe(true); - expect(result[0].id).toBe("c1"); - // language attribute key should already exist, no need to create it - expect(prisma.contactAttributeKey.createMany).not.toHaveBeenCalled(); - }); }); describe("buildContactWhereClause", () => { diff --git a/packages/database/migration/20251016000000_add_language_attribute_key/migration.ts b/packages/database/migration/20251016000000_add_language_attribute_key/migration.ts deleted file mode 100644 index 9f49106cd4..0000000000 --- a/packages/database/migration/20251016000000_add_language_attribute_key/migration.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* eslint-disable no-constant-condition -- Required for the while loop */ -/* eslint-disable @typescript-eslint/no-unnecessary-condition -- Required for a while loop here */ -import { createId } from "@paralleldrive/cuid2"; -import { logger } from "@formbricks/logger"; -import type { MigrationScript } from "../../src/scripts/migration-runner"; - -export const addLanguageAttributeKey: MigrationScript = { - type: "data", - id: "add_language_attribute_key_v1", - name: "20251016000000_add_language_attribute_key", - run: async ({ tx }) => { - const BATCH_SIZE = 1000; - let skip = 0; - let totalProcessed = 0; - - logger.info("Starting migration to add language attribute key to environments"); - - while (true) { - // Fetch environments in batches - const environments = await tx.$queryRaw<{ id: string }[]>` - SELECT id FROM "Environment" - LIMIT ${BATCH_SIZE} OFFSET ${skip} - `; - - if (environments.length === 0) { - break; - } - - logger.info(`Processing ${environments.length.toString()} environments`); - - // Process each environment - for (const env of environments) { - // Insert language attribute key if it doesn't exist - await tx.$executeRaw` - INSERT INTO "ContactAttributeKey" ( - "id", "created_at", "updated_at", "key", "name", "description", "type", "isUnique", "environmentId" - ) VALUES ( - ${createId()}, - NOW(), - NOW(), - 'language', - 'Language', - 'The language preference of a contact', - 'default', - false, - ${env.id} - ) - ON CONFLICT ("key", "environmentId") DO NOTHING - `; - } - - totalProcessed += environments.length; - skip += BATCH_SIZE; - - logger.info(`Processed ${totalProcessed.toString()} environments so far`); - } - - logger.info(`Migration completed. Total environments processed: ${totalProcessed.toString()}`); - }, -};