From ccac40a17b7c17869b17a36371f00595ca486f32 Mon Sep 17 00:00:00 2001 From: Steven Tey Date: Fri, 1 Aug 2025 21:42:26 -0700 Subject: [PATCH] Improve payout descriptions --- apps/web/app/(ee)/api/cron/payouts/create-payout.ts | 3 ++- .../(ee)/api/cron/payouts/process/split-payouts.ts | 4 ++-- .../api/stripe/connect/webhook/balance-available.ts | 5 +++-- .../partners/update-partner-payout-settings.ts | 7 +++++++ apps/web/lib/partners/create-stripe-transfer.ts | 12 +++++++++--- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/apps/web/app/(ee)/api/cron/payouts/create-payout.ts b/apps/web/app/(ee)/api/cron/payouts/create-payout.ts index 0e8815507cd..61e8f4f85f3 100644 --- a/apps/web/app/(ee)/api/cron/payouts/create-payout.ts +++ b/apps/web/app/(ee)/api/cron/payouts/create-payout.ts @@ -21,6 +21,7 @@ export const createPayout = async ({ status: true, program: { select: { + name: true, holdingPeriodDays: true, }, }, @@ -153,7 +154,7 @@ export const createPayout = async ({ partnerId, periodStart, periodEnd, - description: "Dub Partners payout", + description: `Dub Partners payout (${programEnrollment.program.name})`, }, }); } diff --git a/apps/web/app/(ee)/api/cron/payouts/process/split-payouts.ts b/apps/web/app/(ee)/api/cron/payouts/process/split-payouts.ts index 5910191c828..e5ad661ec70 100644 --- a/apps/web/app/(ee)/api/cron/payouts/process/split-payouts.ts +++ b/apps/web/app/(ee)/api/cron/payouts/process/split-payouts.ts @@ -12,7 +12,7 @@ export async function splitPayouts({ cutoffPeriod, excludedPayoutIds, }: { - program: Pick; + program: Pick; cutoffPeriod: CUTOFF_PERIOD_TYPES; excludedPayoutIds?: string[]; }) { @@ -100,7 +100,7 @@ export async function splitPayouts({ (total, commission) => total + commission.earnings, 0, ), - description: "Dub Partners payout", + description: `Dub Partners payout (${program.name})`, }, }); diff --git a/apps/web/app/(ee)/api/stripe/connect/webhook/balance-available.ts b/apps/web/app/(ee)/api/stripe/connect/webhook/balance-available.ts index 6debc7c324c..8ae2804fe6b 100644 --- a/apps/web/app/(ee)/api/stripe/connect/webhook/balance-available.ts +++ b/apps/web/app/(ee)/api/stripe/connect/webhook/balance-available.ts @@ -2,7 +2,7 @@ import { stripe } from "@/lib/stripe"; import { sendEmail } from "@dub/email"; import PartnerPayoutWithdrawalInitiated from "@dub/email/templates/partner-payout-withdrawal-initiated"; import { prisma } from "@dub/prisma"; -import { currencyFormatter } from "@dub/utils"; +import { currencyFormatter, formatDate } from "@dub/utils"; import Stripe from "stripe"; export async function balanceAvailable(event: Stripe.Event) { @@ -84,7 +84,8 @@ export async function balanceAvailable(event: Stripe.Event) { { amount: availableBalance, currency, - description: "Dub Partners payout", + // example: "Dub Partners auto-withdrawal (Aug 1, 2025)" + description: `Dub Partners auto-withdrawal (${formatDate(new Date(), { month: "short" })})`, method: "standard", }, { diff --git a/apps/web/lib/actions/partners/update-partner-payout-settings.ts b/apps/web/lib/actions/partners/update-partner-payout-settings.ts index 732d23d709b..ee1c147e96c 100644 --- a/apps/web/lib/actions/partners/update-partner-payout-settings.ts +++ b/apps/web/lib/actions/partners/update-partner-payout-settings.ts @@ -45,6 +45,13 @@ export const updatePartnerPayoutSettingsAction = authPartnerActionClient status: "processed", stripeTransferId: null, }, + include: { + program: { + select: { + name: true, + }, + }, + }, }); if (previouslyProcessedPayouts.length > 0) { diff --git a/apps/web/lib/partners/create-stripe-transfer.ts b/apps/web/lib/partners/create-stripe-transfer.ts index a3623df4f58..290cc425bbe 100644 --- a/apps/web/lib/partners/create-stripe-transfer.ts +++ b/apps/web/lib/partners/create-stripe-transfer.ts @@ -7,14 +7,20 @@ import { MIN_WITHDRAWAL_AMOUNT_CENTS, } from "./constants"; +type PayoutWithProgramName = Pick & { + program: { + name: string; + }; +}; + export const createStripeTransfer = async ({ partner, previouslyProcessedPayouts, currentInvoicePayouts, }: { partner: Pick; - previouslyProcessedPayouts: Pick[]; - currentInvoicePayouts?: Pick[]; + previouslyProcessedPayouts: PayoutWithProgramName[]; + currentInvoicePayouts?: PayoutWithProgramName[]; }) => { // this should never happen since we guard for it outside, but just in case if (!partner.stripeConnectId) { @@ -92,7 +98,7 @@ export const createStripeTransfer = async ({ // (even though the transfer could technically include payouts from multiple invoices) transfer_group: finalPayoutInvoiceId!, destination: partner.stripeConnectId, - description: `Dub Partners payout for ${allPayouts.map((p) => p.id).join(", ")}`, + description: `Dub Partners payout ${pluralize("transfer", allPayouts.length)} (${allPayouts.map((p) => p.program.name).join(", ")})`, }, { idempotencyKey: `${finalPayoutInvoiceId}-${partner.id}`,