From 77936e3bf341b31412234e5436ea0915612bdbb4 Mon Sep 17 00:00:00 2001 From: Thomas <4159106+dtslvr@users.noreply.github.com> Date: Sat, 14 Aug 2021 11:12:08 +0200 Subject: [PATCH] Feature/improve users table (#291) * Improve users table * Engagement / Day * Registration * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/admin/admin.service.ts | 23 +++++++++++++++++-- .../src/app/pages/admin/admin-page.html | 14 +++++------ .../lib/interfaces/admin-data.interface.ts | 8 +++---- 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc08300b..dde20fd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Refactored the exchange rate service +- Improved the users table in the admin control panel ## 1.37.0 - 13.08.2021 diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 3f93347a..fab4f5d1 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -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 { + 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 + }; + } + ); } } diff --git a/apps/client/src/app/pages/admin/admin-page.html b/apps/client/src/app/pages/admin/admin-page.html index d1b7f4c5..1ba10e8c 100644 --- a/apps/client/src/app/pages/admin/admin-page.html +++ b/apps/client/src/app/pages/admin/admin-page.html @@ -97,7 +97,7 @@ # User - Registration Date + Registration Accounts @@ -106,7 +106,7 @@ Transactions - Engagement + Engagement per Day Last Activitiy @@ -119,19 +119,19 @@ {{ userItem.alias || userItem.id }} - {{ userItem.createdAt | date: defaultDateFormat }} + {{ formatDistanceToNow(userItem.createdAt) }} - {{ userItem._count?.Account }} + {{ userItem.accountCount }} - {{ userItem._count?.Order }} + {{ userItem.transactionCount }} - {{ userItem.Analytics?.activityCount }} + {{ userItem.engagement | number: '1.0-0' }} - {{ formatDistanceToNow(userItem.Analytics?.updatedAt) }} + {{ formatDistanceToNow(userItem.lastActivity) }}