Browse Source

Refactoring

pull/2808/head
Thomas Kaul 2 years ago
parent
commit
4300a6fedc
  1. 27
      apps/api/src/app/admin/admin.controller.ts
  2. 10
      apps/api/src/services/data-provider/manual/manual.service.ts

27
apps/api/src/app/admin/admin.controller.ts

@ -3,6 +3,7 @@ import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request.interceptor'; import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/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 { DataGatheringService } from '@ghostfolio/api/services/data-gathering/data-gathering.service'; import { DataGatheringService } from '@ghostfolio/api/services/data-gathering/data-gathering.service';
import { ManualService } from '@ghostfolio/api/services/data-provider/manual/manual.service';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { PropertyDto } from '@ghostfolio/api/services/property/property.dto'; import { PropertyDto } from '@ghostfolio/api/services/property/property.dto';
import { import {
@ -50,7 +51,6 @@ import { AdminService } from './admin.service';
import { UpdateAssetProfileDto } from './update-asset-profile.dto'; import { UpdateAssetProfileDto } from './update-asset-profile.dto';
import { UpdateBulkMarketDataDto } from './update-bulk-market-data.dto'; import { UpdateBulkMarketDataDto } from './update-bulk-market-data.dto';
import { UpdateMarketDataDto } from './update-market-data.dto'; import { UpdateMarketDataDto } from './update-market-data.dto';
import { ManualService } from '@ghostfolio/api/services/data-provider/manual/manual.service';
@Controller('admin') @Controller('admin')
export class AdminController { export class AdminController {
@ -181,20 +181,9 @@ export class AdminController {
}); });
} }
@Post('test-scraper')
@UseGuards(AuthGuard('jwt'))
public async testScraper(
@Body() data: { config: string }
): Promise<{ price: number }> {
const { url, selector } = JSON.parse(data.config);
let price = await this.manualService.scrape(url, selector);
return { price: price };
}
@Get('market-data') @Get('market-data')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
@HasPermission(permissions.accessAdminControl) @HasPermission(permissions.accessAdminControl)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getMarketData( public async getMarketData(
@Query('assetSubClasses') filterByAssetSubClasses?: string, @Query('assetSubClasses') filterByAssetSubClasses?: string,
@Query('presetId') presetId?: MarketDataPreset, @Query('presetId') presetId?: MarketDataPreset,
@ -229,6 +218,18 @@ export class AdminController {
return this.adminService.getMarketDataBySymbol({ dataSource, symbol }); return this.adminService.getMarketDataBySymbol({ dataSource, symbol });
} }
@HasPermission(permissions.accessAdminControl)
@Post('test-scraper')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async testScraper(
@Body() data: { config: string }
): Promise<{ price: number }> {
const { url, selector } = JSON.parse(data.config);
const price = await this.manualService.scrape(url, selector);
return { price };
}
@HasPermission(permissions.accessAdminControl) @HasPermission(permissions.accessAdminControl)
@Post('market-data/:dataSource/:symbol') @Post('market-data/:dataSource/:symbol')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseGuards(AuthGuard('jwt'), HasPermissionGuard)

10
apps/api/src/services/data-provider/manual/manual.service.ts

@ -7,7 +7,6 @@ import {
} from '@ghostfolio/api/services/interfaces/interfaces'; } from '@ghostfolio/api/services/interfaces/interfaces';
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import { DEFAULT_REQUEST_TIMEOUT } from '@ghostfolio/common/config';
import { import {
DATE_FORMAT, DATE_FORMAT,
extractNumberFromString, extractNumberFromString,
@ -77,7 +76,6 @@ export class ManualService implements DataProviderInterface {
url url
} = symbolProfile.scraperConfiguration ?? {}; } = symbolProfile.scraperConfiguration ?? {};
Logger.log(symbolProfile);
if (defaultMarketPrice) { if (defaultMarketPrice) {
const historical: { const historical: {
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; [symbol: string]: { [date: string]: IDataProviderHistoricalResponse };
@ -124,15 +122,17 @@ export class ManualService implements DataProviderInterface {
): Promise<number> { ): Promise<number> {
const abortController = new AbortController(); const abortController = new AbortController();
setTimeout(() => {
abortController.abort();
}, this.configurationService.get('REQUEST_TIMEOUT'));
const { body } = await got(url, { const { body } = await got(url, {
headers, headers,
// @ts-ignore // @ts-ignore
signal: abortController.signal signal: abortController.signal
}); });
setTimeout(() => { const $ = cheerio.load(body);
abortController.abort();
}, this.configurationService.get('REQUEST_TIMEOUT'));
return extractNumberFromString($(selector).first().text()); return extractNumberFromString($(selector).first().text());
} }

Loading…
Cancel
Save