|
|
@ -3,6 +3,8 @@ import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.servic |
|
|
|
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; |
|
|
|
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; |
|
|
|
import { RedactValuesInResponseInterceptor } from '@ghostfolio/api/interceptors/redact-values-in-response/redact-values-in-response.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 { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service'; |
|
|
|
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config'; |
|
|
|
import { |
|
|
@ -26,6 +28,7 @@ import { |
|
|
|
Param, |
|
|
|
Post, |
|
|
|
Put, |
|
|
|
Query, |
|
|
|
UseGuards, |
|
|
|
UseInterceptors |
|
|
|
} from '@nestjs/common'; |
|
|
@ -44,6 +47,7 @@ export class AccountController { |
|
|
|
public constructor( |
|
|
|
private readonly accountBalanceService: AccountBalanceService, |
|
|
|
private readonly accountService: AccountService, |
|
|
|
private readonly apiService: ApiService, |
|
|
|
private readonly impersonationService: ImpersonationService, |
|
|
|
private readonly portfolioService: PortfolioService, |
|
|
|
@Inject(REQUEST) private readonly request: RequestWithUser |
|
|
@ -84,13 +88,22 @@ export class AccountController { |
|
|
|
@Get() |
|
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
|
@UseInterceptors(RedactValuesInResponseInterceptor) |
|
|
|
@UseInterceptors(TransformDataSourceInRequestInterceptor) |
|
|
|
public async getAllAccounts( |
|
|
|
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId |
|
|
|
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId, |
|
|
|
@Query('dataSource') filterByDataSource?: string, |
|
|
|
@Query('symbol') filterBySymbol?: string |
|
|
|
): Promise<Accounts> { |
|
|
|
const impersonationUserId = |
|
|
|
await this.impersonationService.validateImpersonationId(impersonationId); |
|
|
|
|
|
|
|
const filters = this.apiService.buildFiltersFromQueryParams({ |
|
|
|
filterByDataSource, |
|
|
|
filterBySymbol |
|
|
|
}); |
|
|
|
|
|
|
|
return this.portfolioService.getAccountsWithAggregations({ |
|
|
|
filters, |
|
|
|
userId: impersonationUserId || this.request.user.id, |
|
|
|
withExcludedAccounts: true |
|
|
|
}); |
|
|
|