@ -1,11 +1,17 @@
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator' ;
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator' ;
import { Impersonation } from '@ghostfolio/api/decorators/impersonation.decorator' ;
import { RequiresScope } from '@ghostfolio/api/decorators/requires-scope.decorator' ;
import { FilterDto } from '@ghostfolio/api/dtos/filter.dto' ;
import { FilterDto } from '@ghostfolio/api/dtos/filter.dto' ;
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 { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor' ;
import { ApiService } from '@ghostfolio/api/services/api/api.service' ;
import { ApiService } from '@ghostfolio/api/services/api/api.service' ;
import { AiPromptResponse } from '@ghostfolio/common/interfaces' ;
import { AiPromptResponse } from '@ghostfolio/common/interfaces' ;
import { permissions } from '@ghostfolio/common/permissions' ;
import { permissions } from '@ghostfolio/common/permissions' ;
import type { AiPromptMode , RequestWithUser } from '@ghostfolio/common/types' ;
import { scopes } from '@ghostfolio/common/scopes' ;
import type {
AiPromptMode ,
ImpersonationContext ,
RequestWithUser
} from '@ghostfolio/common/types' ;
import {
import {
Controller ,
Controller ,
@ -13,11 +19,9 @@ import {
Inject ,
Inject ,
Param ,
Param ,
Query ,
Query ,
UseGuards ,
UseInterceptors
UseInterceptors
} from '@nestjs/common' ;
} from '@nestjs/common' ;
import { REQUEST } from '@nestjs/core' ;
import { REQUEST } from '@nestjs/core' ;
import { AuthGuard } from '@nestjs/passport' ;
import { AiService } from './ai.service' ;
import { AiService } from './ai.service' ;
@ -31,9 +35,10 @@ export class AiController {
@Get ( 'prompt/:mode' )
@Get ( 'prompt/:mode' )
@HasPermission ( permissions . readAiPrompt )
@HasPermission ( permissions . readAiPrompt )
@UseGuards ( AuthGuard ( 'jwt' ) , HasPermissionGuar d )
@RequiresScope ( scopes . portfolioRea d )
@UseInterceptors ( TransformDataSourceInRequestInterceptor )
@UseInterceptors ( TransformDataSourceInRequestInterceptor )
public async getPrompt (
public async getPrompt (
@Impersonation ( ) { userId , userSettings } : ImpersonationContext ,
@Param ( 'mode' ) mode : AiPromptMode ,
@Param ( 'mode' ) mode : AiPromptMode ,
@Query ( )
@Query ( )
{ accounts , assetClasses , dataSource , symbol , tags } : FilterDto
{ accounts , assetClasses , dataSource , symbol , tags } : FilterDto
@ -49,9 +54,9 @@ export class AiController {
const prompt = await this . aiService . getPrompt ( {
const prompt = await this . aiService . getPrompt ( {
filters ,
filters ,
mode ,
mode ,
userId ,
languageCode : this.request.user.settings.settings.language ,
languageCode : this.request.user.settings.settings.language ,
userCurrency : this.request.user.settings.settings.baseCurrency ,
userCurrency : userSettings.baseCurrency
userId : this.request.user.id
} ) ;
} ) ;
return { prompt } ;
return { prompt } ;