|
@ -5,7 +5,8 @@ import { PropertyService } from '@ghostfolio/api/services/property/property.serv |
|
|
import { PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS } from '@ghostfolio/common/config'; |
|
|
import { PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS } from '@ghostfolio/common/config'; |
|
|
import { |
|
|
import { |
|
|
DataProviderGhostfolioStatusResponse, |
|
|
DataProviderGhostfolioStatusResponse, |
|
|
LookupResponse |
|
|
LookupResponse, |
|
|
|
|
|
QuotesResponse |
|
|
} from '@ghostfolio/common/interfaces'; |
|
|
} from '@ghostfolio/common/interfaces'; |
|
|
import { permissions } from '@ghostfolio/common/permissions'; |
|
|
import { permissions } from '@ghostfolio/common/permissions'; |
|
|
import { RequestWithUser } from '@ghostfolio/common/types'; |
|
|
import { RequestWithUser } from '@ghostfolio/common/types'; |
|
@ -22,6 +23,7 @@ import { REQUEST } from '@nestjs/core'; |
|
|
import { AuthGuard } from '@nestjs/passport'; |
|
|
import { AuthGuard } from '@nestjs/passport'; |
|
|
import { getReasonPhrase, StatusCodes } from 'http-status-codes'; |
|
|
import { getReasonPhrase, StatusCodes } from 'http-status-codes'; |
|
|
|
|
|
|
|
|
|
|
|
import { GetQuotesDto } from './get-quotes.dto'; |
|
|
import { GhostfolioService } from './ghostfolio.service'; |
|
|
import { GhostfolioService } from './ghostfolio.service'; |
|
|
|
|
|
|
|
|
@Controller('data-providers/ghostfolio') |
|
|
@Controller('data-providers/ghostfolio') |
|
@ -33,6 +35,8 @@ export class GhostfolioController { |
|
|
@Inject(REQUEST) private readonly request: RequestWithUser |
|
|
@Inject(REQUEST) private readonly request: RequestWithUser |
|
|
) {} |
|
|
) {} |
|
|
|
|
|
|
|
|
|
|
|
// TODO: Get historical
|
|
|
|
|
|
|
|
|
@Get('lookup') |
|
|
@Get('lookup') |
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
@ -71,6 +75,41 @@ export class GhostfolioController { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Get('quotes') |
|
|
|
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
|
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
|
|
|
public async getQuotes( |
|
|
|
|
|
@Query() query: GetQuotesDto |
|
|
|
|
|
): Promise<QuotesResponse> { |
|
|
|
|
|
const maxDailyRequests = await this.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.incrementDailyRequests({ |
|
|
|
|
|
userId: this.request.user.id |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
return quotes; |
|
|
|
|
|
} catch { |
|
|
|
|
|
throw new HttpException( |
|
|
|
|
|
getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR), |
|
|
|
|
|
StatusCodes.INTERNAL_SERVER_ERROR |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@Get('status') |
|
|
@Get('status') |
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
@HasPermission(permissions.enableDataProviderGhostfolio) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|