Skip to content

Commit cd962f5

Browse files
authored
Merge pull request dubinc#2407 from dubinc/update-partners-import
Update partners import script
2 parents 5ff8a24 + 3af5e34 commit cd962f5

2 files changed

Lines changed: 31 additions & 5 deletions

File tree

apps/web/lib/api/partners/create-and-enroll-partner.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export const createAndEnrollPartner = async ({
3030
tenantId,
3131
status = "approved",
3232
skipEnrollmentCheck = false,
33+
enrolledAt,
3334
}: {
3435
program: Pick<
3536
ProgramProps,
@@ -46,6 +47,7 @@ export const createAndEnrollPartner = async ({
4647
tenantId?: string;
4748
status?: ProgramEnrollmentStatus;
4849
skipEnrollmentCheck?: boolean;
50+
enrolledAt?: Date;
4951
}) => {
5052
if (!skipEnrollmentCheck && partner.email) {
5153
const programEnrollment = await prisma.programEnrollment.findFirst({
@@ -107,6 +109,9 @@ export const createAndEnrollPartner = async ({
107109
discountId !== program.defaultDiscountId && {
108110
discountId,
109111
}),
112+
...(enrolledAt && {
113+
createdAt: enrolledAt,
114+
}),
110115
},
111116
},
112117
};

apps/web/scripts/partners/import-partners.ts

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { prisma } from "@dub/prisma";
2+
import { nanoid } from "@dub/utils";
3+
import slugify from "@sindresorhus/slugify";
24
import "dotenv-flow/config";
35
import * as fs from "fs";
46
import * as Papa from "papaparse";
@@ -7,19 +9,35 @@ import { createPartnerLink } from "../../lib/api/partners/create-partner-link";
79

810
const programId = "xxx";
911
const userId = "xxx";
10-
const partnersToImport: { email: string; slug: string }[] = [];
12+
const partnersToImport: { email: string; slug: string; enrolledAt: Date }[] =
13+
[];
1114

1215
async function main() {
1316
Papa.parse(fs.createReadStream("affiliates.csv", "utf-8"), {
1417
header: true,
1518
skipEmptyLines: true,
16-
step: (result: { data: { email: string; slug: string } }) => {
19+
step: (result: {
20+
data: { payment_email?: string; date_registered: string };
21+
}) => {
22+
const email = result.data.payment_email;
23+
if (!email) {
24+
return;
25+
}
26+
27+
let slug = slugify(email.split("@")[0]);
28+
// check if slug is already used by another partner in partnersToImport
29+
while (partnersToImport.some((partner) => partner.slug === slug)) {
30+
slug = `${slug}-${nanoid(4).toLowerCase()}`;
31+
}
32+
1733
partnersToImport.push({
18-
email: result.data.email,
19-
slug: result.data.slug.slice(1),
34+
email,
35+
slug,
36+
enrolledAt: new Date(result.data.date_registered),
2037
});
2138
},
2239
complete: async () => {
40+
console.table(partnersToImport);
2341
const program = await prisma.program.findUniqueOrThrow({
2442
where: {
2543
id: programId,
@@ -57,9 +75,12 @@ async function main() {
5775
link: partnerLink,
5876
workspace: program.workspace,
5977
partner: partnerToCreate,
78+
enrolledAt: partner.enrolledAt,
6079
});
6180

62-
console.log(enrolledPartner);
81+
console.log(
82+
`Created and enrolled partner ${enrolledPartner.email} with link ${enrolledPartner?.links?.[0]?.shortLink}`,
83+
);
6384
}
6485
},
6586
});

0 commit comments

Comments
 (0)