@@ -14,6 +14,7 @@ import { getEmailSubject, PaymentFailedEmail, renderCreditPurchaseEmail } from '
1414import { calculateSubscriptionOverage } from '@/lib/billing/core/billing'
1515import { addCredits , getCreditBalance , removeCredits } from '@/lib/billing/credits/balance'
1616import { setUsageLimitForCredits } from '@/lib/billing/credits/purchase'
17+ import { blockOrgMembers , unblockOrgMembers } from '@/lib/billing/organizations/membership'
1718import { requireStripeClient } from '@/lib/billing/stripe-client'
1819import { getBaseUrl } from '@/lib/core/utils/urls'
1920import { sendEmail } from '@/lib/messaging/email/mailer'
@@ -502,24 +503,7 @@ export async function handleInvoicePaymentSucceeded(event: Stripe.Event) {
502503 }
503504
504505 if ( sub . plan === 'team' || sub . plan === 'enterprise' ) {
505- const members = await db
506- . select ( { userId : member . userId } )
507- . from ( member )
508- . where ( eq ( member . organizationId , sub . referenceId ) )
509- const memberIds = members . map ( ( m ) => m . userId )
510-
511- if ( memberIds . length > 0 ) {
512- // Only unblock users blocked for payment_failed, not disputes
513- await db
514- . update ( userStats )
515- . set ( { billingBlocked : false , billingBlockedReason : null } )
516- . where (
517- and (
518- inArray ( userStats . userId , memberIds ) ,
519- eq ( userStats . billingBlockedReason , 'payment_failed' )
520- )
521- )
522- }
506+ await unblockOrgMembers ( sub . referenceId , 'payment_failed' )
523507 } else {
524508 // Only unblock users blocked for payment_failed, not disputes
525509 await db
@@ -616,21 +600,10 @@ export async function handleInvoicePaymentFailed(event: Stripe.Event) {
616600 if ( records . length > 0 ) {
617601 const sub = records [ 0 ]
618602 if ( sub . plan === 'team' || sub . plan === 'enterprise' ) {
619- const members = await db
620- . select ( { userId : member . userId } )
621- . from ( member )
622- . where ( eq ( member . organizationId , sub . referenceId ) )
623- const memberIds = members . map ( ( m ) => m . userId )
624-
625- if ( memberIds . length > 0 ) {
626- await db
627- . update ( userStats )
628- . set ( { billingBlocked : true , billingBlockedReason : 'payment_failed' } )
629- . where ( inArray ( userStats . userId , memberIds ) )
630- }
603+ const memberCount = await blockOrgMembers ( sub . referenceId , 'payment_failed' )
631604 logger . info ( 'Blocked team/enterprise members due to payment failure' , {
632605 organizationId : sub . referenceId ,
633- memberCount : members . length ,
606+ memberCount,
634607 isOverageInvoice,
635608 } )
636609 } else {
0 commit comments