mirror of
https://github.com/documenso/documenso.git
synced 2025-11-16 17:51:49 +10:00
chore: wip
This commit is contained in:
@ -40,7 +40,6 @@ export default async function Leaderboard({ searchParams = {} }: AdminLeaderboar
|
|||||||
sortOrder,
|
sortOrder,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Ensure all required properties are defined and match the expected types
|
|
||||||
const typedSigningVolume: SigningVolume[] = leaderboard.map((item) => ({
|
const typedSigningVolume: SigningVolume[] = leaderboard.map((item) => ({
|
||||||
...item,
|
...item,
|
||||||
name: item.name || '',
|
name: item.name || '',
|
||||||
|
|||||||
@ -53,22 +53,30 @@ export const getSigningVolume = async ({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const subscriptionData = activeSubscriptions.map((subscription) => {
|
const uniqueEntities = new Map();
|
||||||
|
|
||||||
|
activeSubscriptions.forEach((subscription) => {
|
||||||
const isTeam = !!subscription.teamId;
|
const isTeam = !!subscription.teamId;
|
||||||
return {
|
const entityId = isTeam ? `team-${subscription.teamId}` : `user-${subscription.userId}`;
|
||||||
id: subscription.id,
|
|
||||||
planId: subscription.planId,
|
if (!uniqueEntities.has(entityId)) {
|
||||||
userId: subscription.userId,
|
uniqueEntities.set(entityId, {
|
||||||
teamId: subscription.teamId,
|
id: subscription.id,
|
||||||
name: isTeam ? subscription.team?.name : subscription.user?.name || '',
|
planId: subscription.planId,
|
||||||
email: isTeam
|
userId: subscription.userId,
|
||||||
? subscription.team?.teamEmail?.email || `Team ${subscription.team?.id}`
|
teamId: subscription.teamId,
|
||||||
: subscription.user?.email || '',
|
name: isTeam ? subscription.team?.name : subscription.user?.name || '',
|
||||||
createdAt: isTeam ? subscription.team?.createdAt : subscription.user?.createdAt,
|
email: isTeam
|
||||||
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
|
const filteredSubscriptions = search
|
||||||
? subscriptionData.filter((sub) => {
|
? subscriptionData.filter((sub) => {
|
||||||
const searchLower = search.toLowerCase();
|
const searchLower = search.toLowerCase();
|
||||||
@ -83,38 +91,16 @@ export const getSigningVolume = async ({
|
|||||||
filteredSubscriptions.map(async (subscription) => {
|
filteredSubscriptions.map(async (subscription) => {
|
||||||
let signingVolume = 0;
|
let signingVolume = 0;
|
||||||
|
|
||||||
if (subscription.userId) {
|
if (subscription.userId && !subscription.isTeam) {
|
||||||
const personalCount = await prisma.document.count({
|
const personalCount = await prisma.document.count({
|
||||||
where: {
|
where: {
|
||||||
userId: subscription.userId,
|
userId: subscription.userId,
|
||||||
|
teamId: null,
|
||||||
status: DocumentStatus.COMPLETED,
|
status: DocumentStatus.COMPLETED,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
signingVolume += personalCount;
|
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) {
|
if (subscription.teamId) {
|
||||||
@ -135,7 +121,6 @@ export const getSigningVolume = async ({
|
|||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
// Sort the results
|
|
||||||
const sortedResults = [...leaderboardWithVolume].sort((a, b) => {
|
const sortedResults = [...leaderboardWithVolume].sort((a, b) => {
|
||||||
if (sortBy === 'name') {
|
if (sortBy === 'name') {
|
||||||
return sortOrder === 'asc'
|
return sortOrder === 'asc'
|
||||||
@ -149,16 +134,13 @@ export const getSigningVolume = async ({
|
|||||||
return sortOrder === 'asc' ? dateA - dateB : dateB - dateA;
|
return sortOrder === 'asc' ? dateA - dateB : dateB - dateA;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default: sort by signingVolume
|
|
||||||
return sortOrder === 'asc'
|
return sortOrder === 'asc'
|
||||||
? a.signingVolume - b.signingVolume
|
? a.signingVolume - b.signingVolume
|
||||||
: b.signingVolume - a.signingVolume;
|
: b.signingVolume - a.signingVolume;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Apply pagination
|
|
||||||
const paginatedResults = sortedResults.slice(skip, skip + validPerPage);
|
const paginatedResults = sortedResults.slice(skip, skip + validPerPage);
|
||||||
|
|
||||||
// Calculate total pages
|
|
||||||
const totalPages = Math.ceil(sortedResults.length / validPerPage);
|
const totalPages = Math.ceil(sortedResults.length / validPerPage);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user