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 }) => (
-
+
),
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