From d2c5f7690aa3306640108b44b8cccb6a4552d46b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 12 Aug 2026 11:20:59 +0200 Subject: [PATCH] Limit type filter in activities table component to used types --- apps/api/src/app/user/user.service.ts | 31 +++++++++---------- .../src/lib/types/user-with-settings.type.ts | 1 + .../migration.sql | 5 ++- prisma/schema.prisma | 2 +- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index ef186288d..d07e45d03 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -62,7 +62,7 @@ import { EventEmitter2 } from '@nestjs/event-emitter'; import { InjectThrottlerStorage, ThrottlerStorage } from '@nestjs/throttler'; import { Prisma, Role, User } from '@prisma/client'; import { differenceInDays, subDays } from 'date-fns'; -import { isNil, without } from 'lodash'; +import { isNil, min, without } from 'lodash'; import { createHmac } from 'node:crypto'; @Injectable() @@ -130,7 +130,6 @@ export class UserService { access, accounts, activitiesGroupedByType, - firstActivity, impersonationUser, tagsForUser ] = await Promise.all([ @@ -151,15 +150,8 @@ export class UserService { } }), this.prismaService.order.groupBy({ - _count: { _all: true }, + _min: { date: true }, by: ['type'], - orderBy: { type: 'asc' }, - where: { userId: impersonationUserId || user.id } - }), - this.prismaService.order.findFirst({ - orderBy: { - date: 'asc' - }, where: { userId: impersonationUserId || user.id } }), impersonationUserId @@ -168,17 +160,21 @@ export class UserService { this.tagService.getTagsForUser(impersonationUserId || user.id) ]); - const activitiesCount = activitiesGroupedByType.reduce( - (count, { _count }) => { - return count + _count._all; - }, - 0 - ); + const activitiesCount = impersonationUser + ? impersonationUser.activitiesCount + : user.activitiesCount; const activityTypes = activitiesGroupedByType.map(({ type }) => { return type; }); + const dateOfFirstActivity = + min( + activitiesGroupedByType.map(({ _min }) => { + return _min.date; + }) + ) ?? new Date(); + const resolvedUserSettings = resolveUserSettings({ impersonationUserSettings: impersonationUser?.settings ?.settings as UserSettings, @@ -224,6 +220,7 @@ export class UserService { return { activitiesCount, activityTypes, + dateOfFirstActivity, id, permissions, referralPartners, @@ -242,7 +239,6 @@ export class UserService { accounts: accounts.sort((a, b) => { return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); }), - dateOfFirstActivity: firstActivity?.date ?? new Date(), settings: { ...resolvedUserSettings, baseCurrency: resolvedUserSettings.baseCurrency ?? DEFAULT_CURRENCY, @@ -340,6 +336,7 @@ export class UserService { const user: UserWithSettings = { accessToken, accounts, + activitiesCount, authChallenge, createdAt, id, diff --git a/libs/common/src/lib/types/user-with-settings.type.ts b/libs/common/src/lib/types/user-with-settings.type.ts index 37b2b83e9..61bab6572 100644 --- a/libs/common/src/lib/types/user-with-settings.type.ts +++ b/libs/common/src/lib/types/user-with-settings.type.ts @@ -6,6 +6,7 @@ import { Account, Settings, User } from '@prisma/client'; // TODO: Compare with User interface export type UserWithSettings = User & { accounts: Account[]; + activitiesCount: number; activityCount: number; dataProviderGhostfolioDailyRequests: number; permissions?: string[]; diff --git a/prisma/migrations/20260820000000_updated_indexes_of_order/migration.sql b/prisma/migrations/20260820000000_updated_indexes_of_order/migration.sql index 137bc6185..b1796c864 100644 --- a/prisma/migrations/20260820000000_updated_indexes_of_order/migration.sql +++ b/prisma/migrations/20260820000000_updated_indexes_of_order/migration.sql @@ -8,4 +8,7 @@ DROP INDEX "Order_type_idx"; DROP INDEX "Order_userId_idx"; -- CreateIndex -CREATE INDEX "Order_userId_type_idx" ON "Order"("userId", "type"); +CREATE INDEX "Order_symbolProfileId_idx" ON "Order"("symbolProfileId"); + +-- CreateIndex +CREATE INDEX "Order_userId_date_type_idx" ON "Order"("userId", "date", "type"); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index bcff21e62..31e674717 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -198,7 +198,7 @@ model Order { @@index([accountId]) @@index([date]) @@index([symbolProfileId]) - @@index([userId, type]) + @@index([userId, date, type]) } model Platform {