Thanks to visit codestin.com
Credit goes to github.com

Skip to content
36 changes: 19 additions & 17 deletions apps/web/app/(ee)/api/groups/[groupIdOrSlug]/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {
} from "@/lib/zod/schemas/groups";
import { prisma } from "@dub/prisma";
import { APP_DOMAIN_WITH_NGROK, constructURLFromUTMParams } from "@dub/utils";
import { DiscountCode, Prisma } from "@prisma/client";
import { DiscountCode } from "@prisma/client";
import { waitUntil } from "@vercel/functions";
import { NextResponse } from "next/server";

Expand Down Expand Up @@ -94,6 +94,22 @@ export const PATCH = withWorkspace(
}
}

if (additionalLinks) {
// check for duplicate link formats
const linkFormatDomains = additionalLinks.reduce((acc, link) => {
acc.add(link.domain);
return acc;
}, new Set<string>());

if (linkFormatDomains.size !== additionalLinks.length) {
throw new DubApiError({
code: "bad_request",
message:
"Duplicate link formats found. Please make sure all link formats have unique domains.",
});
}
}

// Find the UTM template
const utmTemplate = utmTemplateId
? await prisma.utmTemplate.findUniqueOrThrow({
Expand All @@ -104,20 +120,6 @@ export const PATCH = withWorkspace(
})
: null;

// Deduplicate additionalLinks by domain, keeping the first occurrence
const deduplicatedAdditionalLinks = additionalLinks
? additionalLinks.filter(
(link, index, array) =>
array.findIndex((l) => l.domain === link.domain) === index,
)
: additionalLinks;

const additionalLinksInput = deduplicatedAdditionalLinks
? deduplicatedAdditionalLinks.length > 0
? deduplicatedAdditionalLinks
: Prisma.DbNull
: undefined;

const updatedGroup = await prisma.partnerGroup.update({
where: {
id: group.id,
Expand All @@ -126,10 +128,10 @@ export const PATCH = withWorkspace(
name,
slug,
color,
...(additionalLinksInput && { additionalLinks: additionalLinksInput }),
additionalLinks,
maxPartnerLinks,
utmTemplateId,
linkStructure,
utmTemplateId,
applicationFormData,
landerData,
},
Expand Down
16 changes: 1 addition & 15 deletions apps/web/app/(ee)/api/groups/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import { getDefaultProgramIdOrThrow } from "@/lib/api/programs/get-default-progr
import { parseRequestBody } from "@/lib/api/utils";
import { withWorkspace } from "@/lib/auth";
import {
additionalPartnerLinkSchema,
createGroupSchema,
DEFAULT_PARTNER_GROUP,
getGroupsQuerySchema,
Expand Down Expand Up @@ -117,27 +116,14 @@ export const POST = withWorkspace(
landerData,
} = program.groups[0];

// Deduplicate additionalLinks by domain, keeping the first occurrence
const deduplicatedAdditionalLinks =
additionalLinks && Array.isArray(additionalLinks)
? (
additionalLinks as z.infer<typeof additionalPartnerLinkSchema>[]
).filter(
(link, index, array) =>
array.findIndex((l) => l.domain === link.domain) === index,
)
: additionalLinks;

return await tx.partnerGroup.create({
data: {
id: createId({ prefix: "grp_" }),
programId,
name,
slug,
color,
...(deduplicatedAdditionalLinks && {
additionalLinks: deduplicatedAdditionalLinks,
}),
...(additionalLinks && { additionalLinks }),
...(maxPartnerLinks && { maxPartnerLinks }),
...(linkStructure && { linkStructure }),
...(applicationFormData && { applicationFormData }),
Expand Down
Loading