Browse Source

Transform data source (part II)

pull/658/head
Thomas 3 years ago
parent
commit
845b600d7c
  1. 16
      apps/api/src/app/order/order.controller.ts
  2. 8
      apps/api/src/app/symbol/symbol.controller.ts
  3. 18
      apps/api/src/interceptors/transform-data-source-in-request.interceptor.ts
  4. 24
      apps/api/src/interceptors/transform-data-source-in-response.interceptor.ts

16
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<Activities> {
@ -94,19 +95,9 @@ export class OrderController {
return { activities };
}
@Get(':id')
@UseGuards(AuthGuard('jwt'))
public async getOrderById(@Param('id') id: string): Promise<OrderModel> {
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<OrderModel> {
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)

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

18
apps/api/src/interceptors/transform-data-source-in-request.interceptor.ts

@ -23,15 +23,23 @@ export class TransformDataSourceInRequestInterceptor<T>
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();
}
}

24
apps/api/src/interceptors/transform-data-source-in-response.interceptor.ts

@ -28,11 +28,35 @@ export class TransformDataSourceInResponseInterceptor<T>
) {
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);

Loading…
Cancel
Save