From dcc4432e47f0d26ec0244536f6a5826e1d333e09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C6=B0=C6=A1ng=20Quang=20M=E1=BA=A1nh?= Date: Sun, 19 Jul 2020 16:10:27 +0700 Subject: [PATCH] Add ScraperInterface and DataProcessorInterface --- src/index.ts | 2 ++ src/modules/data-processor/data-processor.class.ts | 5 +++-- .../data-processor/data-processor.interface.ts | 11 +++++++++++ src/modules/scheduler/data-entity.class.ts | 6 +++--- src/modules/scheduler/url-entity.class.ts | 6 +++--- src/modules/scraper/scraper.class.ts | 5 +++-- src/modules/scraper/scraper.interface.ts | 11 +++++++++++ 7 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 src/modules/data-processor/data-processor.interface.ts create mode 100644 src/modules/scraper/scraper.interface.ts diff --git a/src/index.ts b/src/index.ts index 5ff881f..0e2922a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,7 @@ export { DataProcessor } from './modules/data-processor/data-processor.class' +export { DataProcessorInterface } from './modules/data-processor/data-processor.interface' export { DataEntity } from './modules/scheduler/data-entity.class' export { Scheduler } from './modules/scheduler/scheduler.class' export { UrlEntity } from './modules/scheduler/url-entity.class' export { Scraper } from './modules/scraper/scraper.class' +export { ScraperInterface } from './modules/scraper/scraper.interface' diff --git a/src/modules/data-processor/data-processor.class.ts b/src/modules/data-processor/data-processor.class.ts index 48a4a7e..587cdd2 100644 --- a/src/modules/data-processor/data-processor.class.ts +++ b/src/modules/data-processor/data-processor.class.ts @@ -2,11 +2,12 @@ import pino, { Logger } from 'pino' import { DataProcessingResult } from './data-processing-result.interface' import { DataProcessorOptions } from './data-processor-options.class' import { DataProcessorOptionsInterface } from './data-processor-options.interface' +import { DataProcessorInterface } from './data-processor.interface' /** - * Data processor + * Data processor class */ -export abstract class DataProcessor { +export abstract class DataProcessor implements DataProcessorInterface { private readonly logger: Logger constructor(options: DataProcessorOptionsInterface = {}) { diff --git a/src/modules/data-processor/data-processor.interface.ts b/src/modules/data-processor/data-processor.interface.ts new file mode 100644 index 0000000..e7983b1 --- /dev/null +++ b/src/modules/data-processor/data-processor.interface.ts @@ -0,0 +1,11 @@ +import { DataProcessingResult } from './data-processing-result.interface' + +/** + * Data processor interface + */ +export interface DataProcessorInterface { + /** + * Run + */ + run(data: object): Promise +} diff --git a/src/modules/scheduler/data-entity.class.ts b/src/modules/scheduler/data-entity.class.ts index f8370ef..b43f61b 100644 --- a/src/modules/scheduler/data-entity.class.ts +++ b/src/modules/scheduler/data-entity.class.ts @@ -1,12 +1,12 @@ -import { DataProcessor } from '../data-processor/data-processor.class' +import { DataProcessorInterface } from '../data-processor/data-processor.interface' /** Data entity */ export class DataEntity { data: object - dataProcessor: DataProcessor + dataProcessor: DataProcessorInterface retryCount = -1 - constructor(data: object, dataProcessor: DataProcessor) { + constructor(data: object, dataProcessor: DataProcessorInterface) { this.data = data this.dataProcessor = dataProcessor } diff --git a/src/modules/scheduler/url-entity.class.ts b/src/modules/scheduler/url-entity.class.ts index 3718f7a..4d4b423 100644 --- a/src/modules/scheduler/url-entity.class.ts +++ b/src/modules/scheduler/url-entity.class.ts @@ -1,12 +1,12 @@ -import { Scraper } from '../scraper/scraper.class' +import { ScraperInterface } from '../scraper/scraper.interface' /** URL entity */ export class UrlEntity { url: string - scraper: Scraper + scraper: ScraperInterface retryCount = -1 - constructor(url: string, scraper: Scraper) { + constructor(url: string, scraper: ScraperInterface) { this.url = url this.scraper = scraper } diff --git a/src/modules/scraper/scraper.class.ts b/src/modules/scraper/scraper.class.ts index 2b6a6ae..85bd36b 100644 --- a/src/modules/scraper/scraper.class.ts +++ b/src/modules/scraper/scraper.class.ts @@ -6,12 +6,13 @@ import { ParsingMeta } from './parsing-meta.interface' import { ParsingResult } from './parsing-result.interface' import { ScraperOptions } from './scraper-options.class' import { ScraperOptionsInterface } from './scraper-options.interface' +import { ScraperInterface } from './scraper.interface' import { ScrapingResult } from './scraping-result.interface' /** - * Scraper + * Scraper class */ -export abstract class Scraper { +export abstract class Scraper implements ScraperInterface { private readonly axios: AxiosInstance protected readonly userAgents: string[] protected readonly proxies: HttpProxy[] diff --git a/src/modules/scraper/scraper.interface.ts b/src/modules/scraper/scraper.interface.ts new file mode 100644 index 0000000..31cd549 --- /dev/null +++ b/src/modules/scraper/scraper.interface.ts @@ -0,0 +1,11 @@ +import { ScrapingResult } from './scraping-result.interface' + +/** + * Scraper interface + */ +export interface ScraperInterface { + /** + * Run + */ + run(url: string): Promise +}