diff --git a/apps/web/app/(ee)/admin.dub.co/(dashboard)/commissions/page.tsx b/apps/web/app/(ee)/admin.dub.co/(dashboard)/commissions/page.tsx index ae454caaaad..7a109508cb1 100644 --- a/apps/web/app/(ee)/admin.dub.co/(dashboard)/commissions/page.tsx +++ b/apps/web/app/(ee)/admin.dub.co/(dashboard)/commissions/page.tsx @@ -19,6 +19,7 @@ import { currencyFormatter, DUB_FOUNDING_DATE, fetcher, + getDomainWithoutWWW, OG_AVATAR_URL, } from "@dub/utils"; import NumberFlow from "@number-flow/react"; @@ -41,6 +42,7 @@ function CommissionsPageClient() { programs: { id: string; name: string; + url: string; logo: string; commissions: number; fees: number; @@ -187,7 +189,7 @@ function CommissionsPageClient() { id: "program", header: "Program", cell: ({ row }) => ( -
+
{row.original.name} - {row.original.name} + {row.original.name}• + + {getDomainWithoutWWW(row.original.url)} +
), meta: { diff --git a/apps/web/app/(ee)/api/admin/commissions/get-top-program-by-commissions.ts b/apps/web/app/(ee)/api/admin/commissions/get-top-program-by-commissions.ts index 0f6586f0bb7..11756acbf88 100644 --- a/apps/web/app/(ee)/api/admin/commissions/get-top-program-by-commissions.ts +++ b/apps/web/app/(ee)/api/admin/commissions/get-top-program-by-commissions.ts @@ -32,7 +32,7 @@ export async function getTopProgramsByCommissions({ earnings: "desc", }, }, - take: 50, + take: 150, }); const topPrograms = await prisma.program.findMany({ @@ -40,6 +40,11 @@ export async function getTopProgramsByCommissions({ id: { in: programCommissions.map(({ programId }) => programId), }, + NOT: { + slug: { + endsWith: "-staging", + }, + }, }, include: { workspace: { @@ -66,7 +71,8 @@ export async function getTopProgramsByCommissions({ fees: commissions * payoutFee, }; }) - .filter(Boolean); + .filter(Boolean) + .slice(0, 100); return topProgramsWithCommissions; } diff --git a/apps/web/app/(ee)/api/stripe/webhook/customer-subscription-deleted.ts b/apps/web/app/(ee)/api/stripe/webhook/customer-subscription-deleted.ts index 02fc6b61d64..7e9bec81d9a 100644 --- a/apps/web/app/(ee)/api/stripe/webhook/customer-subscription-deleted.ts +++ b/apps/web/app/(ee)/api/stripe/webhook/customer-subscription-deleted.ts @@ -253,7 +253,8 @@ export async function customerSubscriptionDeleted( } const owner = workspaceUsers[0]; - if (owner.email && losesAdvancedFeatures) { + + if (owner?.email && losesAdvancedFeatures) { await sendEmail({ to: owner.email, subject: "Your Advanced plan features have been removed", diff --git a/packages/prisma/schema/network.prisma b/packages/prisma/schema/network.prisma index a2c988e5360..03fd940bb97 100644 --- a/packages/prisma/schema/network.prisma +++ b/packages/prisma/schema/network.prisma @@ -54,7 +54,7 @@ model DiscoveredPartner { program Program @relation(fields: [programId], references: [id], onDelete: Cascade) partner Partner @relation(fields: [partnerId], references: [id], onDelete: Cascade) - programEnrollment ProgramEnrollment? @relation(fields: [programId, partnerId], references: [programId, partnerId]) + programEnrollment ProgramEnrollment? @relation(fields: [programId, partnerId], references: [programId, partnerId], onDelete: Cascade) @@unique([programId, partnerId]) @@index(partnerId) diff --git a/packages/prisma/schema/program.prisma b/packages/prisma/schema/program.prisma index ec54fdebeec..8024f32618b 100644 --- a/packages/prisma/schema/program.prisma +++ b/packages/prisma/schema/program.prisma @@ -90,9 +90,8 @@ model Program { sourceFraudEvents FraudEvent[] @relation("SourceFraudEvents") fraudAlerts FraudAlert[] referrals PartnerReferral[] - - partnerTags PartnerTag[] - programPartnerTags ProgramPartnerTag[] + partnerTags PartnerTag[] + programPartnerTags ProgramPartnerTag[] @@index(workspaceId) @@index(addedToMarketplaceAt) @@ -138,25 +137,25 @@ model ProgramEnrollment { bannedAt DateTime? bannedReason PartnerBannedReason? - partner Partner @relation(fields: [partnerId], references: [id], onUpdate: Cascade, onDelete: Cascade) - program Program @relation(fields: [programId], references: [id], onUpdate: Cascade, onDelete: Cascade) - links Link[] - customers Customer[] - partnerGroup PartnerGroup? @relation(fields: [groupId], references: [id]) - application ProgramApplication? @relation(fields: [applicationId], references: [id]) - clickReward Reward? @relation("ClickRewardEnrollments", fields: [clickRewardId], references: [id]) - leadReward Reward? @relation("LeadRewardEnrollments", fields: [leadRewardId], references: [id]) - saleReward Reward? @relation("SaleRewardEnrollments", fields: [saleRewardId], references: [id]) - discount Discount? @relation(fields: [discountId], references: [id]) - bountySubmissions BountySubmission[] - discountCodes DiscountCode[] - commissions Commission[] - payouts Payout[] - messages Message[] - fraudEventGroups FraudEventGroup[] - referrals PartnerReferral[] - fraudAlerts FraudAlert[] - discoveredPartner DiscoveredPartner? + partner Partner @relation(fields: [partnerId], references: [id], onUpdate: Cascade, onDelete: Cascade) + program Program @relation(fields: [programId], references: [id], onUpdate: Cascade, onDelete: Cascade) + links Link[] + customers Customer[] + partnerGroup PartnerGroup? @relation(fields: [groupId], references: [id]) + application ProgramApplication? @relation(fields: [applicationId], references: [id]) + clickReward Reward? @relation("ClickRewardEnrollments", fields: [clickRewardId], references: [id]) + leadReward Reward? @relation("LeadRewardEnrollments", fields: [leadRewardId], references: [id]) + saleReward Reward? @relation("SaleRewardEnrollments", fields: [saleRewardId], references: [id]) + discount Discount? @relation(fields: [discountId], references: [id]) + bountySubmissions BountySubmission[] + discountCodes DiscountCode[] + commissions Commission[] + payouts Payout[] + messages Message[] + fraudEventGroups FraudEventGroup[] + referrals PartnerReferral[] + fraudAlerts FraudAlert[] + discoveredPartner DiscoveredPartner? programPartnerTags ProgramPartnerTag[] // unique constraints