From 0d734afdfae57d3f1d7bcf1ed1c269add948fa6e Mon Sep 17 00:00:00 2001 From: Airthee <13355624+Airthee@users.noreply.github.com> Date: Wed, 1 Apr 2026 18:49:35 +0200 Subject: [PATCH] Task/apply second review Address PR feedback: alphabetical ordering of query params, short form usage, reuse splitStringToArray, and add changelog entry --- CHANGELOG.md | 1 + .../src/app/activities/activities.controller.ts | 4 ++-- apps/api/src/app/export/export.controller.ts | 8 ++++---- apps/api/src/app/export/export.service.ts | 4 ++-- .../activities/activities-page.component.ts | 14 +++++++------- libs/ui/src/lib/services/data.service.ts | 12 ++++++------ 6 files changed, 22 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 407767cac..db2fda87f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Extended the holding detail dialog by adding a copy-to-clipboard button for the ISIN number (experimental) - Extended the holding detail dialog by adding a copy-to-clipboard button for the symbol (experimental) - Extended the user detail dialog of the admin control panel’s users section by adding a copy-to-clipboard button for the user id +- Added a filter by activity type to the activities page (experimental) ### Changed diff --git a/apps/api/src/app/activities/activities.controller.ts b/apps/api/src/app/activities/activities.controller.ts index 01e947905..8b42514f8 100644 --- a/apps/api/src/app/activities/activities.controller.ts +++ b/apps/api/src/app/activities/activities.controller.ts @@ -113,6 +113,7 @@ export class ActivitiesController { public async getAllActivities( @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string, @Query('accounts') filterByAccounts?: string, + @Query('activityTypes') filterByTypes?: string, @Query('assetClasses') filterByAssetClasses?: string, @Query('dataSource') filterByDataSource?: string, @Query('range') dateRange?: DateRange, @@ -121,8 +122,7 @@ export class ActivitiesController { @Query('sortDirection') sortDirection?: Prisma.SortOrder, @Query('symbol') filterBySymbol?: string, @Query('tags') filterByTags?: string, - @Query('take') take?: number, - @Query('activityTypes') filterByTypes?: string + @Query('take') take?: number ): Promise { const types = filterByTypes ? (splitStringToArray(filterByTypes) as ActivityType[]) diff --git a/apps/api/src/app/export/export.controller.ts b/apps/api/src/app/export/export.controller.ts index 89fde83b3..6d31b6700 100644 --- a/apps/api/src/app/export/export.controller.ts +++ b/apps/api/src/app/export/export.controller.ts @@ -35,13 +35,13 @@ export class ExportController { public async export( @Query('accounts') filterByAccounts?: string, @Query('activityIds') filterByActivityIds?: string, + @Query('activityTypes') filterByTypes?: string, @Query('assetClasses') filterByAssetClasses?: string, @Query('dataSource') filterByDataSource?: string, @Query('symbol') filterBySymbol?: string, - @Query('tags') filterByTags?: string, - @Query('activityTypes') filterByTypes?: string + @Query('tags') filterByTags?: string ): Promise { - const activityIds = filterByActivityIds?.split(',') ?? []; + const activityIds = splitStringToArray(filterByActivityIds); const activityTypes = filterByTypes ? (splitStringToArray(filterByTypes) as ActivityType[]) : undefined; @@ -55,8 +55,8 @@ export class ExportController { return this.exportService.export({ activityIds, + activityTypes, filters, - activityTypes: activityTypes, userId: this.request.user.id, userSettings: this.request.user.settings.settings }); diff --git a/apps/api/src/app/export/export.service.ts b/apps/api/src/app/export/export.service.ts index ee469d4b6..267adcd37 100644 --- a/apps/api/src/app/export/export.service.ts +++ b/apps/api/src/app/export/export.service.ts @@ -30,8 +30,8 @@ export class ExportService { userSettings }: { activityIds?: string[]; - filters?: Filter[]; activityTypes?: ActivityType[]; + filters?: Filter[]; userId: string; userSettings: UserSettings; }): Promise { @@ -42,8 +42,8 @@ export class ExportService { let { activities } = await this.activitiesService.getActivities({ filters, - types: activityTypes, userId, + types: activityTypes, includeDrafts: true, sortColumn: 'date', sortDirection: 'asc', diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts index 74eb33f39..4e8c98955 100644 --- a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts @@ -141,15 +141,15 @@ export class GfActivitiesPageComponent implements OnInit { this.dataService .fetchActivities({ - range, + activityTypes: this.activityTypesFilter.length + ? this.activityTypesFilter + : undefined, filters: this.userService.getFilters(), + range, skip: this.pageIndex * this.pageSize, sortColumn: this.sortColumn, sortDirection: this.sortDirection, - take: this.pageSize, - activityTypes: this.activityTypesFilter.length - ? this.activityTypesFilter - : undefined + take: this.pageSize }) .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ activities, count }) => { @@ -222,10 +222,10 @@ export class GfActivitiesPageComponent implements OnInit { if (!activityIds) { fetchExportParams = { - filters: this.userService.getFilters(), activityTypes: this.activityTypesFilter.length ? this.activityTypesFilter - : undefined + : undefined, + filters: this.userService.getFilters() }; } diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts index 76feb0426..7f2dac0b1 100644 --- a/libs/ui/src/lib/services/data.service.ts +++ b/libs/ui/src/lib/services/data.service.ts @@ -209,13 +209,13 @@ export class DataService { } public fetchActivities({ + activityTypes, filters, range, skip, sortColumn, sortDirection, - take, - activityTypes + take }: { activityTypes?: string[]; filters?: Filter[]; @@ -227,6 +227,10 @@ export class DataService { }): Observable { let params = this.buildFiltersAsQueryParams({ filters }); + if (activityTypes?.length) { + params = params.append('activityTypes', activityTypes.join(',')); + } + if (range) { params = params.append('range', range); } @@ -247,10 +251,6 @@ export class DataService { params = params.append('take', take); } - if (activityTypes?.length) { - params = params.append('activityTypes', activityTypes.join(',')); - } - return this.http.get('/api/v1/activities', { params }).pipe( map(({ activities, count }) => { for (const activity of activities) {