diff --git a/apps/api/src/app/order/order.controller.ts b/apps/api/src/app/order/order.controller.ts index eed7561ad..58a043b82 100644 --- a/apps/api/src/app/order/order.controller.ts +++ b/apps/api/src/app/order/order.controller.ts @@ -1,5 +1,6 @@ import { UserService } from '@ghostfolio/api/app/user/user.service'; import { nullifyValuesInObjects } from '@ghostfolio/api/helper/object.helper'; +import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request.interceptor'; import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response.interceptor'; import { ImpersonationService } from '@ghostfolio/api/services/impersonation.service'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; @@ -59,8 +60,8 @@ export class OrderController { } @Get() - @UseInterceptors(TransformDataSourceInResponseInterceptor) @UseGuards(AuthGuard('jwt')) + @UseInterceptors(TransformDataSourceInResponseInterceptor) public async getAllOrders( @Headers('impersonation-id') impersonationId ): Promise { @@ -94,19 +95,9 @@ export class OrderController { return { activities }; } - @Get(':id') - @UseGuards(AuthGuard('jwt')) - public async getOrderById(@Param('id') id: string): Promise { - return this.orderService.order({ - id_userId: { - id, - userId: this.request.user.id - } - }); - } - @Post() @UseGuards(AuthGuard('jwt')) + @UseInterceptors(TransformDataSourceInRequestInterceptor) public async createOrder(@Body() data: CreateOrderDto): Promise { if ( !hasPermission(this.request.user.permissions, permissions.createOrder) @@ -141,6 +132,7 @@ export class OrderController { @Put(':id') @UseGuards(AuthGuard('jwt')) + @UseInterceptors(TransformDataSourceInRequestInterceptor) public async update(@Param('id') id: string, @Body() data: UpdateOrderDto) { if ( !hasPermission(this.request.user.permissions, permissions.updateOrder) diff --git a/apps/api/src/app/symbol/symbol.controller.ts b/apps/api/src/app/symbol/symbol.controller.ts index d81ba5ca8..5b3c0f030 100644 --- a/apps/api/src/app/symbol/symbol.controller.ts +++ b/apps/api/src/app/symbol/symbol.controller.ts @@ -1,3 +1,5 @@ +import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request.interceptor'; +import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response.interceptor'; import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { Controller, @@ -5,7 +7,8 @@ import { HttpException, Param, Query, - UseGuards + UseGuards, + UseInterceptors } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { DataSource } from '@prisma/client'; @@ -25,6 +28,7 @@ export class SymbolController { */ @Get('lookup') @UseGuards(AuthGuard('jwt')) + @UseInterceptors(TransformDataSourceInResponseInterceptor) public async lookupSymbol( @Query() { query = '' } ): Promise<{ items: LookupItem[] }> { @@ -43,6 +47,8 @@ export class SymbolController { */ @Get(':dataSource/:symbol') @UseGuards(AuthGuard('jwt')) + @UseInterceptors(TransformDataSourceInRequestInterceptor) + @UseInterceptors(TransformDataSourceInResponseInterceptor) public async getSymbolData( @Param('dataSource') dataSource: DataSource, @Param('symbol') symbol: string, diff --git a/apps/api/src/interceptors/transform-data-source-in-request.interceptor.ts b/apps/api/src/interceptors/transform-data-source-in-request.interceptor.ts index d4d9d3e4d..27bbe047b 100644 --- a/apps/api/src/interceptors/transform-data-source-in-request.interceptor.ts +++ b/apps/api/src/interceptors/transform-data-source-in-request.interceptor.ts @@ -23,15 +23,23 @@ export class TransformDataSourceInRequestInterceptor const request = http.getRequest(); if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') === true) { - // Decode data source + if (request.body.dataSource) { + request.body.dataSource = this.decodeDataSource( + request.body.dataSource + ); + } + if (request.params.dataSource) { - request.params.dataSource = Buffer.from( - request.params.dataSource, - 'hex' - ).toString(); + request.params.dataSource = this.decodeDataSource( + request.params.dataSource + ); } } return next.handle(); } + + private decodeDataSource(encodeDataSource: string) { + return Buffer.from(encodeDataSource, 'hex').toString(); + } } diff --git a/apps/api/src/interceptors/transform-data-source-in-response.interceptor.ts b/apps/api/src/interceptors/transform-data-source-in-response.interceptor.ts index b51143be3..4f7d641ac 100644 --- a/apps/api/src/interceptors/transform-data-source-in-response.interceptor.ts +++ b/apps/api/src/interceptors/transform-data-source-in-response.interceptor.ts @@ -28,11 +28,35 @@ export class TransformDataSourceInResponseInterceptor ) { if (data.activities) { data.activities.map((activity) => { + activity.SymbolProfile.dataSource = this.encodeDataSource( + activity.SymbolProfile.dataSource + ); activity.dataSource = this.encodeDataSource(activity.dataSource); return activity; }); } + if (data.dataSource) { + data.dataSource = this.encodeDataSource(data.dataSource); + } + + if (data.holdings) { + for (const symbol of Object.keys(data.holdings)) { + if (data.holdings[symbol].dataSource) { + data.holdings[symbol].dataSource = this.encodeDataSource( + data.holdings[symbol].dataSource + ); + } + } + } + + if (data.items) { + data.items.map((item) => { + item.dataSource = this.encodeDataSource(item.dataSource); + return item; + }); + } + if (data.positions) { data.positions.map((position) => { position.dataSource = this.encodeDataSource(position.dataSource);