@bytebrand/export-cars 1.21.6 → 1.21.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +8 -8
- package/.eslintignore +1 -1
- package/.eslintrc.js +24 -24
- package/.prettierrc.js +7 -7
- package/README.md +65 -65
- package/dist/configs/index.d.ts +1 -0
- package/dist/configs/index.js +1 -0
- package/dist/configs/index.js.map +1 -1
- package/dist/configs/santander.config.d.ts +5 -0
- package/dist/configs/santander.config.js +18 -0
- package/dist/configs/santander.config.js.map +1 -0
- package/dist/enums/export-type.enum.d.ts +1 -0
- package/dist/enums/export-type.enum.js +1 -0
- package/dist/enums/export-type.enum.js.map +1 -1
- package/dist/export.command.js +1 -1
- package/dist/export.command.js.map +1 -1
- package/dist/export.schema.d.ts +6 -2
- package/dist/export.schema.js +4 -0
- package/dist/export.schema.js.map +1 -1
- package/dist/exporters/autouncle.exporter.js +5 -1
- package/dist/exporters/autouncle.exporter.js.map +1 -1
- package/dist/exporters/fb.exporter.js +7 -1
- package/dist/exporters/fb.exporter.js.map +1 -1
- package/dist/exporters/index.d.ts +1 -0
- package/dist/exporters/index.js +1 -0
- package/dist/exporters/index.js.map +1 -1
- package/dist/exporters/santander.exporter.d.ts +12 -0
- package/dist/exporters/santander.exporter.js +63 -0
- package/dist/exporters/santander.exporter.js.map +1 -0
- package/dist/formats/auto24-xml.builder.js +2 -2
- package/dist/formats/google-xml.builder.js +3 -3
- package/dist/formats/modix-xml.builder.js +2 -2
- package/dist/formats/ooyyo-xml.builder.js +1 -1
- package/dist/formats/santander-csv.builder.d.ts +6 -0
- package/dist/formats/santander-csv.builder.js +17 -0
- package/dist/formats/santander-csv.builder.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/nest-cli.json +5 -5
- package/package.json +61 -61
- package/src/app.module.ts +38 -38
- package/src/configs/alleskralle.config.ts +15 -15
- package/src/configs/as24.config.ts +13 -13
- package/src/configs/auto24.config.ts +15 -15
- package/src/configs/autoboerse.config.ts +16 -16
- package/src/configs/autouncle.config.ts +14 -14
- package/src/configs/awin.config.ts +15 -15
- package/src/configs/by-owner.config.ts +14 -14
- package/src/configs/config.ts +83 -83
- package/src/configs/criteo.config.ts +17 -17
- package/src/configs/dasparking.config.ts +15 -15
- package/src/configs/eauto.config.ts +15 -15
- package/src/configs/evium.config.ts +18 -18
- package/src/configs/facebook-shop.config.ts +16 -16
- package/src/configs/fb.config.ts +16 -16
- package/src/configs/google.config.ts +14 -14
- package/src/configs/index.ts +22 -21
- package/src/configs/kleinanzeigeFocus.config.ts +14 -14
- package/src/configs/marktde.config.ts +18 -18
- package/src/configs/meinstadt.config.ts +15 -15
- package/src/configs/mitula.config.ts +14 -14
- package/src/configs/ooyyo.config.ts +15 -15
- package/src/configs/santander.config.ts +15 -0
- package/src/configs/trovit.config.ts +14 -14
- package/src/configs/yescar.config.ts +17 -17
- package/src/constants/autouncle.contants.ts +4 -4
- package/src/constants/fb.constants.ts +7 -7
- package/src/constants/index.ts +1 -1
- package/src/constants/modix/body-color-name.constant.ts +20 -20
- package/src/constants/modix/category.constant.ts +14 -14
- package/src/constants/modix/fuel.constant.ts +14 -14
- package/src/constants/modix/index.ts +7 -7
- package/src/constants/modix/manufacturers.constant.ts +7498 -7498
- package/src/constants/modix/transmission.constant.ts +8 -8
- package/src/constants/modix/usage-type.constant.ts +13 -13
- package/src/constants/modix/vehicle-class.constant.ts +17 -17
- package/src/enums/environment.enum.ts +5 -5
- package/src/enums/export-type.enum.ts +33 -32
- package/src/enums/file-types.enum.ts +8 -8
- package/src/enums/image-type.enum.ts +4 -4
- package/src/enums/index.ts +4 -4
- package/src/export.command.ts +37 -37
- package/src/export.schema.ts +134 -128
- package/src/exporters/as24.exporter.ts +69 -69
- package/src/exporters/auto24.exporter.ts +48 -48
- package/src/exporters/autouncle.exporter.ts +60 -58
- package/src/exporters/awin.exporter.ts +47 -47
- package/src/exporters/by-owner.exporter.ts +44 -44
- package/src/exporters/facebook-shop.exporter.ts +51 -51
- package/src/exporters/fb.exporter.ts +52 -50
- package/src/exporters/google.exporter.ts +45 -45
- package/src/exporters/index.ts +15 -14
- package/src/exporters/meinstadt.exporter.ts +55 -55
- package/src/exporters/mobile.exporter.ts +64 -64
- package/src/exporters/modix.exporter.ts +56 -56
- package/src/exporters/ooyyo.exporter.ts +48 -48
- package/src/exporters/rubrikk.exporter.ts +53 -53
- package/src/exporters/santander.exporter.ts +50 -0
- package/src/exporters/trovit.exporter.ts +51 -51
- package/src/formats/auto24-xml.builder.ts +54 -54
- package/src/formats/autouncle-json.builder.ts +20 -20
- package/src/formats/awin-csv.builder.ts +16 -16
- package/src/formats/facebook-shop.builder.ts +69 -69
- package/src/formats/fb-xml.builder.ts +71 -71
- package/src/formats/google-xml.builder.ts +35 -35
- package/src/formats/index.ts +5 -5
- package/src/formats/meinstadt-json.builder.ts +19 -19
- package/src/formats/modix-xml.builder.ts +180 -180
- package/src/formats/ooyyo-xml.builder.ts +48 -48
- package/src/formats/rubrikk-xml.builder.ts +27 -27
- package/src/formats/santander-csv.builder.ts +15 -0
- package/src/formats/trovit-xml.builder.ts +44 -44
- package/src/interfaces/atributes-wrap-item.intreface.ts +6 -6
- package/src/interfaces/dealers-mapping.interface.ts +7 -7
- package/src/interfaces/description.interface.ts +24 -24
- package/src/interfaces/export-item.interface.ts +366 -366
- package/src/interfaces/exporter.interface.ts +3 -3
- package/src/interfaces/index.ts +3 -3
- package/src/interfaces/input.interface.ts +6 -6
- package/src/interfaces/mapping-rules.interface.ts +11 -11
- package/src/interfaces/modix/index.ts +1 -1
- package/src/interfaces/modix/modix-item-list.interface.ts +5 -5
- package/src/interfaces/params.interface.ts +13 -13
- package/src/interfaces/rule-parser.interface.ts +3 -3
- package/src/main.ts +14 -14
- package/src/rules/abstract.rule.ts +37 -37
- package/src/rules/date.rule.ts +19 -19
- package/src/rules/number.rule.ts +15 -15
- package/src/rules/string.rule.ts +8 -8
- package/src/services/car.service.ts +49 -49
- package/src/services/config.service.ts +15 -15
- package/src/services/images.service.ts +207 -207
- package/src/services/index.ts +9 -9
- package/src/services/loader.service.ts +29 -29
- package/src/services/mapping.service.ts +91 -91
- package/src/services/request.service.ts +44 -44
- package/src/services/rules.service.ts +61 -61
- package/src/services/transformer.service.ts +129 -129
- package/src/services/user.service.ts +57 -57
- package/src/transformers/as24.transformer.ts +253 -253
- package/src/transformers/auto24.transfomer.ts +155 -155
- package/src/transformers/autouncle.transformer.ts +236 -236
- package/src/transformers/awin.transformer.ts +193 -193
- package/src/transformers/by-owner.transformer.ts +354 -354
- package/src/transformers/facebook-shop.transformer.ts +93 -93
- package/src/transformers/fb-description.transformer.ts +316 -316
- package/src/transformers/fb-equipment.transformer.ts +161 -161
- package/src/transformers/fb.transformer.ts +655 -655
- package/src/transformers/google.transformer.ts +169 -169
- package/src/transformers/index.ts +5 -5
- package/src/transformers/meinstadt.transformer.ts +92 -92
- package/src/transformers/mobile.transformer.ts +482 -482
- package/src/transformers/modix.transformer.ts +227 -227
- package/src/transformers/ooyyo.transformer.ts +109 -109
- package/src/transformers/rubrikk.transformer.ts +200 -200
- package/src/transformers/trovit.transformer.ts +63 -63
- package/src/utils/converter.utils.ts +15 -15
- package/src/utils/index.ts +2 -2
- package/src/utils/validator.utils.ts +7 -7
- package/tsconfig.build.json +4 -4
- package/tsconfig.json +29 -29
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
import { writeFile } from 'fs/promises';
|
|
2
|
-
import { get, union } from 'lodash';
|
|
3
|
-
import { normalize } from 'path';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { Injectable } from '@nestjs/common';
|
|
7
|
-
import { ModuleRef } from '@nestjs/core';
|
|
8
|
-
|
|
9
|
-
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
10
|
-
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
11
|
-
import { Zipper } from '@bytebrand/zipper';
|
|
12
|
-
|
|
13
|
-
import { ConfigService, LoaderService, RulesService, CarService } from '../services';
|
|
14
|
-
import { As24Transformer } from '../transformers/as24.transformer';
|
|
15
|
-
import { Exporter } from '../interfaces/exporter.interface';
|
|
16
|
-
import { convertToCSV } from '../utils/converter.utils';
|
|
17
|
-
import { FileType } from '../enums';
|
|
18
|
-
|
|
19
|
-
@Injectable()
|
|
20
|
-
export class As24Exporter implements Exporter {
|
|
21
|
-
constructor(
|
|
22
|
-
private configService: ConfigService,
|
|
23
|
-
private loaderService: LoaderService,
|
|
24
|
-
private moduleRef: ModuleRef,
|
|
25
|
-
private carService: CarService,
|
|
26
|
-
private readonly rulesService: RulesService,
|
|
27
|
-
) { }
|
|
28
|
-
|
|
29
|
-
async export(): Promise<any> {
|
|
30
|
-
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
31
|
-
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
32
|
-
|
|
33
|
-
const as24Transformer = await this.moduleRef.create(As24Transformer);
|
|
34
|
-
const processedDealers = new Set();
|
|
35
|
-
|
|
36
|
-
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
37
|
-
const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
38
|
-
|
|
39
|
-
for (let i = 0; i < chunkData.length; i += 1) {
|
|
40
|
-
const data = chunkData[i];
|
|
41
|
-
const ownerId = get(data.car, 'metaData.ownerId');
|
|
42
|
-
|
|
43
|
-
// console.time(`Transform ${data.car._id}`);
|
|
44
|
-
const transformedData = await as24Transformer.transform(data.car);
|
|
45
|
-
// console.timeEnd(`Transform ${data.car._id}`);
|
|
46
|
-
const transformedDataCSV = `${convertToCSV(transformedData)}\n`;
|
|
47
|
-
|
|
48
|
-
const filename = `${this.configService.config.pathesConfig.localConvertedDirectory}/${ownerId}.${FileType.CSV}`
|
|
49
|
-
await writeFile(filename, Buffer.from(transformedDataCSV), { flag: 'a' },);
|
|
50
|
-
|
|
51
|
-
this.carService.counter.countCar(data.images);
|
|
52
|
-
processedDealers.add(ownerId);
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
for (const dealer of processedDealers) {
|
|
57
|
-
const now = new Date();
|
|
58
|
-
const d = `${now.getFullYear()}${now.getMonth() + 1}${now.getDate()}`;
|
|
59
|
-
const fileCSV = normalize(`${this.configService.config.pathesConfig.localConvertedDirectory}/${dealer}.${FileType.CSV}`);
|
|
60
|
-
const fileZIP = normalize(`${this.configService.config.pathesConfig.localConvertedDirectory}/${d}_${dealer}.${FileType.ZIP}`);
|
|
61
|
-
|
|
62
|
-
if (await CronicleUtils.exists(fileCSV)) {
|
|
63
|
-
await Zipper.zip({ fileList: [fileCSV], dest: fileZIP });
|
|
64
|
-
await CronicleUtils.unlinkIfExists(fileCSV);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
console.log(this.carService.counter.getCountedCars());
|
|
68
|
-
}
|
|
69
|
-
}
|
|
1
|
+
import { writeFile } from 'fs/promises';
|
|
2
|
+
import { get, union } from 'lodash';
|
|
3
|
+
import { normalize } from 'path';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import { Injectable } from '@nestjs/common';
|
|
7
|
+
import { ModuleRef } from '@nestjs/core';
|
|
8
|
+
|
|
9
|
+
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
10
|
+
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
11
|
+
import { Zipper } from '@bytebrand/zipper';
|
|
12
|
+
|
|
13
|
+
import { ConfigService, LoaderService, RulesService, CarService } from '../services';
|
|
14
|
+
import { As24Transformer } from '../transformers/as24.transformer';
|
|
15
|
+
import { Exporter } from '../interfaces/exporter.interface';
|
|
16
|
+
import { convertToCSV } from '../utils/converter.utils';
|
|
17
|
+
import { FileType } from '../enums';
|
|
18
|
+
|
|
19
|
+
@Injectable()
|
|
20
|
+
export class As24Exporter implements Exporter {
|
|
21
|
+
constructor(
|
|
22
|
+
private configService: ConfigService,
|
|
23
|
+
private loaderService: LoaderService,
|
|
24
|
+
private moduleRef: ModuleRef,
|
|
25
|
+
private carService: CarService,
|
|
26
|
+
private readonly rulesService: RulesService,
|
|
27
|
+
) { }
|
|
28
|
+
|
|
29
|
+
async export(): Promise<any> {
|
|
30
|
+
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
31
|
+
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
32
|
+
|
|
33
|
+
const as24Transformer = await this.moduleRef.create(As24Transformer);
|
|
34
|
+
const processedDealers = new Set();
|
|
35
|
+
|
|
36
|
+
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
37
|
+
const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
38
|
+
|
|
39
|
+
for (let i = 0; i < chunkData.length; i += 1) {
|
|
40
|
+
const data = chunkData[i];
|
|
41
|
+
const ownerId = get(data.car, 'metaData.ownerId');
|
|
42
|
+
|
|
43
|
+
// console.time(`Transform ${data.car._id}`);
|
|
44
|
+
const transformedData = await as24Transformer.transform(data.car);
|
|
45
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
46
|
+
const transformedDataCSV = `${convertToCSV(transformedData)}\n`;
|
|
47
|
+
|
|
48
|
+
const filename = `${this.configService.config.pathesConfig.localConvertedDirectory}/${ownerId}.${FileType.CSV}`
|
|
49
|
+
await writeFile(filename, Buffer.from(transformedDataCSV), { flag: 'a' },);
|
|
50
|
+
|
|
51
|
+
this.carService.counter.countCar(data.images);
|
|
52
|
+
processedDealers.add(ownerId);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
for (const dealer of processedDealers) {
|
|
57
|
+
const now = new Date();
|
|
58
|
+
const d = `${now.getFullYear()}${now.getMonth() + 1}${now.getDate()}`;
|
|
59
|
+
const fileCSV = normalize(`${this.configService.config.pathesConfig.localConvertedDirectory}/${dealer}.${FileType.CSV}`);
|
|
60
|
+
const fileZIP = normalize(`${this.configService.config.pathesConfig.localConvertedDirectory}/${d}_${dealer}.${FileType.ZIP}`);
|
|
61
|
+
|
|
62
|
+
if (await CronicleUtils.exists(fileCSV)) {
|
|
63
|
+
await Zipper.zip({ fileList: [fileCSV], dest: fileZIP });
|
|
64
|
+
await CronicleUtils.unlinkIfExists(fileCSV);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
console.log(this.carService.counter.getCountedCars());
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { ModuleRef } from '@nestjs/core';
|
|
3
|
-
|
|
4
|
-
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
5
|
-
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
6
|
-
|
|
7
|
-
import { CarService, RulesService, ConfigService, LoaderService } from '../services';
|
|
8
|
-
import { Auto24Transformer } from '../transformers/auto24.transfomer';
|
|
9
|
-
import { Auto24XmlBuilder } from '../formats/auto24-xml.builder';
|
|
10
|
-
import { Exporter } from '../interfaces/exporter.interface';
|
|
11
|
-
|
|
12
|
-
@Injectable()
|
|
13
|
-
export class Auto24Exporter implements Exporter {
|
|
14
|
-
constructor(
|
|
15
|
-
private carService: CarService,
|
|
16
|
-
private configService: ConfigService,
|
|
17
|
-
private loaderService: LoaderService,
|
|
18
|
-
private moduleRef: ModuleRef,
|
|
19
|
-
private rulesService: RulesService,
|
|
20
|
-
) { }
|
|
21
|
-
|
|
22
|
-
async export(): Promise<void> {
|
|
23
|
-
const [fileXml] = this.configService.config.outputFiles;
|
|
24
|
-
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
25
|
-
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
26
|
-
|
|
27
|
-
const xmlBuilder = new Auto24XmlBuilder(fileXml);
|
|
28
|
-
await xmlBuilder.buildStart();
|
|
29
|
-
|
|
30
|
-
const auto24Transformer = await this.moduleRef.create(Auto24Transformer);
|
|
31
|
-
|
|
32
|
-
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
33
|
-
const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
34
|
-
|
|
35
|
-
for (let i = 0; i < chunkData.length; i += 1) {
|
|
36
|
-
const data = chunk.data[i];
|
|
37
|
-
const { car, images } = data;
|
|
38
|
-
// console.time(`Transform ${data.car._id}`);
|
|
39
|
-
await xmlBuilder.addItem(await auto24Transformer.transform(car, images), 'Deutschland');
|
|
40
|
-
// console.timeEnd(`Transform ${data.car._id}`);
|
|
41
|
-
this.carService.counter.countCar(images);
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
await xmlBuilder.buildEnd();
|
|
46
|
-
console.log(this.carService.counter.getCountedCars());
|
|
47
|
-
}
|
|
48
|
-
}
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { ModuleRef } from '@nestjs/core';
|
|
3
|
+
|
|
4
|
+
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
5
|
+
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
6
|
+
|
|
7
|
+
import { CarService, RulesService, ConfigService, LoaderService } from '../services';
|
|
8
|
+
import { Auto24Transformer } from '../transformers/auto24.transfomer';
|
|
9
|
+
import { Auto24XmlBuilder } from '../formats/auto24-xml.builder';
|
|
10
|
+
import { Exporter } from '../interfaces/exporter.interface';
|
|
11
|
+
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class Auto24Exporter implements Exporter {
|
|
14
|
+
constructor(
|
|
15
|
+
private carService: CarService,
|
|
16
|
+
private configService: ConfigService,
|
|
17
|
+
private loaderService: LoaderService,
|
|
18
|
+
private moduleRef: ModuleRef,
|
|
19
|
+
private rulesService: RulesService,
|
|
20
|
+
) { }
|
|
21
|
+
|
|
22
|
+
async export(): Promise<void> {
|
|
23
|
+
const [fileXml] = this.configService.config.outputFiles;
|
|
24
|
+
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
25
|
+
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
26
|
+
|
|
27
|
+
const xmlBuilder = new Auto24XmlBuilder(fileXml);
|
|
28
|
+
await xmlBuilder.buildStart();
|
|
29
|
+
|
|
30
|
+
const auto24Transformer = await this.moduleRef.create(Auto24Transformer);
|
|
31
|
+
|
|
32
|
+
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
33
|
+
const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
34
|
+
|
|
35
|
+
for (let i = 0; i < chunkData.length; i += 1) {
|
|
36
|
+
const data = chunk.data[i];
|
|
37
|
+
const { car, images } = data;
|
|
38
|
+
// console.time(`Transform ${data.car._id}`);
|
|
39
|
+
await xmlBuilder.addItem(await auto24Transformer.transform(car, images), 'Deutschland');
|
|
40
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
41
|
+
this.carService.counter.countCar(images);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
await xmlBuilder.buildEnd();
|
|
46
|
+
console.log(this.carService.counter.getCountedCars());
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -1,58 +1,60 @@
|
|
|
1
|
-
import { get } from 'lodash';
|
|
2
|
-
|
|
3
|
-
import { Injectable } from '@nestjs/common';
|
|
4
|
-
import { ModuleRef } from '@nestjs/core';
|
|
5
|
-
|
|
6
|
-
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
7
|
-
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
8
|
-
|
|
9
|
-
import { AutouncleTransformer } from '../transformers/autouncle.transformer';
|
|
10
|
-
import { AutouncleJsonBuilder } from '../formats/autouncle-json.builder';
|
|
11
|
-
import { CarService, RulesService, LoaderService, ConfigService } from '../services';
|
|
12
|
-
import { Exporter } from '../interfaces/exporter.interface';
|
|
13
|
-
|
|
14
|
-
@Injectable()
|
|
15
|
-
export class AutouncleExporter implements Exporter {
|
|
16
|
-
constructor(
|
|
17
|
-
private carService: CarService,
|
|
18
|
-
private configService: ConfigService,
|
|
19
|
-
private loaderService: LoaderService,
|
|
20
|
-
private rulesService: RulesService,
|
|
21
|
-
private moduleRef: ModuleRef,
|
|
22
|
-
) {}
|
|
23
|
-
|
|
24
|
-
async export(): Promise<void> {
|
|
25
|
-
const [fileName] = this.configService.config.outputFiles;
|
|
26
|
-
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
27
|
-
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
28
|
-
|
|
29
|
-
const autouncleJsonBuilder = new AutouncleJsonBuilder(fileName);
|
|
30
|
-
await autouncleJsonBuilder.buildStart();
|
|
31
|
-
|
|
32
|
-
const autouncleTransformer = await this.moduleRef.create(AutouncleTransformer);
|
|
33
|
-
|
|
34
|
-
let firstCar = true;
|
|
35
|
-
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
36
|
-
chunk.data = chunk.data.filter(e => this.carService.filterCar(e, this.rulesService.rules));
|
|
37
|
-
|
|
38
|
-
for (const data of chunk.data) {
|
|
39
|
-
const ownerId = get(data.car, 'metaData.ownerId');
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
// console.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
1
|
+
import { get } from 'lodash';
|
|
2
|
+
|
|
3
|
+
import { Injectable } from '@nestjs/common';
|
|
4
|
+
import { ModuleRef } from '@nestjs/core';
|
|
5
|
+
|
|
6
|
+
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
7
|
+
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
8
|
+
|
|
9
|
+
import { AutouncleTransformer } from '../transformers/autouncle.transformer';
|
|
10
|
+
import { AutouncleJsonBuilder } from '../formats/autouncle-json.builder';
|
|
11
|
+
import { CarService, RulesService, LoaderService, ConfigService } from '../services';
|
|
12
|
+
import { Exporter } from '../interfaces/exporter.interface';
|
|
13
|
+
|
|
14
|
+
@Injectable()
|
|
15
|
+
export class AutouncleExporter implements Exporter {
|
|
16
|
+
constructor(
|
|
17
|
+
private carService: CarService,
|
|
18
|
+
private configService: ConfigService,
|
|
19
|
+
private loaderService: LoaderService,
|
|
20
|
+
private rulesService: RulesService,
|
|
21
|
+
private moduleRef: ModuleRef,
|
|
22
|
+
) {}
|
|
23
|
+
|
|
24
|
+
async export(): Promise<void> {
|
|
25
|
+
const [fileName] = this.configService.config.outputFiles;
|
|
26
|
+
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
27
|
+
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
28
|
+
|
|
29
|
+
const autouncleJsonBuilder = new AutouncleJsonBuilder(fileName);
|
|
30
|
+
await autouncleJsonBuilder.buildStart();
|
|
31
|
+
|
|
32
|
+
const autouncleTransformer = await this.moduleRef.create(AutouncleTransformer);
|
|
33
|
+
|
|
34
|
+
let firstCar = true;
|
|
35
|
+
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
36
|
+
chunk.data = chunk.data.filter(e => this.carService.filterCar(e, this.rulesService.rules));
|
|
37
|
+
|
|
38
|
+
for (const data of chunk.data) {
|
|
39
|
+
const ownerId = get(data.car, 'metaData.ownerId');
|
|
40
|
+
// NOTES:: it must be temporary solution
|
|
41
|
+
const owner = await this.carService.getOwner(ownerId).catch((error: any) => { console.error(error); return null; });
|
|
42
|
+
if (!owner) { console.log(`Skip car because owner ${ownerId} is not a dealer`); continue; }
|
|
43
|
+
// console.time(`Transform ${data.car._id}`);
|
|
44
|
+
const car = await autouncleTransformer.transform({ owner, ...data });
|
|
45
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
46
|
+
|
|
47
|
+
await autouncleJsonBuilder.addItem(car, firstCar);
|
|
48
|
+
|
|
49
|
+
this.carService.counter.countCar(data.images);
|
|
50
|
+
|
|
51
|
+
if (firstCar) {
|
|
52
|
+
firstCar = false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
await autouncleJsonBuilder.buildEnd();
|
|
58
|
+
console.log(this.carService.counter.getCountedCars());
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { ModuleRef } from '@nestjs/core';
|
|
3
|
-
|
|
4
|
-
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
5
|
-
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
6
|
-
|
|
7
|
-
import { CarService, ConfigService, LoaderService, RulesService } from '../services';
|
|
8
|
-
import { Exporter } from '../interfaces/exporter.interface';
|
|
9
|
-
import { AwinCSVBuilder } from '../formats';
|
|
10
|
-
import { AwinTransformer } from '../transformers';
|
|
11
|
-
|
|
12
|
-
@Injectable()
|
|
13
|
-
export class AwinExporter implements Exporter {
|
|
14
|
-
constructor(
|
|
15
|
-
private carService: CarService,
|
|
16
|
-
private configService: ConfigService,
|
|
17
|
-
private loaderService: LoaderService,
|
|
18
|
-
private moduleRef: ModuleRef,
|
|
19
|
-
private rulesService: RulesService,
|
|
20
|
-
) { }
|
|
21
|
-
|
|
22
|
-
async export(): Promise<void> {
|
|
23
|
-
const [fileCSV] = this.configService.config.outputFiles;
|
|
24
|
-
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
25
|
-
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
26
|
-
|
|
27
|
-
const awinCSVBuilder = new AwinCSVBuilder(fileCSV);
|
|
28
|
-
await awinCSVBuilder.buildStart();
|
|
29
|
-
|
|
30
|
-
const awinTransformer = await this.moduleRef.create(AwinTransformer);
|
|
31
|
-
|
|
32
|
-
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
33
|
-
chunk.data = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
34
|
-
|
|
35
|
-
for (let i = 0; i < chunk.data.length; i += 1) {
|
|
36
|
-
const data = chunk.data[i];
|
|
37
|
-
const transformedCar = await awinTransformer.transform(data);
|
|
38
|
-
await awinCSVBuilder.addItem(transformedCar);
|
|
39
|
-
this.carService.counter.countCar(data.images);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
console.log(this.carService.counter.getCountedCars());
|
|
44
|
-
|
|
45
|
-
await awinCSVBuilder.buildEnd();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { ModuleRef } from '@nestjs/core';
|
|
3
|
+
|
|
4
|
+
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
5
|
+
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
6
|
+
|
|
7
|
+
import { CarService, ConfigService, LoaderService, RulesService } from '../services';
|
|
8
|
+
import { Exporter } from '../interfaces/exporter.interface';
|
|
9
|
+
import { AwinCSVBuilder } from '../formats';
|
|
10
|
+
import { AwinTransformer } from '../transformers';
|
|
11
|
+
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class AwinExporter implements Exporter {
|
|
14
|
+
constructor(
|
|
15
|
+
private carService: CarService,
|
|
16
|
+
private configService: ConfigService,
|
|
17
|
+
private loaderService: LoaderService,
|
|
18
|
+
private moduleRef: ModuleRef,
|
|
19
|
+
private rulesService: RulesService,
|
|
20
|
+
) { }
|
|
21
|
+
|
|
22
|
+
async export(): Promise<void> {
|
|
23
|
+
const [fileCSV] = this.configService.config.outputFiles;
|
|
24
|
+
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
25
|
+
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
26
|
+
|
|
27
|
+
const awinCSVBuilder = new AwinCSVBuilder(fileCSV);
|
|
28
|
+
await awinCSVBuilder.buildStart();
|
|
29
|
+
|
|
30
|
+
const awinTransformer = await this.moduleRef.create(AwinTransformer);
|
|
31
|
+
|
|
32
|
+
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
33
|
+
chunk.data = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
34
|
+
|
|
35
|
+
for (let i = 0; i < chunk.data.length; i += 1) {
|
|
36
|
+
const data = chunk.data[i];
|
|
37
|
+
const transformedCar = await awinTransformer.transform(data);
|
|
38
|
+
await awinCSVBuilder.addItem(transformedCar);
|
|
39
|
+
this.carService.counter.countCar(data.images);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
console.log(this.carService.counter.getCountedCars());
|
|
44
|
+
|
|
45
|
+
await awinCSVBuilder.buildEnd();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import { ConfigService, LoaderService, CarService, RulesService } from '../services';
|
|
2
|
-
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
3
|
-
import { Exporter } from '../interfaces/exporter.interface';
|
|
4
|
-
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
5
|
-
import { Injectable } from '@nestjs/common';
|
|
6
|
-
import { ModuleRef } from '@nestjs/core';
|
|
7
|
-
import { ByOwnerTransformer } from '../transformers/by-owner.transformer';
|
|
8
|
-
import { createWriteStream } from 'fs';
|
|
9
|
-
|
|
10
|
-
const createCsvWriter = require('csv-write-stream');
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @deprecated
|
|
14
|
-
*/
|
|
15
|
-
@Injectable()
|
|
16
|
-
export class ByOwnerExporter implements Exporter {
|
|
17
|
-
constructor(
|
|
18
|
-
private configService: ConfigService,
|
|
19
|
-
private loaderService: LoaderService,
|
|
20
|
-
private moduleRef: ModuleRef,
|
|
21
|
-
private carService: CarService,
|
|
22
|
-
private rulesService: RulesService,
|
|
23
|
-
) {}
|
|
24
|
-
|
|
25
|
-
async export(): Promise<void> {
|
|
26
|
-
const [fileName] = this.configService.config.outputFiles;
|
|
27
|
-
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
28
|
-
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
29
|
-
|
|
30
|
-
const byOwnerTransformer = await this.moduleRef.create(ByOwnerTransformer);
|
|
31
|
-
const csvWriter = createCsvWriter();
|
|
32
|
-
csvWriter.pipe(createWriteStream(fileName));
|
|
33
|
-
|
|
34
|
-
let index = 0;
|
|
35
|
-
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
36
|
-
const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
37
|
-
chunkData.map(({ car }) => byOwnerTransformer.transform(car, (index += 1))).forEach(car => csvWriter.write(car));
|
|
38
|
-
chunk.data = null;
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
await csvWriter.end();
|
|
42
|
-
console.log(this.carService.counter.getCountedCars());
|
|
43
|
-
}
|
|
44
|
-
}
|
|
1
|
+
import { ConfigService, LoaderService, CarService, RulesService } from '../services';
|
|
2
|
+
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
3
|
+
import { Exporter } from '../interfaces/exporter.interface';
|
|
4
|
+
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
5
|
+
import { Injectable } from '@nestjs/common';
|
|
6
|
+
import { ModuleRef } from '@nestjs/core';
|
|
7
|
+
import { ByOwnerTransformer } from '../transformers/by-owner.transformer';
|
|
8
|
+
import { createWriteStream } from 'fs';
|
|
9
|
+
|
|
10
|
+
const createCsvWriter = require('csv-write-stream');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @deprecated
|
|
14
|
+
*/
|
|
15
|
+
@Injectable()
|
|
16
|
+
export class ByOwnerExporter implements Exporter {
|
|
17
|
+
constructor(
|
|
18
|
+
private configService: ConfigService,
|
|
19
|
+
private loaderService: LoaderService,
|
|
20
|
+
private moduleRef: ModuleRef,
|
|
21
|
+
private carService: CarService,
|
|
22
|
+
private rulesService: RulesService,
|
|
23
|
+
) {}
|
|
24
|
+
|
|
25
|
+
async export(): Promise<void> {
|
|
26
|
+
const [fileName] = this.configService.config.outputFiles;
|
|
27
|
+
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
28
|
+
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
29
|
+
|
|
30
|
+
const byOwnerTransformer = await this.moduleRef.create(ByOwnerTransformer);
|
|
31
|
+
const csvWriter = createCsvWriter();
|
|
32
|
+
csvWriter.pipe(createWriteStream(fileName));
|
|
33
|
+
|
|
34
|
+
let index = 0;
|
|
35
|
+
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
36
|
+
const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
37
|
+
chunkData.map(({ car }) => byOwnerTransformer.transform(car, (index += 1))).forEach(car => csvWriter.write(car));
|
|
38
|
+
chunk.data = null;
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
await csvWriter.end();
|
|
42
|
+
console.log(this.carService.counter.getCountedCars());
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { ModuleRef } from '@nestjs/core';
|
|
3
|
-
|
|
4
|
-
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
5
|
-
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
6
|
-
|
|
7
|
-
import { CarService, ConfigService, LoaderService, RulesService } from '../services';
|
|
8
|
-
import { Exporter } from '../interfaces/exporter.interface';
|
|
9
|
-
import { FacebookShopTransformer } from '../transformers';
|
|
10
|
-
import { FacebookShopXmlBuilder } from '../formats';
|
|
11
|
-
|
|
12
|
-
@Injectable()
|
|
13
|
-
export class FacebookShopExporter implements Exporter {
|
|
14
|
-
constructor(
|
|
15
|
-
private carService: CarService,
|
|
16
|
-
private configService: ConfigService,
|
|
17
|
-
private loaderService: LoaderService,
|
|
18
|
-
private moduleRef: ModuleRef,
|
|
19
|
-
private rulesService: RulesService,
|
|
20
|
-
) { }
|
|
21
|
-
|
|
22
|
-
async export(): Promise<void> {
|
|
23
|
-
const [fileXml] = this.configService.config.outputFiles;
|
|
24
|
-
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
25
|
-
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
26
|
-
|
|
27
|
-
const facebookShopXmkBuilder = new FacebookShopXmlBuilder(fileXml);
|
|
28
|
-
await facebookShopXmkBuilder.buildStart();
|
|
29
|
-
|
|
30
|
-
const facebookShopTransformer = await this.moduleRef.create(FacebookShopTransformer);
|
|
31
|
-
|
|
32
|
-
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
33
|
-
const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
34
|
-
|
|
35
|
-
for (let i = 0; i < chunkData.length; i += 1) {
|
|
36
|
-
const data = chunk.data[i];
|
|
37
|
-
|
|
38
|
-
// console.time(`Transform ${data.car._id}`);
|
|
39
|
-
const transformedCar = await facebookShopTransformer.transform(data);
|
|
40
|
-
// console.timeEnd(`Transform ${data.car._id}`);
|
|
41
|
-
|
|
42
|
-
await facebookShopXmkBuilder.addItem(transformedCar);
|
|
43
|
-
this.carService.counter.countCar(data.images);
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
await facebookShopXmkBuilder.buildEnd();
|
|
48
|
-
|
|
49
|
-
console.log(this.carService.counter.getCountedCars());
|
|
50
|
-
}
|
|
51
|
-
}
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { ModuleRef } from '@nestjs/core';
|
|
3
|
+
|
|
4
|
+
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
5
|
+
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
6
|
+
|
|
7
|
+
import { CarService, ConfigService, LoaderService, RulesService } from '../services';
|
|
8
|
+
import { Exporter } from '../interfaces/exporter.interface';
|
|
9
|
+
import { FacebookShopTransformer } from '../transformers';
|
|
10
|
+
import { FacebookShopXmlBuilder } from '../formats';
|
|
11
|
+
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class FacebookShopExporter implements Exporter {
|
|
14
|
+
constructor(
|
|
15
|
+
private carService: CarService,
|
|
16
|
+
private configService: ConfigService,
|
|
17
|
+
private loaderService: LoaderService,
|
|
18
|
+
private moduleRef: ModuleRef,
|
|
19
|
+
private rulesService: RulesService,
|
|
20
|
+
) { }
|
|
21
|
+
|
|
22
|
+
async export(): Promise<void> {
|
|
23
|
+
const [fileXml] = this.configService.config.outputFiles;
|
|
24
|
+
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
25
|
+
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
26
|
+
|
|
27
|
+
const facebookShopXmkBuilder = new FacebookShopXmlBuilder(fileXml);
|
|
28
|
+
await facebookShopXmkBuilder.buildStart();
|
|
29
|
+
|
|
30
|
+
const facebookShopTransformer = await this.moduleRef.create(FacebookShopTransformer);
|
|
31
|
+
|
|
32
|
+
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
33
|
+
const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
34
|
+
|
|
35
|
+
for (let i = 0; i < chunkData.length; i += 1) {
|
|
36
|
+
const data = chunk.data[i];
|
|
37
|
+
|
|
38
|
+
// console.time(`Transform ${data.car._id}`);
|
|
39
|
+
const transformedCar = await facebookShopTransformer.transform(data);
|
|
40
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
41
|
+
|
|
42
|
+
await facebookShopXmkBuilder.addItem(transformedCar);
|
|
43
|
+
this.carService.counter.countCar(data.images);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
await facebookShopXmkBuilder.buildEnd();
|
|
48
|
+
|
|
49
|
+
console.log(this.carService.counter.getCountedCars());
|
|
50
|
+
}
|
|
51
|
+
}
|