|
@ -1,5 +1,7 @@ |
|
|
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; |
|
|
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; |
|
|
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; |
|
|
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; |
|
|
|
|
|
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor'; |
|
|
|
|
|
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor'; |
|
|
import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; |
|
|
import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; |
|
|
import { permissions } from '@ghostfolio/common/permissions'; |
|
|
import { permissions } from '@ghostfolio/common/permissions'; |
|
|
import { RequestWithUser } from '@ghostfolio/common/types'; |
|
|
import { RequestWithUser } from '@ghostfolio/common/types'; |
|
@ -13,10 +15,12 @@ import { |
|
|
Inject, |
|
|
Inject, |
|
|
Param, |
|
|
Param, |
|
|
Post, |
|
|
Post, |
|
|
UseGuards |
|
|
UseGuards, |
|
|
|
|
|
UseInterceptors |
|
|
} from '@nestjs/common'; |
|
|
} from '@nestjs/common'; |
|
|
import { REQUEST } from '@nestjs/core'; |
|
|
import { REQUEST } from '@nestjs/core'; |
|
|
import { AuthGuard } from '@nestjs/passport'; |
|
|
import { AuthGuard } from '@nestjs/passport'; |
|
|
|
|
|
import { DataSource } from '@prisma/client'; |
|
|
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; |
|
|
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; |
|
|
|
|
|
|
|
|
import { CreateWatchlistItemDto } from './create-watchlist-item.dto'; |
|
|
import { CreateWatchlistItemDto } from './create-watchlist-item.dto'; |
|
@ -32,6 +36,7 @@ export class WatchlistController { |
|
|
@Post() |
|
|
@Post() |
|
|
@HasPermission(permissions.createWatchlistItem) |
|
|
@HasPermission(permissions.createWatchlistItem) |
|
|
@UseGuards(AuthGuard('jwt')) |
|
|
@UseGuards(AuthGuard('jwt')) |
|
|
|
|
|
@UseInterceptors(TransformDataSourceInRequestInterceptor) |
|
|
public async createWatchlistItem(@Body() data: CreateWatchlistItemDto) { |
|
|
public async createWatchlistItem(@Body() data: CreateWatchlistItemDto) { |
|
|
return this.watchlistService.createWatchlistItem({ |
|
|
return this.watchlistService.createWatchlistItem({ |
|
|
dataSource: data.dataSource, |
|
|
dataSource: data.dataSource, |
|
@ -43,16 +48,17 @@ export class WatchlistController { |
|
|
@Delete(':dataSource/:symbol') |
|
|
@Delete(':dataSource/:symbol') |
|
|
@HasPermission(permissions.deleteWatchlistItem) |
|
|
@HasPermission(permissions.deleteWatchlistItem) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
|
|
|
@UseInterceptors(TransformDataSourceInRequestInterceptor) |
|
|
public async deleteWatchlistItem( |
|
|
public async deleteWatchlistItem( |
|
|
@Param('dataSource') dataSource: string, |
|
|
@Param('dataSource') dataSource: DataSource, |
|
|
@Param('symbol') symbol: string |
|
|
@Param('symbol') symbol: string |
|
|
) { |
|
|
) { |
|
|
const watchlistItem = await this.watchlistService |
|
|
const watchlistItem = await this.watchlistService |
|
|
.getWatchlistItems(this.request.user.id) |
|
|
.getWatchlistItems(this.request.user.id) |
|
|
.then((items) => { |
|
|
.then((items) => { |
|
|
return items.find( |
|
|
return items.find((item) => { |
|
|
(item) => item.dataSource === dataSource && item.symbol === symbol |
|
|
return item.dataSource === dataSource && item.symbol === symbol; |
|
|
); |
|
|
}); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
if (!watchlistItem) { |
|
|
if (!watchlistItem) { |
|
@ -63,8 +69,8 @@ export class WatchlistController { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return this.watchlistService.deleteWatchlistItem({ |
|
|
return this.watchlistService.deleteWatchlistItem({ |
|
|
|
|
|
dataSource, |
|
|
symbol, |
|
|
symbol, |
|
|
dataSource: watchlistItem.dataSource, |
|
|
|
|
|
userId: this.request.user.id |
|
|
userId: this.request.user.id |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
@ -72,6 +78,7 @@ export class WatchlistController { |
|
|
@Get() |
|
|
@Get() |
|
|
@HasPermission(permissions.readWatchlist) |
|
|
@HasPermission(permissions.readWatchlist) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
|
|
|
@UseInterceptors(TransformDataSourceInResponseInterceptor) |
|
|
public async getWatchlistItems(): Promise<AssetProfileIdentifier[]> { |
|
|
public async getWatchlistItems(): Promise<AssetProfileIdentifier[]> { |
|
|
return this.watchlistService.getWatchlistItems(this.request.user.id); |
|
|
return this.watchlistService.getWatchlistItems(this.request.user.id); |
|
|
} |
|
|
} |
|
|