diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts index 2bae2fdb6..38227c555 100644 --- a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts +++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts @@ -1,38 +1,48 @@ 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 { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos'; import { EnhancedSymbolProfile } from '@ghostfolio/common/interfaces'; import { permissions } from '@ghostfolio/common/permissions'; +import { RequestWithUser } from '@ghostfolio/common/types'; import { Body, Controller, + HttpException, + Inject, Param, Patch, - UseGuards, - UseInterceptors + UseGuards } 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 { AssetProfilesService } from './asset-profiles.service'; @Controller('asset-profiles') export class AssetProfilesController { public constructor( - private readonly assetProfilesService: AssetProfilesService + private readonly assetProfilesService: AssetProfilesService, + @Inject(REQUEST) private readonly request: RequestWithUser ) {} @HasPermission(permissions.accessAdminControl) @Patch(':dataSource/:symbol') @UseGuards(AuthGuard('jwt'), HasPermissionGuard) - @UseInterceptors(TransformDataSourceInRequestInterceptor) public async updateAssetProfileData( @Body() assetProfileData: UpdateAssetProfileDataDto, @Param('dataSource') dataSource: DataSource, @Param('symbol') symbol: string ): Promise { + if (!this.request.user.settings.settings.isExperimentalFeatures) { + throw new HttpException( + getReasonPhrase(StatusCodes.NOT_FOUND), + StatusCodes.NOT_FOUND + ); + } + return this.assetProfilesService.updateAssetProfileData( { dataSource, symbol }, assetProfileData diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts index 4cf34b8a0..32b9ab393 100644 --- a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts +++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts @@ -1,4 +1,3 @@ -import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module'; import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; import { Module } from '@nestjs/common'; @@ -8,7 +7,7 @@ import { AssetProfilesService } from './asset-profiles.service'; @Module({ controllers: [AssetProfilesController], - imports: [SymbolProfileModule, TransformDataSourceInRequestModule], + imports: [SymbolProfileModule], providers: [AssetProfilesService] }) export class AssetProfilesModule {} diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts index 578b6ca6e..b8199061f 100644 --- a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts +++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts @@ -27,7 +27,7 @@ export class AssetProfilesService { if (!assetProfile) { throw new NotFoundException( - `Asset profile with data source ${dataSource} and symbol ${symbol} not found` + `Could not find the asset profile for ${symbol} (${dataSource})` ); }