Browse Source

Limit type filter in activities table component to used types

pull/7602/head
Thomas Kaul 2 weeks ago
parent
commit
d2c5f7690a
  1. 31
      apps/api/src/app/user/user.service.ts
  2. 1
      libs/common/src/lib/types/user-with-settings.type.ts
  3. 5
      prisma/migrations/20260820000000_updated_indexes_of_order/migration.sql
  4. 2
      prisma/schema.prisma

31
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,

1
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[];

5
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");

2
prisma/schema.prisma

@ -198,7 +198,7 @@ model Order {
@@index([accountId])
@@index([date])
@@index([symbolProfileId])
@@index([userId, type])
@@index([userId, date, type])
}
model Platform {

Loading…
Cancel
Save