|
|
|
@ -4,6 +4,7 @@ import { PrismaService } from '@ghostfolio/api/services/prisma.service';
|
|
|
|
|
import { AdminData } from '@ghostfolio/common/interfaces';
|
|
|
|
|
import { Injectable } from '@nestjs/common';
|
|
|
|
|
import { Currency } from '@prisma/client';
|
|
|
|
|
import { differenceInDays } from 'date-fns';
|
|
|
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
|
export class AdminService {
|
|
|
|
@ -87,8 +88,8 @@ export class AdminService {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async getUsersWithAnalytics() {
|
|
|
|
|
return await this.prismaService.user.findMany({
|
|
|
|
|
private async getUsersWithAnalytics(): Promise<AdminData['users']> {
|
|
|
|
|
const usersWithAnalytics = await this.prismaService.user.findMany({
|
|
|
|
|
orderBy: {
|
|
|
|
|
Analytics: {
|
|
|
|
|
updatedAt: 'desc'
|
|
|
|
@ -115,5 +116,23 @@ export class AdminService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return usersWithAnalytics.map(
|
|
|
|
|
({ _count, alias, Analytics, createdAt, id }) => {
|
|
|
|
|
const daysSinceRegistration =
|
|
|
|
|
differenceInDays(new Date(), createdAt) + 1;
|
|
|
|
|
const engagement = Analytics.activityCount / daysSinceRegistration;
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
alias,
|
|
|
|
|
createdAt,
|
|
|
|
|
engagement,
|
|
|
|
|
id,
|
|
|
|
|
accountCount: _count.Account || 0,
|
|
|
|
|
lastActivity: Analytics.updatedAt,
|
|
|
|
|
transactionCount: _count.Order || 0
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|