From 87f66edd952c9a116613d730fd2be78538680499 Mon Sep 17 00:00:00 2001 From: Ephraim Atta-Duncan Date: Tue, 25 Feb 2025 10:24:25 +0000 Subject: [PATCH] chore: wip --- .../(dashboard)/admin/leaderboard/page.tsx | 1 - .../server-only/admin/get-signing-volume.ts | 64 +++++++------------ 2 files changed, 23 insertions(+), 42 deletions(-) diff --git a/apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx b/apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx index cb9f84558..cd809a921 100644 --- a/apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx +++ b/apps/web/src/app/(dashboard)/admin/leaderboard/page.tsx @@ -40,7 +40,6 @@ export default async function Leaderboard({ searchParams = {} }: AdminLeaderboar sortOrder, }); - // Ensure all required properties are defined and match the expected types const typedSigningVolume: SigningVolume[] = leaderboard.map((item) => ({ ...item, name: item.name || '', diff --git a/packages/lib/server-only/admin/get-signing-volume.ts b/packages/lib/server-only/admin/get-signing-volume.ts index 58b38cf68..4128239f7 100644 --- a/packages/lib/server-only/admin/get-signing-volume.ts +++ b/packages/lib/server-only/admin/get-signing-volume.ts @@ -53,22 +53,30 @@ export const getSigningVolume = async ({ }, }); - const subscriptionData = activeSubscriptions.map((subscription) => { + const uniqueEntities = new Map(); + + activeSubscriptions.forEach((subscription) => { const isTeam = !!subscription.teamId; - return { - id: subscription.id, - planId: subscription.planId, - userId: subscription.userId, - teamId: subscription.teamId, - name: isTeam ? subscription.team?.name : subscription.user?.name || '', - email: isTeam - ? subscription.team?.teamEmail?.email || `Team ${subscription.team?.id}` - : subscription.user?.email || '', - createdAt: isTeam ? subscription.team?.createdAt : subscription.user?.createdAt, - isTeam, - }; + const entityId = isTeam ? `team-${subscription.teamId}` : `user-${subscription.userId}`; + + if (!uniqueEntities.has(entityId)) { + uniqueEntities.set(entityId, { + id: subscription.id, + planId: subscription.planId, + userId: subscription.userId, + teamId: subscription.teamId, + name: isTeam ? subscription.team?.name : subscription.user?.name || '', + email: isTeam + ? subscription.team?.teamEmail?.email || `Team ${subscription.team?.id}` + : subscription.user?.email || '', + createdAt: isTeam ? subscription.team?.createdAt : subscription.user?.createdAt, + isTeam, + }); + } }); + const subscriptionData = Array.from(uniqueEntities.values()); + const filteredSubscriptions = search ? subscriptionData.filter((sub) => { const searchLower = search.toLowerCase(); @@ -83,38 +91,16 @@ export const getSigningVolume = async ({ filteredSubscriptions.map(async (subscription) => { let signingVolume = 0; - if (subscription.userId) { + if (subscription.userId && !subscription.isTeam) { const personalCount = await prisma.document.count({ where: { userId: subscription.userId, + teamId: null, status: DocumentStatus.COMPLETED, }, }); signingVolume += personalCount; - - const userTeams = await prisma.teamMember.findMany({ - where: { - userId: subscription.userId, - }, - select: { - teamId: true, - }, - }); - - if (userTeams.length > 0) { - const teamIds = userTeams.map((team) => team.teamId); - const teamCount = await prisma.document.count({ - where: { - teamId: { - in: teamIds, - }, - status: DocumentStatus.COMPLETED, - }, - }); - - signingVolume += teamCount; - } } if (subscription.teamId) { @@ -135,7 +121,6 @@ export const getSigningVolume = async ({ }), ); - // Sort the results const sortedResults = [...leaderboardWithVolume].sort((a, b) => { if (sortBy === 'name') { return sortOrder === 'asc' @@ -149,16 +134,13 @@ export const getSigningVolume = async ({ return sortOrder === 'asc' ? dateA - dateB : dateB - dateA; } - // Default: sort by signingVolume return sortOrder === 'asc' ? a.signingVolume - b.signingVolume : b.signingVolume - a.signingVolume; }); - // Apply pagination const paginatedResults = sortedResults.slice(skip, skip + validPerPage); - // Calculate total pages const totalPages = Math.ceil(sortedResults.length / validPerPage); return {