@bytebrand/export-cars 1.5.2 → 1.6.0
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/dist/config/alleskralle.config.js +3 -5
- package/dist/config/alleskralle.config.js.map +1 -1
- package/dist/config/as24.config.js +3 -1
- package/dist/config/as24.config.js.map +1 -1
- package/dist/config/auto24.config.js +3 -3
- package/dist/config/auto24.config.js.map +1 -1
- package/dist/config/autoboerse.config.js +5 -5
- package/dist/config/autoboerse.config.js.map +1 -1
- package/dist/config/autouncle.config.js +3 -2
- package/dist/config/autouncle.config.js.map +1 -1
- package/dist/config/by-owner.config.js +0 -1
- package/dist/config/by-owner.config.js.map +1 -1
- package/dist/config/config.d.ts +8 -12
- package/dist/config/config.js +14 -20
- package/dist/config/config.js.map +1 -1
- package/dist/config/criteo.config.js +3 -1
- package/dist/config/criteo.config.js.map +1 -1
- package/dist/config/dasparking.config.js +2 -4
- package/dist/config/dasparking.config.js.map +1 -1
- package/dist/config/eauto.config.js +4 -3
- package/dist/config/eauto.config.js.map +1 -1
- package/dist/config/fb.config.js +2 -1
- package/dist/config/fb.config.js.map +1 -1
- package/dist/config/google.config.js +2 -1
- package/dist/config/google.config.js.map +1 -1
- package/dist/config/index.d.ts +16 -1
- package/dist/config/index.js +16 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/{kleinanzeigeFocus.config.js → kleinanzeigefocus.config.js} +2 -3
- package/dist/config/kleinanzeigefocus.config.js.map +1 -0
- package/dist/config/marktde.config.js +4 -3
- package/dist/config/marktde.config.js.map +1 -1
- package/dist/config/meinstadt.config.js +2 -3
- package/dist/config/meinstadt.config.js.map +1 -1
- package/dist/config/ooyyo.config.js +2 -3
- package/dist/config/ooyyo.config.js.map +1 -1
- package/dist/config/yescar.config.js +4 -3
- package/dist/config/yescar.config.js.map +1 -1
- package/dist/enums/export-type.enum.d.ts +0 -1
- package/dist/enums/export-type.enum.js +0 -1
- package/dist/enums/export-type.enum.js.map +1 -1
- package/dist/enums/file-types.enum.d.ts +7 -7
- package/dist/enums/file-types.enum.js +11 -10
- package/dist/enums/file-types.enum.js.map +1 -1
- package/dist/export.schema.d.ts +4 -33
- package/dist/export.schema.js +32 -61
- package/dist/export.schema.js.map +1 -1
- package/dist/exporters/as24.exporter.d.ts +3 -5
- package/dist/exporters/as24.exporter.js +20 -22
- package/dist/exporters/as24.exporter.js.map +1 -1
- package/dist/exporters/auto24.exporter.d.ts +1 -1
- package/dist/exporters/auto24.exporter.js +8 -17
- package/dist/exporters/auto24.exporter.js.map +1 -1
- package/dist/exporters/autouncle.exporter.d.ts +3 -5
- package/dist/exporters/autouncle.exporter.js +19 -35
- package/dist/exporters/autouncle.exporter.js.map +1 -1
- package/dist/exporters/by-owner.exporter.d.ts +2 -3
- package/dist/exporters/by-owner.exporter.js +4 -7
- package/dist/exporters/by-owner.exporter.js.map +1 -1
- package/dist/exporters/fb.exporter.d.ts +2 -3
- package/dist/exporters/fb.exporter.js +10 -16
- package/dist/exporters/fb.exporter.js.map +1 -1
- package/dist/exporters/google.exporter.d.ts +3 -4
- package/dist/exporters/google.exporter.js +13 -19
- package/dist/exporters/google.exporter.js.map +1 -1
- package/dist/exporters/index.d.ts +10 -1
- package/dist/exporters/index.js +10 -1
- package/dist/exporters/index.js.map +1 -1
- package/dist/exporters/meinstadt.exporter.d.ts +1 -1
- package/dist/exporters/meinstadt.exporter.js +18 -34
- package/dist/exporters/meinstadt.exporter.js.map +1 -1
- package/dist/exporters/mobile.exporter.d.ts +2 -5
- package/dist/exporters/mobile.exporter.js +14 -44
- package/dist/exporters/mobile.exporter.js.map +1 -1
- package/dist/exporters/modix.exporter.d.ts +2 -2
- package/dist/exporters/modix.exporter.js +7 -11
- package/dist/exporters/modix.exporter.js.map +1 -1
- package/dist/exporters/ooyyo.exporter.js +6 -9
- package/dist/exporters/ooyyo.exporter.js.map +1 -1
- package/dist/exporters/rubrikk.exporter.js +8 -14
- package/dist/exporters/rubrikk.exporter.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/services/car.service.js +1 -4
- package/dist/services/car.service.js.map +1 -1
- package/dist/services/user.service.d.ts +0 -2
- package/dist/services/user.service.js +0 -3
- package/dist/services/user.service.js.map +1 -1
- package/dist/transformers/as24.transformer.d.ts +4 -2
- package/dist/transformers/as24.transformer.js +25 -3
- package/dist/transformers/as24.transformer.js.map +1 -1
- package/dist/transformers/auto24.transfomer.js +1 -1
- package/dist/transformers/auto24.transfomer.js.map +1 -1
- package/dist/transformers/autouncle.transformer.js +1 -1
- package/dist/transformers/autouncle.transformer.js.map +1 -1
- package/dist/transformers/fb.transformer.js +2 -2
- package/dist/transformers/fb.transformer.js.map +1 -1
- package/dist/transformers/google.transformer.js +3 -3
- package/dist/transformers/google.transformer.js.map +1 -1
- package/dist/transformers/meinstadt.transformer.js +1 -1
- package/dist/transformers/meinstadt.transformer.js.map +1 -1
- package/dist/transformers/mobile.transformer.js +1 -1
- package/dist/transformers/mobile.transformer.js.map +1 -1
- package/dist/transformers/modix.transformer.d.ts +1 -3
- package/dist/transformers/modix.transformer.js +4 -12
- package/dist/transformers/modix.transformer.js.map +1 -1
- package/dist/transformers/ooyyo.transformer.js +2 -2
- package/dist/transformers/ooyyo.transformer.js.map +1 -1
- package/dist/transformers/rubrikk.transformer.js +1 -1
- package/dist/transformers/rubrikk.transformer.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/src/config/alleskralle.config.ts +4 -6
- package/src/config/as24.config.ts +3 -1
- package/src/config/auto24.config.ts +4 -4
- package/src/config/autoboerse.config.ts +5 -5
- package/src/config/autouncle.config.ts +3 -2
- package/src/config/by-owner.config.ts +0 -1
- package/src/config/config.ts +14 -21
- package/src/config/criteo.config.ts +3 -1
- package/src/config/dasparking.config.ts +3 -5
- package/src/config/eauto.config.ts +4 -3
- package/src/config/fb.config.ts +2 -1
- package/src/config/google.config.ts +2 -1
- package/src/config/index.ts +16 -1
- package/src/config/kleinanzeigeFocus.config.ts +2 -3
- package/src/config/marktde.config.ts +4 -3
- package/src/config/meinstadt.config.ts +3 -4
- package/src/config/ooyyo.config.ts +3 -4
- package/src/config/yescar.config.ts +7 -3
- package/src/enums/export-type.enum.ts +12 -1
- package/src/enums/file-types.enum.ts +8 -8
- package/src/export.schema.ts +35 -33
- package/src/exporters/as24.exporter.ts +27 -30
- package/src/exporters/auto24.exporter.ts +15 -23
- package/src/exporters/autouncle.exporter.ts +27 -38
- package/src/exporters/by-owner.exporter.ts +7 -5
- package/src/exporters/fb.exporter.ts +11 -13
- package/src/exporters/google.exporter.ts +16 -17
- package/src/exporters/index.ts +10 -1
- package/src/exporters/meinstadt.exporter.ts +24 -41
- package/src/exporters/mobile.exporter.ts +21 -63
- package/src/exporters/modix.exporter.ts +15 -14
- package/src/exporters/ooyyo.exporter.ts +10 -11
- package/src/exporters/rubrikk.exporter.ts +11 -16
- package/src/main.ts +1 -1
- package/src/services/car.service.ts +3 -5
- package/src/services/user.service.ts +1 -5
- package/src/transformers/as24.transformer.ts +29 -5
- package/src/transformers/auto24.transfomer.ts +1 -1
- package/src/transformers/autouncle.transformer.ts +1 -1
- package/src/transformers/fb.transformer.ts +2 -2
- package/src/transformers/google.transformer.ts +3 -3
- package/src/transformers/meinstadt.transformer.ts +1 -1
- package/src/transformers/mobile.transformer.ts +1 -1
- package/src/transformers/modix.transformer.ts +8 -17
- package/src/transformers/ooyyo.transformer.ts +2 -2
- package/src/transformers/rubrikk.transformer.ts +1 -1
- package/tsconfig.json +1 -1
- package/dist/config/autoborse.config.d.ts +0 -5
- package/dist/config/autoborse.config.js +0 -15
- package/dist/config/autoborse.config.js.map +0 -1
- package/dist/config/kleinanzeigeFocus.config.js.map +0 -1
- package/src/config/autoborse.config.ts +0 -12
- /package/dist/config/{kleinanzeigeFocus.config.d.ts → kleinanzeigefocus.config.d.ts} +0 -0
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { Exporter } from '../interfaces/exporter.interface';
|
|
3
|
-
import { CarService, ConfigService, LoaderService } from '../services';
|
|
4
2
|
import { ModuleRef } from '@nestjs/core';
|
|
3
|
+
|
|
5
4
|
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
6
|
-
import { ModixXmlBuilder } from '../formats';
|
|
7
|
-
import { ModixTransformer } from '../transformers';
|
|
8
5
|
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
9
6
|
|
|
7
|
+
import { CarService, ConfigService, LoaderService } from '../services';
|
|
8
|
+
import { Exporter } from '../interfaces/exporter.interface';
|
|
9
|
+
import { ModixTransformer } from '../transformers';
|
|
10
|
+
import { ModixXmlBuilder } from '../formats';
|
|
11
|
+
|
|
10
12
|
@Injectable()
|
|
11
13
|
export class ModixExporter implements Exporter {
|
|
12
14
|
constructor(
|
|
@@ -16,30 +18,29 @@ export class ModixExporter implements Exporter {
|
|
|
16
18
|
private moduleRef: ModuleRef,
|
|
17
19
|
) {}
|
|
18
20
|
async export(): Promise<void> {
|
|
19
|
-
for (const file of this.configService.config.outputFiles) {
|
|
20
|
-
const exists = await CronicleUtils.exists(file);
|
|
21
|
-
exists && (await CronicleUtils.unlink(file));
|
|
22
|
-
}
|
|
23
|
-
|
|
24
21
|
const [fileXml] = this.configService.config.outputFiles;
|
|
22
|
+
await CronicleUtils.unlinkIfExists(fileXml);
|
|
25
23
|
|
|
26
24
|
const modixXmlBuilder = new ModixXmlBuilder(fileXml);
|
|
25
|
+
await modixXmlBuilder.buildStart();
|
|
26
|
+
|
|
27
27
|
const modixTransformer = await this.moduleRef.create(ModixTransformer);
|
|
28
28
|
|
|
29
|
-
await modixXmlBuilder.buildStart();
|
|
30
29
|
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
31
30
|
if (chunk && chunk.data) {
|
|
32
31
|
for (let i = 0; i < chunk.data.length; i += 1) {
|
|
33
32
|
const data = chunk.data[i];
|
|
34
|
-
const { car, images } = data;
|
|
35
33
|
|
|
36
|
-
const transformed_car = await modixTransformer.transform(
|
|
34
|
+
const transformed_car = await modixTransformer.transform(data);
|
|
37
35
|
await modixXmlBuilder.addItem(transformed_car);
|
|
38
|
-
|
|
36
|
+
|
|
37
|
+
this.carService.counter.countCar(data.images);
|
|
39
38
|
}
|
|
40
|
-
|
|
39
|
+
|
|
41
40
|
}
|
|
42
41
|
});
|
|
42
|
+
|
|
43
43
|
await modixXmlBuilder.buildEnd();
|
|
44
|
+
console.log(this.carService.counter.getCountedCars())
|
|
44
45
|
}
|
|
45
46
|
}
|
|
@@ -16,20 +16,17 @@ export class OoyyoExporter implements Exporter {
|
|
|
16
16
|
private loaderService: LoaderService,
|
|
17
17
|
private moduleRef: ModuleRef,
|
|
18
18
|
private rulesService: RulesService,
|
|
19
|
-
) {}
|
|
19
|
+
) { }
|
|
20
20
|
|
|
21
21
|
async export(): Promise<void> {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
const [fileXml, fileGZ] = this.configService.config.outputFiles;
|
|
23
|
+
await Promise.all([CronicleUtils.unlinkIfExists(fileXml), CronicleUtils.unlinkIfExists(fileGZ)]);
|
|
24
|
+
|
|
25
|
+
const ooyyoXmlBuilder = new OoyyoXmlBuilder(fileXml);
|
|
26
|
+
await ooyyoXmlBuilder.buildStart();
|
|
26
27
|
|
|
27
|
-
const [fileCarXml, fileGZ] = this.configService.config.outputFiles;
|
|
28
|
-
const ooyyoXmlBuilder = new OoyyoXmlBuilder(fileCarXml);
|
|
29
28
|
const ooyyoTransformer = await this.moduleRef.create(OoyyoTransformer);
|
|
30
29
|
|
|
31
|
-
await ooyyoXmlBuilder.buildStart();
|
|
32
|
-
|
|
33
30
|
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
34
31
|
const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
35
32
|
|
|
@@ -38,14 +35,16 @@ export class OoyyoExporter implements Exporter {
|
|
|
38
35
|
const data = chunk.data[i];
|
|
39
36
|
const { car, images } = data;
|
|
40
37
|
await ooyyoXmlBuilder.addItem(ooyyoTransformer.transform(car, images));
|
|
38
|
+
|
|
41
39
|
this.carService.counter.countCar(images);
|
|
42
40
|
}
|
|
43
|
-
|
|
41
|
+
|
|
44
42
|
}
|
|
45
43
|
});
|
|
46
44
|
|
|
47
45
|
await ooyyoXmlBuilder.buildEnd();
|
|
46
|
+
console.log(this.carService.counter.getCountedCars());
|
|
48
47
|
|
|
49
|
-
await Zipper.tar({ dest: fileGZ, fileList: [
|
|
48
|
+
await Zipper.tar({ dest: fileGZ, fileList: [fileXml] });
|
|
50
49
|
}
|
|
51
50
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common';
|
|
2
2
|
import { ModuleRef } from '@nestjs/core';
|
|
3
3
|
|
|
4
|
+
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
4
5
|
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
5
6
|
import { Zipper } from '@bytebrand/zipper';
|
|
6
7
|
|
|
7
8
|
import { CarService, ConfigService, LoaderService, RulesService } from '../services';
|
|
8
9
|
import { Exporter } from '../interfaces/exporter.interface';
|
|
9
|
-
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
10
10
|
import { RubrikkTransformer } from '../transformers';
|
|
11
11
|
import { RubrikkXmlBuilder } from '../formats';
|
|
12
12
|
|
|
@@ -18,40 +18,35 @@ export class RubrikkExporter implements Exporter {
|
|
|
18
18
|
private loaderService: LoaderService,
|
|
19
19
|
private moduleRef: ModuleRef,
|
|
20
20
|
private rulesService: RulesService,
|
|
21
|
-
) {}
|
|
21
|
+
) { }
|
|
22
22
|
|
|
23
23
|
async export(): Promise<void> {
|
|
24
|
-
for (const file of this.configService.config.outputFiles) {
|
|
25
|
-
const exists = await CronicleUtils.exists(file);
|
|
26
|
-
exists && (await CronicleUtils.unlink(file));
|
|
27
|
-
}
|
|
28
|
-
|
|
29
24
|
const [fileXml, fileGZ] = this.configService.config.outputFiles;
|
|
25
|
+
await Promise.all([CronicleUtils.unlinkIfExists(fileXml), CronicleUtils.unlinkIfExists(fileGZ)]);
|
|
30
26
|
|
|
31
27
|
const rubrikkXmlBuilder = new RubrikkXmlBuilder(fileXml);
|
|
28
|
+
await rubrikkXmlBuilder.buildStart();
|
|
29
|
+
|
|
32
30
|
const rubrikkTransformer = await this.moduleRef.create(RubrikkTransformer);
|
|
33
31
|
|
|
34
|
-
await rubrikkXmlBuilder.buildStart();
|
|
35
32
|
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
36
33
|
const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
37
34
|
|
|
38
35
|
if (chunk && chunkData) {
|
|
39
36
|
for (let i = 0; i < chunk.data.length; i += 1) {
|
|
40
37
|
const data = chunk.data[i];
|
|
41
|
-
const { car, images } = data;
|
|
42
38
|
|
|
43
|
-
const
|
|
39
|
+
const transformedCar = await rubrikkTransformer.transform(data);
|
|
44
40
|
|
|
45
|
-
await rubrikkXmlBuilder.addItem(
|
|
46
|
-
this.carService.counter.countCar(images);
|
|
41
|
+
await rubrikkXmlBuilder.addItem(transformedCar);
|
|
42
|
+
this.carService.counter.countCar(data.images);
|
|
47
43
|
}
|
|
48
|
-
chunk.data = null;
|
|
49
44
|
}
|
|
50
45
|
});
|
|
46
|
+
|
|
51
47
|
await rubrikkXmlBuilder.buildEnd();
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
49
|
+
fileGZ && await Zipper.tar({ dest: fileGZ, fileList: [fileXml] });
|
|
50
|
+
console.log(this.carService.counter.getCountedCars());
|
|
56
51
|
}
|
|
57
52
|
}
|
package/src/main.ts
CHANGED
|
@@ -16,7 +16,7 @@ export class CarService {
|
|
|
16
16
|
@Inject(CACHE_MANAGER) private cacheManager: Cache,
|
|
17
17
|
private bottleneck: Bottleneck,
|
|
18
18
|
private requestService: RequestService,
|
|
19
|
-
) {}
|
|
19
|
+
) { }
|
|
20
20
|
|
|
21
21
|
private _counter: CarsCounter;
|
|
22
22
|
|
|
@@ -31,6 +31,7 @@ export class CarService {
|
|
|
31
31
|
return rules.every(e => e.applyRule(car));
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
// deprecated
|
|
34
35
|
isCarNew({ car }: { car: DataSchemes.Car }): boolean {
|
|
35
36
|
if (car.mainData.mileage) return car.mainData.mileage <= 100;
|
|
36
37
|
else return getMonthsDiff(new Date((car.mainData.firstRegistration as number) * 1000), new Date()) <= 12;
|
|
@@ -43,10 +44,7 @@ export class CarService {
|
|
|
43
44
|
owner = await this.bottleneck.schedule(() => this.requestService.upaRequest.getDealerProfile(ownerId));
|
|
44
45
|
} catch (e) {
|
|
45
46
|
console.log(e.message);
|
|
46
|
-
|
|
47
|
-
throw e;
|
|
48
|
-
}
|
|
49
|
-
owner = null;
|
|
47
|
+
throw e;
|
|
50
48
|
} finally {
|
|
51
49
|
await this.cacheManager.set(ownerId, owner);
|
|
52
50
|
}
|
|
@@ -3,7 +3,7 @@ import { RequestService } from './request.service';
|
|
|
3
3
|
import { Cache } from 'cache-manager';
|
|
4
4
|
import { get } from 'lodash';
|
|
5
5
|
import { MarketingImageConfigInterface, MarketingImageConfigsInterface } from '@bytebrand/autode-request';
|
|
6
|
-
import { ExportType,
|
|
6
|
+
import { ExportType, FileType } from '../enums';
|
|
7
7
|
|
|
8
8
|
@Injectable()
|
|
9
9
|
export class UserService {
|
|
@@ -50,8 +50,4 @@ export class UserService {
|
|
|
50
50
|
|
|
51
51
|
return result;
|
|
52
52
|
}
|
|
53
|
-
|
|
54
|
-
getFileName(exportType: ExportType, fileType: FileTypes): string {
|
|
55
|
-
return `api_export_cars_${exportType}.${fileType}`;
|
|
56
|
-
}
|
|
57
53
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { get, isEmpty, isNil, set, upperFirst } from 'lodash';
|
|
1
|
+
import { get, isEmpty, isNil, set, toNumber, toSafeInteger, upperFirst } from 'lodash';
|
|
2
2
|
import { DataSchemes } from '@bytebrand/car-schema';
|
|
3
3
|
import { CarDescriptionFactory, DescriptionTypeEnum } from '@bytebrand/car-description';
|
|
4
4
|
import { MappingService } from '../services/mapping.service';
|
|
@@ -10,13 +10,10 @@ import { UserService } from '../services';
|
|
|
10
10
|
@Injectable()
|
|
11
11
|
export class As24Transformer {
|
|
12
12
|
private currentCar: DataSchemes.Car;
|
|
13
|
-
private descriptionSchemas: unknown;
|
|
14
|
-
|
|
15
13
|
constructor(private mappingService: MappingService, private readonly userService: UserService) {}
|
|
16
14
|
|
|
17
|
-
async transform(carData: DataSchemes.Car
|
|
15
|
+
async transform(carData: DataSchemes.Car): Promise<unknown> {
|
|
18
16
|
this.currentCar = carData;
|
|
19
|
-
this.descriptionSchemas = descriptionSchemas;
|
|
20
17
|
const transformedCarData = {};
|
|
21
18
|
const rules = await this.mappingService.getRules();
|
|
22
19
|
for (const rule of rules) {
|
|
@@ -97,12 +94,39 @@ export class As24Transformer {
|
|
|
97
94
|
case 'selectorToCategoryOrClass_selector': {
|
|
98
95
|
return this.selectorToCategoryOrClass_selector(fieldValue, rule);
|
|
99
96
|
}
|
|
97
|
+
case 'numberToNumber': {
|
|
98
|
+
return this.numberToNumber(fieldValue).toString();
|
|
99
|
+
}
|
|
100
|
+
case 'numberToInteger': {
|
|
101
|
+
return this.numberToInteger(fieldValue).toString();
|
|
102
|
+
}
|
|
103
|
+
case 'integerToNumber': {
|
|
104
|
+
return this.numberToNumber(fieldValue).toString();
|
|
105
|
+
}
|
|
106
|
+
case 'stringToInteger': {
|
|
107
|
+
return this.stringToInteger(fieldValue).toString();
|
|
108
|
+
}
|
|
100
109
|
default:
|
|
101
110
|
LoggerService.log(`missing transform: ${transformProcedureName}`);
|
|
102
111
|
break;
|
|
103
112
|
}
|
|
104
113
|
}
|
|
105
114
|
|
|
115
|
+
protected numberToNumber(field: number): number {
|
|
116
|
+
const result = isNil(field) ? null : toNumber(field);
|
|
117
|
+
return (result < 0 || isNaN(result)) ? undefined : result;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
protected numberToInteger(field: number): number {
|
|
121
|
+
const result = isNil(field) ? null : toSafeInteger(field);
|
|
122
|
+
return result < 0 ? null : result;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
protected stringToInteger(field: string): number {
|
|
126
|
+
const result = isEmpty(field) ? null : toSafeInteger(field);
|
|
127
|
+
return result < 0 ? null : result;
|
|
128
|
+
}
|
|
129
|
+
|
|
106
130
|
private async customTransformers(rule: MappingRules, car: DataSchemes.Car): Promise<any> {
|
|
107
131
|
switch (rule.autodeField) {
|
|
108
132
|
case 'price.vatDeductible': {
|
|
@@ -20,7 +20,7 @@ export class Auto24Transformer {
|
|
|
20
20
|
transform(car: DataSchemes.Car, imboImages: ImboImageResponseInterface[]): Auto24XmlItem {
|
|
21
21
|
const carId = toString(get(car, '_id', ''));
|
|
22
22
|
|
|
23
|
-
let userlink = `https://www.${this.configService.config.
|
|
23
|
+
let userlink = `https://www.${this.configService.config.domain}/search/vehicle/${carId}`;
|
|
24
24
|
if (this.configService.config.campaign) {
|
|
25
25
|
userlink += `?source=classifieds&medium=listing&campaign=${this.configService.config.campaign}`;
|
|
26
26
|
}
|
|
@@ -36,7 +36,7 @@ export class AutouncleTransformer {
|
|
|
36
36
|
const address = await this.getAddress(car, owner);
|
|
37
37
|
|
|
38
38
|
return {
|
|
39
|
-
back_link: `https://www.${this.configService.config.
|
|
39
|
+
back_link: `https://www.${this.configService.config.domain}/search/vehicle/${autodeId}?source=classifieds&medium=cpc&campaign=autouncle`,
|
|
40
40
|
make: toString(get(car, 'mainData.make', '')),
|
|
41
41
|
model_name: toString(get(car, 'mainData.model', '')),
|
|
42
42
|
model_variant: toString(get(car, 'mainData.subModel', '')),
|
|
@@ -76,8 +76,8 @@ export class FbTransformer {
|
|
|
76
76
|
title: this.getTitle(car),
|
|
77
77
|
features: this.getHighlights(car),
|
|
78
78
|
description: this.getDescription(car), // be careful it changes car object
|
|
79
|
-
url: `https://www.${this.configService.config.
|
|
80
|
-
dealer_url: `https://www.${this.configService.config.
|
|
79
|
+
url: `https://www.${this.configService.config.domain}/search/vehicle/${autodeId}`,
|
|
80
|
+
dealer_url: `https://www.${this.configService.config.domain}/search/vehicle/${autodeId}?source=FACEBOOK&medium=direkt&campaign=marketplace_link`,
|
|
81
81
|
make: toString(get(car, 'mainData.make', '')),
|
|
82
82
|
model: toString(get(car, 'mainData.model', '')),
|
|
83
83
|
trim: this.getTrim(car),
|
|
@@ -72,9 +72,9 @@ export class GoogleTransformer {
|
|
|
72
72
|
private getLink(car: DataSchemes.Car): string {
|
|
73
73
|
const autodeId = get(car, '_id', '');
|
|
74
74
|
if (this.configService.config.isCriteo) {
|
|
75
|
-
return `https://www.${this.configService.config.
|
|
75
|
+
return `https://www.${this.configService.config.domain}/search/vehicle/${autodeId}?source=criteo&medium=cpc&campaign=retargeting`;
|
|
76
76
|
}
|
|
77
|
-
return `https://www.${this.configService.config.
|
|
77
|
+
return `https://www.${this.configService.config.domain}/search/vehicle/${autodeId}`;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
private getRetailPrice(car: DataSchemes.Car): string {
|
|
@@ -101,7 +101,7 @@ export class GoogleTransformer {
|
|
|
101
101
|
private async buildLargeImageUrl(carId: string, imageId: string): Promise<string> {
|
|
102
102
|
if (this.configService.config.isCriteo) {
|
|
103
103
|
try {
|
|
104
|
-
const criteoConfig = await this.userService.getMarketingImageConfig(this.configService.config.
|
|
104
|
+
const criteoConfig = await this.userService.getMarketingImageConfig(this.configService.config.criteoMarketingImagesConfigId);
|
|
105
105
|
return imageId
|
|
106
106
|
? `${this.configService.config.imageUrl}/generated_images/${[carId[0], carId[1], carId[2], carId].join(
|
|
107
107
|
'/',
|
|
@@ -21,7 +21,7 @@ export class MeinstadtTransformer {
|
|
|
21
21
|
make: get(car, 'mainData.make', null),
|
|
22
22
|
model: get(car, 'mainData.model', null),
|
|
23
23
|
cpc: get(this.configService.config, 'cpc', '0.08'),
|
|
24
|
-
listingUrl: `https://www.${this.configService.config.
|
|
24
|
+
listingUrl: `https://www.${this.configService.config.domain}/search/vehicle/${autodeId}?source=classifieds&medium=listing&campaign=meinestadt`,
|
|
25
25
|
title: this.getTitle(car),
|
|
26
26
|
accidentFree: get(car, 'mainData.accidentDamaged', null),
|
|
27
27
|
mileage: get(car, 'mainData.mileage', null),
|
|
@@ -344,7 +344,7 @@ export class MobileTransformer {
|
|
|
344
344
|
}
|
|
345
345
|
|
|
346
346
|
private getAutodeUrl(car: DataSchemes.Car): string {
|
|
347
|
-
return
|
|
347
|
+
return `https://www.${this.configService.config.domain}${car._id}?source=classifieds&medium=listing&campaign=${this.configService.config.campaign}`;
|
|
348
348
|
}
|
|
349
349
|
|
|
350
350
|
private getImages(car: DataSchemes.Car, images: unknown[]): string | null {
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { findLast, get, toNumber, toSafeInteger, toString } from 'lodash';
|
|
2
|
-
import { Injectable } from '@nestjs/common';
|
|
3
2
|
import * as moment from 'moment/moment';
|
|
4
3
|
|
|
5
|
-
import {
|
|
4
|
+
import { Injectable } from '@nestjs/common';
|
|
5
|
+
|
|
6
6
|
import { toLowercase } from '@bytebrand/schema-tools/dist/transform/utils';
|
|
7
|
-
import { DePostalCodesService } from '@bytebrand/car-basic-data-scope';
|
|
8
7
|
import { ImboImageResponseInterface } from '@bytebrand/chunkable';
|
|
9
|
-
import { TranslatorExtended } from '@bytebrand/schema-tools';
|
|
10
8
|
import { DataSchemes } from '@bytebrand/car-schema';
|
|
11
9
|
|
|
12
|
-
import { imageItem, IModixWrapItem, ModixXmlItem } from '../interfaces';
|
|
13
10
|
|
|
14
11
|
import {
|
|
15
12
|
BodyColorList,
|
|
@@ -20,28 +17,22 @@ import {
|
|
|
20
17
|
UsageConditionList,
|
|
21
18
|
UsageTypeList,
|
|
22
19
|
} from '../constants';
|
|
23
|
-
import {
|
|
20
|
+
import { imageItem, IModixWrapItem, ModixXmlItem } from '../interfaces';
|
|
24
21
|
import { isNotEmptyArray, isValidVin } from '../utils/validator.utils';
|
|
22
|
+
import { CategoryList } from '../constants/modix/category.constant';
|
|
25
23
|
import { ConfigService } from '../services/config.service';
|
|
26
24
|
|
|
27
25
|
@Injectable()
|
|
28
26
|
export class ModixTransformer {
|
|
29
|
-
private
|
|
30
|
-
private postalCodesService: DePostalCodesService;
|
|
31
|
-
|
|
32
|
-
constructor(private readonly configService: ConfigService) {
|
|
33
|
-
const dict = { ...de, ...deVehicleProps, ...deVehicleDetailsPage };
|
|
34
|
-
this.postalCodesService = DePostalCodesService.getInstance();
|
|
35
|
-
this.translator = new TranslatorExtended(dict);
|
|
36
|
-
}
|
|
27
|
+
constructor(private readonly configService: ConfigService) { }
|
|
37
28
|
|
|
38
|
-
|
|
29
|
+
transform({
|
|
39
30
|
car,
|
|
40
31
|
images,
|
|
41
32
|
}: {
|
|
42
33
|
car: DataSchemes.Car;
|
|
43
34
|
images: ImboImageResponseInterface[];
|
|
44
|
-
}):
|
|
35
|
+
}): ModixXmlItem {
|
|
45
36
|
return {
|
|
46
37
|
//Main data
|
|
47
38
|
maindata: {
|
|
@@ -204,7 +195,7 @@ export class ModixTransformer {
|
|
|
204
195
|
|
|
205
196
|
private getImagesLinks(car: DataSchemes.Car, images: ImboImageResponseInterface[]): imageItem {
|
|
206
197
|
const car_id = toString(get(car, '_id', ''));
|
|
207
|
-
const url = `https://${this.configService.config.
|
|
198
|
+
const url = `https://${this.configService.config.imageUrl}/carimage/${car_id}`;
|
|
208
199
|
|
|
209
200
|
const imageList: IModixWrapItem[] = [];
|
|
210
201
|
|
|
@@ -30,7 +30,7 @@ export class OoyyoTransformer {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
return {
|
|
33
|
-
url: `https://www.${this.configService.config.
|
|
33
|
+
url: `https://www.${this.configService.config.domain}/search/vehicle/${autodeid}?source=classifieds&medium=listing&campaign=ooyyo`,
|
|
34
34
|
title: this.getTitle(car),
|
|
35
35
|
content: trim(toString(get(car, 'offer.offerDescription', ''))),
|
|
36
36
|
price: toString(get(car, 'price.currentSalesPrice', '')),
|
|
@@ -118,6 +118,6 @@ export class OoyyoTransformer {
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
private buildLargeImageUrl(carId: string, imageId: string): string {
|
|
121
|
-
return `${this.configService.config.
|
|
121
|
+
return `${this.configService.config.imageUrl}/carimage/${carId}/${imageId}/large`;
|
|
122
122
|
}
|
|
123
123
|
}
|
|
@@ -125,7 +125,7 @@ export class RubrikkTransformer {
|
|
|
125
125
|
|
|
126
126
|
private getCarLink(car: DataSchemes.Car): string {
|
|
127
127
|
const autodeId = toString(get(car, '_id', ''));
|
|
128
|
-
return `https://${this.configService.config.
|
|
128
|
+
return `https://${this.configService.config.imageUrl}/search/vehicle/${autodeId}?source=classifieds&medium=listing&campaign=focus`;
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
private getImageLink(car: DataSchemes.Car): string {
|
package/tsconfig.json
CHANGED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AutoborseConfig = void 0;
|
|
4
|
-
const config_1 = require("./config");
|
|
5
|
-
class AutoborseConfig extends config_1.Config {
|
|
6
|
-
constructor(params) {
|
|
7
|
-
super(params);
|
|
8
|
-
this.pathesConfig.localConvertedDirectory = this.environmentConfig[params.environment].localConvertedDirectory;
|
|
9
|
-
this.pathesConfig.remoteDirectory = this.environmentConfig[params.environment].remoteDirectory;
|
|
10
|
-
this.imageUrl = this.environmentConfig[params.environment].imageUrl;
|
|
11
|
-
this.outputFiles = ['api_export_cars_AUTBORSE.xml'];
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
exports.AutoborseConfig = AutoborseConfig;
|
|
15
|
-
//# sourceMappingURL=autoborse.config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autoborse.config.js","sourceRoot":"","sources":["../../src/config/autoborse.config.ts"],"names":[],"mappings":";;;AACA,qCAAkC;AAElC,MAAa,eAAgB,SAAQ,eAAM;IACzC,YAAY,MAAc;QACxB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,YAAY,CAAC,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,uBAAuB,CAAC;QAC/G,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC;QAC/F,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC;QACpE,IAAI,CAAC,WAAW,GAAG,CAAC,8BAA8B,CAAC,CAAC;IACtD,CAAC;CACF;AARD,0CAQC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kleinanzeigeFocus.config.js","sourceRoot":"","sources":["../../src/config/kleinanzeigeFocus.config.ts"],"names":[],"mappings":";;;AACA,qCAAkC;AAClC,oCAAiD;AAEjD,MAAa,uBAAwB,SAAQ,eAAM;IACjD,YAAY,MAAc;QACxB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,YAAY,CAAC,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,uBAAuB,CAAC;QAC/G,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC;QAC/F,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC;QACxE,IAAI,CAAC,WAAW,GAAG,CAAC,mBAAmB,kBAAU,CAAC,kBAAkB,IAAI,iBAAS,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3F,CAAC;CACF;AARD,0DAQC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Params } from '../interfaces/params.interface';
|
|
2
|
-
import { Config } from './config';
|
|
3
|
-
|
|
4
|
-
export class AutoborseConfig extends Config {
|
|
5
|
-
constructor(params: Params) {
|
|
6
|
-
super(params);
|
|
7
|
-
this.pathesConfig.localConvertedDirectory = this.environmentConfig[params.environment].localConvertedDirectory;
|
|
8
|
-
this.pathesConfig.remoteDirectory = this.environmentConfig[params.environment].remoteDirectory;
|
|
9
|
-
this.imageUrl = this.environmentConfig[params.environment].imageUrl;
|
|
10
|
-
this.outputFiles = ['api_export_cars_AUTBORSE.xml'];
|
|
11
|
-
}
|
|
12
|
-
}
|
|
File without changes
|