From 590b4efe9dd5237fc0fc454205b0042a0efa8fce Mon Sep 17 00:00:00 2001 From: pradeepkumar Date: Tue, 7 Apr 2026 15:53:48 +0530 Subject: [PATCH] feat: restrict agent profile access and search results to active, trialing, or past-due subscriptions --- src/agents/agents.service.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/agents/agents.service.ts b/src/agents/agents.service.ts index 5a32f37..75f8319 100644 --- a/src/agents/agents.service.ts +++ b/src/agents/agents.service.ts @@ -155,6 +155,12 @@ export class AgentsService { return { ...profile, user: userWithoutPrefs }; } + // Block access to non-paid agents (PAST_DUE included as grace period during Stripe retries) + const visibleStatuses = ['ACTIVE', 'TRIALING', 'PAST_DUE']; + if (!profile.subscriptionStatus || !visibleStatuses.includes(profile.subscriptionStatus)) { + throw new NotFoundException('Agent profile not found'); + } + if (visibility === 'private') { throw new ForbiddenException('This profile is not available'); } @@ -305,10 +311,12 @@ export class AgentsService { const skip = (page - 1) * limit; - // Build where clause — only show active, admin-approved profiles in search + // Build where clause — only show active, admin-approved, paid subscribers in search + // PAST_DUE included as grace period (Stripe is retrying payment) const where: Prisma.AgentProfileWhereInput = { verificationStatus: 'APPROVED', user: { status: 'ACTIVE' }, + subscriptionStatus: { in: ['ACTIVE', 'TRIALING', 'PAST_DUE'] }, }; if (search) {