|
|
@ -18,7 +18,8 @@ import { |
|
|
|
Inject, |
|
|
|
Param, |
|
|
|
Query, |
|
|
|
UseGuards |
|
|
|
UseGuards, |
|
|
|
Version |
|
|
|
} from '@nestjs/common'; |
|
|
|
import { REQUEST } from '@nestjs/core'; |
|
|
|
import { AuthGuard } from '@nestjs/passport'; |
|
|
@ -36,9 +37,52 @@ export class GhostfolioController { |
|
|
|
@Inject(REQUEST) private readonly request: RequestWithUser |
|
|
|
) {} |
|
|
|
|
|
|
|
/** |
|
|
|
* @deprecated |
|
|
|
*/ |
|
|
|
@Get('dividends/:symbol') |
|
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
|
public async getDividendsV1( |
|
|
|
@Param('symbol') symbol: string, |
|
|
|
@Query() query: GetDividendsDto |
|
|
|
): Promise<DividendsResponse> { |
|
|
|
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests(); |
|
|
|
|
|
|
|
if ( |
|
|
|
this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests |
|
|
|
) { |
|
|
|
throw new HttpException( |
|
|
|
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS), |
|
|
|
StatusCodes.TOO_MANY_REQUESTS |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
const dividends = await this.ghostfolioService.getDividends({ |
|
|
|
symbol, |
|
|
|
from: parseDate(query.from), |
|
|
|
granularity: query.granularity, |
|
|
|
to: parseDate(query.to) |
|
|
|
}); |
|
|
|
|
|
|
|
await this.ghostfolioService.incrementDailyRequests({ |
|
|
|
userId: this.request.user.id |
|
|
|
}); |
|
|
|
|
|
|
|
return dividends; |
|
|
|
} catch { |
|
|
|
throw new HttpException( |
|
|
|
getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR), |
|
|
|
StatusCodes.INTERNAL_SERVER_ERROR |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Get('dividends/:symbol') |
|
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
|
@UseGuards(AuthGuard('api-key'), HasPermissionGuard) |
|
|
|
@Version('2') |
|
|
|
public async getDividends( |
|
|
|
@Param('symbol') symbol: string, |
|
|
|
@Query() query: GetDividendsDto |
|
|
@ -75,9 +119,52 @@ export class GhostfolioController { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @deprecated |
|
|
|
*/ |
|
|
|
@Get('historical/:symbol') |
|
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
|
public async getHistoricalV1( |
|
|
|
@Param('symbol') symbol: string, |
|
|
|
@Query() query: GetHistoricalDto |
|
|
|
): Promise<HistoricalResponse> { |
|
|
|
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests(); |
|
|
|
|
|
|
|
if ( |
|
|
|
this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests |
|
|
|
) { |
|
|
|
throw new HttpException( |
|
|
|
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS), |
|
|
|
StatusCodes.TOO_MANY_REQUESTS |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
const historicalData = await this.ghostfolioService.getHistorical({ |
|
|
|
symbol, |
|
|
|
from: parseDate(query.from), |
|
|
|
granularity: query.granularity, |
|
|
|
to: parseDate(query.to) |
|
|
|
}); |
|
|
|
|
|
|
|
await this.ghostfolioService.incrementDailyRequests({ |
|
|
|
userId: this.request.user.id |
|
|
|
}); |
|
|
|
|
|
|
|
return historicalData; |
|
|
|
} catch { |
|
|
|
throw new HttpException( |
|
|
|
getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR), |
|
|
|
StatusCodes.INTERNAL_SERVER_ERROR |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Get('historical/:symbol') |
|
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
|
@UseGuards(AuthGuard('api-key'), HasPermissionGuard) |
|
|
|
@Version('2') |
|
|
|
public async getHistorical( |
|
|
|
@Param('symbol') symbol: string, |
|
|
|
@Query() query: GetHistoricalDto |
|
|
@ -114,9 +201,51 @@ export class GhostfolioController { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @deprecated |
|
|
|
*/ |
|
|
|
@Get('lookup') |
|
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
|
public async lookupSymbolV1( |
|
|
|
@Query('includeIndices') includeIndicesParam = 'false', |
|
|
|
@Query('query') query = '' |
|
|
|
): Promise<LookupResponse> { |
|
|
|
const includeIndices = includeIndicesParam === 'true'; |
|
|
|
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests(); |
|
|
|
|
|
|
|
if ( |
|
|
|
this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests |
|
|
|
) { |
|
|
|
throw new HttpException( |
|
|
|
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS), |
|
|
|
StatusCodes.TOO_MANY_REQUESTS |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
const result = await this.ghostfolioService.lookup({ |
|
|
|
includeIndices, |
|
|
|
query: query.toLowerCase() |
|
|
|
}); |
|
|
|
|
|
|
|
await this.ghostfolioService.incrementDailyRequests({ |
|
|
|
userId: this.request.user.id |
|
|
|
}); |
|
|
|
|
|
|
|
return result; |
|
|
|
} catch { |
|
|
|
throw new HttpException( |
|
|
|
getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR), |
|
|
|
StatusCodes.INTERNAL_SERVER_ERROR |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Get('lookup') |
|
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
|
@UseGuards(AuthGuard('api-key'), HasPermissionGuard) |
|
|
|
@Version('2') |
|
|
|
public async lookupSymbol( |
|
|
|
@Query('includeIndices') includeIndicesParam = 'false', |
|
|
|
@Query('query') query = '' |
|
|
@ -152,9 +281,48 @@ export class GhostfolioController { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @deprecated |
|
|
|
*/ |
|
|
|
@Get('quotes') |
|
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
|
public async getQuotesV1( |
|
|
|
@Query() query: GetQuotesDto |
|
|
|
): Promise<QuotesResponse> { |
|
|
|
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests(); |
|
|
|
|
|
|
|
if ( |
|
|
|
this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests |
|
|
|
) { |
|
|
|
throw new HttpException( |
|
|
|
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS), |
|
|
|
StatusCodes.TOO_MANY_REQUESTS |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
const quotes = await this.ghostfolioService.getQuotes({ |
|
|
|
symbols: query.symbols |
|
|
|
}); |
|
|
|
|
|
|
|
await this.ghostfolioService.incrementDailyRequests({ |
|
|
|
userId: this.request.user.id |
|
|
|
}); |
|
|
|
|
|
|
|
return quotes; |
|
|
|
} catch { |
|
|
|
throw new HttpException( |
|
|
|
getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR), |
|
|
|
StatusCodes.INTERNAL_SERVER_ERROR |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Get('quotes') |
|
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
|
@UseGuards(AuthGuard('api-key'), HasPermissionGuard) |
|
|
|
@Version('2') |
|
|
|
public async getQuotes( |
|
|
|
@Query() query: GetQuotesDto |
|
|
|
): Promise<QuotesResponse> { |
|
|
@ -187,9 +355,20 @@ export class GhostfolioController { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @deprecated |
|
|
|
*/ |
|
|
|
@Get('status') |
|
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
|
public async getStatusV1(): Promise<DataProviderGhostfolioStatusResponse> { |
|
|
|
return this.ghostfolioService.getStatus({ user: this.request.user }); |
|
|
|
} |
|
|
|
|
|
|
|
@Get('status') |
|
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
|
@UseGuards(AuthGuard('api-key'), HasPermissionGuard) |
|
|
|
@Version('2') |
|
|
|
public async getStatus(): Promise<DataProviderGhostfolioStatusResponse> { |
|
|
|
return this.ghostfolioService.getStatus({ user: this.request.user }); |
|
|
|
} |
|
|
|