Browse Source

Various improvements

pull/4570/head
Thomas Kaul 4 months ago
parent
commit
d29ba0153d
  1. 19
      apps/api/src/app/endpoints/watchlist/watchlist.controller.ts
  2. 8
      apps/api/src/app/endpoints/watchlist/watchlist.module.ts
  3. 2
      apps/api/src/app/endpoints/watchlist/watchlist.service.ts
  4. 3
      libs/common/src/lib/permissions.ts

19
apps/api/src/app/endpoints/watchlist/watchlist.controller.ts

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

8
apps/api/src/app/endpoints/watchlist/watchlist.module.ts

@ -1,3 +1,5 @@
import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module';
import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module';
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
import { Module } from '@nestjs/common';
@ -7,7 +9,11 @@ import { WatchlistService } from './watchlist.service';
@Module({
controllers: [WatchlistController],
imports: [PrismaModule],
imports: [
TransformDataSourceInRequestModule,
TransformDataSourceInResponseModule,
PrismaModule
],
providers: [WatchlistService]
})
export class WatchlistModule {}

2
apps/api/src/app/endpoints/watchlist/watchlist.service.ts

@ -25,7 +25,7 @@ export class WatchlistService {
if (!symbolProfile) {
throw new NotFoundException(
`Asset profile not found for ${symbol} (${dataSource}).`
`Asset profile not found for ${symbol} (${dataSource})`
);
}

3
libs/common/src/lib/permissions.ts

@ -106,7 +106,8 @@ export function getPermissions(aRole: Role): string[] {
permissions.accessAssistant,
permissions.accessHoldingsChart,
permissions.createUserAccount,
permissions.readAiPrompt
permissions.readAiPrompt,
permissions.readWatchlist
];
case 'USER':

Loading…
Cancel
Save