@bytebrand/export-cars 1.19.0 → 1.20.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/app.module.js +4 -3
- package/dist/app.module.js.map +1 -1
- package/dist/constants/images.d.ts +1 -0
- package/dist/constants/images.js +73 -0
- package/dist/constants/images.js.map +1 -0
- package/dist/enums/environment.enum.js +1 -1
- package/dist/enums/environment.enum.js.map +1 -1
- package/dist/enums/export-type.enum.js +1 -1
- package/dist/enums/export-type.enum.js.map +1 -1
- package/dist/enums/file-types.enum.js +1 -1
- package/dist/enums/file-types.enum.js.map +1 -1
- package/dist/enums/image-type.enum.js +1 -1
- package/dist/enums/image-type.enum.js.map +1 -1
- package/dist/export.command.js +2 -2
- package/dist/export.command.js.map +1 -1
- package/dist/exporters/as24.exporter.js +2 -4
- package/dist/exporters/as24.exporter.js.map +1 -1
- package/dist/exporters/auto24.exporter.js +2 -4
- package/dist/exporters/auto24.exporter.js.map +1 -1
- package/dist/exporters/autouncle.exporter.js +2 -4
- package/dist/exporters/autouncle.exporter.js.map +1 -1
- package/dist/exporters/awin.exporter.js +2 -2
- package/dist/exporters/awin.exporter.js.map +1 -1
- package/dist/exporters/by-owner.exporter.js +2 -2
- package/dist/exporters/by-owner.exporter.js.map +1 -1
- package/dist/exporters/facebook-shop.exporter.js +2 -4
- package/dist/exporters/facebook-shop.exporter.js.map +1 -1
- package/dist/exporters/fb.exporter.js +2 -4
- package/dist/exporters/fb.exporter.js.map +1 -1
- package/dist/exporters/google.exporter.js +2 -2
- package/dist/exporters/google.exporter.js.map +1 -1
- package/dist/exporters/meinstadt.exporter.js +2 -4
- package/dist/exporters/meinstadt.exporter.js.map +1 -1
- package/dist/exporters/mobile.exporter.js +2 -4
- package/dist/exporters/mobile.exporter.js.map +1 -1
- package/dist/exporters/modix.exporter.js +2 -4
- package/dist/exporters/modix.exporter.js.map +1 -1
- package/dist/exporters/ooyyo.exporter.js +2 -4
- package/dist/exporters/ooyyo.exporter.js.map +1 -1
- package/dist/exporters/rubrikk.exporter.js +2 -4
- package/dist/exporters/rubrikk.exporter.js.map +1 -1
- package/dist/exporters/trovit.exporter.js +2 -4
- package/dist/exporters/trovit.exporter.js.map +1 -1
- package/dist/formats/modix-xml.builder.js +1 -1
- package/dist/formats/modix-xml.builder.js.map +1 -1
- package/dist/services/car.service.js +4 -3
- package/dist/services/car.service.js.map +1 -1
- package/dist/services/config.service.js +2 -2
- package/dist/services/config.service.js.map +1 -1
- package/dist/services/images.service.d.ts +2 -1
- package/dist/services/images.service.js +79 -34
- package/dist/services/images.service.js.map +1 -1
- package/dist/services/loader.service.js +2 -2
- package/dist/services/loader.service.js.map +1 -1
- package/dist/services/mapping.service.js +2 -2
- package/dist/services/mapping.service.js.map +1 -1
- package/dist/services/request.service.js +2 -2
- package/dist/services/request.service.js.map +1 -1
- package/dist/services/rules.service.js +2 -2
- package/dist/services/rules.service.js.map +1 -1
- package/dist/services/transformer.service.js +2 -2
- package/dist/services/transformer.service.js.map +1 -1
- package/dist/services/user.service.js +4 -3
- package/dist/services/user.service.js.map +1 -1
- package/dist/transformers/as24.transformer.js +2 -2
- package/dist/transformers/as24.transformer.js.map +1 -1
- package/dist/transformers/auto24.transfomer.js +2 -2
- package/dist/transformers/auto24.transfomer.js.map +1 -1
- package/dist/transformers/autouncle.transformer.js +2 -2
- package/dist/transformers/autouncle.transformer.js.map +1 -1
- package/dist/transformers/awin.transformer.js +2 -2
- package/dist/transformers/awin.transformer.js.map +1 -1
- package/dist/transformers/by-owner.transformer.js +2 -2
- package/dist/transformers/by-owner.transformer.js.map +1 -1
- package/dist/transformers/facebook-shop.transformer.js +2 -2
- package/dist/transformers/facebook-shop.transformer.js.map +1 -1
- package/dist/transformers/fb.transformer.js +4 -7
- package/dist/transformers/fb.transformer.js.map +1 -1
- package/dist/transformers/google.transformer.js +2 -2
- package/dist/transformers/google.transformer.js.map +1 -1
- package/dist/transformers/meinstadt.transformer.js +2 -2
- package/dist/transformers/meinstadt.transformer.js.map +1 -1
- package/dist/transformers/mobile.transformer.js +2 -2
- package/dist/transformers/mobile.transformer.js.map +1 -1
- package/dist/transformers/modix.transformer.d.ts +3 -2
- package/dist/transformers/modix.transformer.js +7 -5
- 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 +2 -2
- package/dist/transformers/rubrikk.transformer.js.map +1 -1
- package/dist/transformers/trovit.transformer.js +2 -2
- package/dist/transformers/trovit.transformer.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +21 -20
- package/src/app.module.ts +2 -1
- package/src/constants/images.ts +69 -0
- package/src/exporters/as24.exporter.ts +2 -2
- package/src/exporters/auto24.exporter.ts +2 -2
- package/src/exporters/autouncle.exporter.ts +2 -2
- package/src/exporters/facebook-shop.exporter.ts +2 -2
- package/src/exporters/fb.exporter.ts +2 -2
- package/src/exporters/meinstadt.exporter.ts +2 -2
- package/src/exporters/mobile.exporter.ts +2 -2
- package/src/exporters/modix.exporter.ts +2 -2
- package/src/exporters/ooyyo.exporter.ts +2 -2
- package/src/exporters/rubrikk.exporter.ts +2 -2
- package/src/exporters/trovit.exporter.ts +2 -2
- package/src/formats/modix-xml.builder.ts +1 -1
- package/src/services/car.service.ts +2 -1
- package/src/services/images.service.ts +81 -35
- package/src/services/user.service.ts +2 -1
- package/src/transformers/fb.transformer.ts +6 -5
- package/src/transformers/modix.transformer.ts +3 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bytebrand/export-cars",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.20.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "bytebrand",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -15,20 +15,21 @@
|
|
|
15
15
|
"start:dev": "nest start --watch"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@bytebrand/autode-request": "^1.
|
|
19
|
-
"@bytebrand/car-basic-data-scope": "^9.11.
|
|
20
|
-
"@bytebrand/car-description": "^1.
|
|
21
|
-
"@bytebrand/car-schema": "^3.14.
|
|
22
|
-
"@bytebrand/chunkable": "^5.
|
|
23
|
-
"@bytebrand/cronicle-helper": "^1.
|
|
24
|
-
"@bytebrand/i18n-dictionaries": "^1.
|
|
25
|
-
"@bytebrand/import-helper": "^0.
|
|
26
|
-
"@bytebrand/schema-tools": "^3.
|
|
18
|
+
"@bytebrand/autode-request": "^1.19.0",
|
|
19
|
+
"@bytebrand/car-basic-data-scope": "^9.11.22",
|
|
20
|
+
"@bytebrand/car-description": "^1.13.8",
|
|
21
|
+
"@bytebrand/car-schema": "^3.14.15",
|
|
22
|
+
"@bytebrand/chunkable": "^5.19.6",
|
|
23
|
+
"@bytebrand/cronicle-helper": "^1.21.6",
|
|
24
|
+
"@bytebrand/i18n-dictionaries": "^1.5.0",
|
|
25
|
+
"@bytebrand/import-helper": "^0.45.0",
|
|
26
|
+
"@bytebrand/schema-tools": "^3.18.8",
|
|
27
27
|
"@bytebrand/zipper": "^2.2.0",
|
|
28
|
-
"@nestjs/
|
|
29
|
-
"@nestjs/
|
|
28
|
+
"@nestjs/cache-manager": "^2.1.0",
|
|
29
|
+
"@nestjs/common": "^10.2.7",
|
|
30
|
+
"@nestjs/core": "^10.2.7",
|
|
30
31
|
"bottleneck": "^2.19.5",
|
|
31
|
-
"cache-manager": "^5.
|
|
32
|
+
"cache-manager": "^5.2.4",
|
|
32
33
|
"csv-write-stream": "^2.0.0",
|
|
33
34
|
"google-spreadsheet": "^3.3.0",
|
|
34
35
|
"lodash": "^4.17.21",
|
|
@@ -38,14 +39,14 @@
|
|
|
38
39
|
"vin-generator": "^1.0.1"
|
|
39
40
|
},
|
|
40
41
|
"devDependencies": {
|
|
41
|
-
"@nestjs/cli": "^
|
|
42
|
-
"@nestjs/schematics": "^
|
|
42
|
+
"@nestjs/cli": "^10.1.18",
|
|
43
|
+
"@nestjs/schematics": "^10.0.2",
|
|
43
44
|
"@types/google-spreadsheet": "^3.3.0",
|
|
44
45
|
"@types/inquirer": "^8.2.4",
|
|
45
46
|
"@types/lodash": "^4.14.186",
|
|
46
|
-
"@types/node": "^16.
|
|
47
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
48
|
-
"@typescript-eslint/parser": "^
|
|
47
|
+
"@types/node": "^16.18.58",
|
|
48
|
+
"@typescript-eslint/eslint-plugin": "^6.8.0",
|
|
49
|
+
"@typescript-eslint/parser": "^6.8.0",
|
|
49
50
|
"eslint": "^8.0.1",
|
|
50
51
|
"eslint-config-prettier": "^8.3.0",
|
|
51
52
|
"eslint-plugin-prettier": "^4.0.0",
|
|
@@ -55,10 +56,10 @@
|
|
|
55
56
|
"ts-loader": "^9.2.3",
|
|
56
57
|
"ts-node": "^10.0.0",
|
|
57
58
|
"tsconfig-paths": "4.1.0",
|
|
58
|
-
"typescript": "^
|
|
59
|
+
"typescript": "^5.2.2"
|
|
59
60
|
},
|
|
60
61
|
"engines": {
|
|
61
62
|
"node": ">=14.0.0"
|
|
62
63
|
},
|
|
63
|
-
"gitHead": "
|
|
64
|
+
"gitHead": "e755a559caae3bd7088cfed459bb8f80e8adc012"
|
|
64
65
|
}
|
package/src/app.module.ts
CHANGED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export const IMAGES_SORT_ORDER: any = {
|
|
2
|
+
ext_f_right: { order: 1 },
|
|
3
|
+
ext_f_cowl: { order: 2 },
|
|
4
|
+
ext_f_left: { order: 3 },
|
|
5
|
+
ext_l_main: { order: 4 },
|
|
6
|
+
ext_b_left: { order: 5 },
|
|
7
|
+
ext_b_main: { order: 6 },
|
|
8
|
+
ext_b_trunk: { order: 7 },
|
|
9
|
+
ext_b_right: { order: 8 },
|
|
10
|
+
ext_r_main: { order: 9 },
|
|
11
|
+
ext_f_main: { order: 10 },
|
|
12
|
+
ext_f_main_opened: { order: 11 },
|
|
13
|
+
ext_f_left_opened: { order: 12 },
|
|
14
|
+
ext_l_main_opened: { order: 13 },
|
|
15
|
+
ext_b_left_opened: { order: 14 },
|
|
16
|
+
ext_b_main_opened: { order: 15 },
|
|
17
|
+
ext_b_right_opened: { order: 16 },
|
|
18
|
+
ext_r_main_opened: { order: 17 },
|
|
19
|
+
ext_f_right_opened: { order: 18 },
|
|
20
|
+
conext_f_main: { order: 19 },
|
|
21
|
+
conext_f_left: { order: 20 },
|
|
22
|
+
conext_l_main: { order: 21 },
|
|
23
|
+
conext_b_left: { order: 22 },
|
|
24
|
+
conext_b_main: { order: 23 },
|
|
25
|
+
conext_b_right: { order: 24 },
|
|
26
|
+
conext_r_main: { order: 25 },
|
|
27
|
+
conext_f_right: { order: 26 },
|
|
28
|
+
ext_feat_engine: { order: 27 },
|
|
29
|
+
int_f_ipanel1: { order: 28 },
|
|
30
|
+
int_f_ipanel2: { order: 29 },
|
|
31
|
+
int_f_ipanel5: { order: 30 },
|
|
32
|
+
int_f_driverseats: { order: 31 },
|
|
33
|
+
int_f_assistantseats: { order: 32 },
|
|
34
|
+
int_b_rearseats: { order: 33 },
|
|
35
|
+
int_f_fandrseats: { order: 34 },
|
|
36
|
+
int_f_driverdashboard: { order: 35 },
|
|
37
|
+
int_f_doordriverside: { order: 36 },
|
|
38
|
+
int_f_stickshift: { order: 37 },
|
|
39
|
+
int_b_trunk: { order: 38 },
|
|
40
|
+
int_t_sunroof: { order: 39 },
|
|
41
|
+
int_t_panorama_sunroof: { order: 40 },
|
|
42
|
+
int_f_ipanel3: { order: 41 },
|
|
43
|
+
int_f_ipanel4: { order: 42 },
|
|
44
|
+
int_feat_seatheating: { order: 43 },
|
|
45
|
+
ext_feat_ledlights: { order: 44 },
|
|
46
|
+
ext_feat_cruisecontrol: { order: 45 },
|
|
47
|
+
int_feat_climatization: { order: 46 },
|
|
48
|
+
int_feat_bluetooth: { order: 47 },
|
|
49
|
+
ext_feat_rainsensor: { order: 48 },
|
|
50
|
+
ext_feat_rims: { order: 49 },
|
|
51
|
+
ext_feat_parkassistant: { order: 50 },
|
|
52
|
+
ext_feat_lightsensor: { order: 51 },
|
|
53
|
+
int_feat_handsfree: { order: 52 },
|
|
54
|
+
int_feat_headupdisplay: { order: 53 },
|
|
55
|
+
ext_feat_trafficsignrec: { order: 54 },
|
|
56
|
+
ext_feat_auxiliaryheating: { order: 55 },
|
|
57
|
+
ext_feat_laneassistant: { order: 56 },
|
|
58
|
+
int_feat_startstop: { order: 57 },
|
|
59
|
+
int_feat_breakassistant: { order: 58 },
|
|
60
|
+
ext_feat_nightassistant: { order: 59 },
|
|
61
|
+
dam_out_left: { order: 1000 },
|
|
62
|
+
dam_out_front: { order: 2000 },
|
|
63
|
+
dam_out_back: { order: 3000 },
|
|
64
|
+
dam_out_right: { order: 4000 },
|
|
65
|
+
dam_out_top: { order: 5000 },
|
|
66
|
+
gen_feature: { order: 6000 },
|
|
67
|
+
simple_temp: { order: 7000 },
|
|
68
|
+
simple_: { order: 8000 }
|
|
69
|
+
};
|
|
@@ -40,9 +40,9 @@ export class As24Exporter implements Exporter {
|
|
|
40
40
|
const data = chunkData[i];
|
|
41
41
|
const ownerId = get(data.car, 'metaData.ownerId');
|
|
42
42
|
|
|
43
|
-
console.time(`Transform ${data.car._id}`);
|
|
43
|
+
// console.time(`Transform ${data.car._id}`);
|
|
44
44
|
const transformedData = await as24Transformer.transform(data.car);
|
|
45
|
-
console.timeEnd(`Transform ${data.car._id}`);
|
|
45
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
46
46
|
const transformedDataCSV = `${convertToCSV(transformedData)}\n`;
|
|
47
47
|
|
|
48
48
|
const filename = `${this.configService.config.pathesConfig.localConvertedDirectory}/${ownerId}.${FileType.CSV}`
|
|
@@ -35,9 +35,9 @@ export class Auto24Exporter implements Exporter {
|
|
|
35
35
|
for (let i = 0; i < chunkData.length; i += 1) {
|
|
36
36
|
const data = chunk.data[i];
|
|
37
37
|
const { car, images } = data;
|
|
38
|
-
console.time(`Transform ${data.car._id}`);
|
|
38
|
+
// console.time(`Transform ${data.car._id}`);
|
|
39
39
|
await xmlBuilder.addItem(await auto24Transformer.transform(car, images), 'Deutschland');
|
|
40
|
-
console.timeEnd(`Transform ${data.car._id}`);
|
|
40
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
41
41
|
this.carService.counter.countCar(images);
|
|
42
42
|
}
|
|
43
43
|
});
|
|
@@ -38,9 +38,9 @@ export class AutouncleExporter implements Exporter {
|
|
|
38
38
|
for (const data of chunk.data) {
|
|
39
39
|
const ownerId = get(data.car, 'metaData.ownerId');
|
|
40
40
|
const owner = await this.carService.getOwner(ownerId);
|
|
41
|
-
console.time(`Transform ${data.car._id}`);
|
|
41
|
+
// console.time(`Transform ${data.car._id}`);
|
|
42
42
|
const car = await autouncleTransformer.transform({ owner, ...data });
|
|
43
|
-
console.timeEnd(`Transform ${data.car._id}`);
|
|
43
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
44
44
|
|
|
45
45
|
await autouncleJsonBuilder.addItem(car, firstCar);
|
|
46
46
|
|
|
@@ -35,9 +35,9 @@ export class FacebookShopExporter implements Exporter {
|
|
|
35
35
|
for (let i = 0; i < chunkData.length; i += 1) {
|
|
36
36
|
const data = chunk.data[i];
|
|
37
37
|
|
|
38
|
-
console.time(`Transform ${data.car._id}`);
|
|
38
|
+
// console.time(`Transform ${data.car._id}`);
|
|
39
39
|
const transformedCar = await facebookShopTransformer.transform(data);
|
|
40
|
-
console.timeEnd(`Transform ${data.car._id}`);
|
|
40
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
41
41
|
|
|
42
42
|
await facebookShopXmkBuilder.addItem(transformedCar);
|
|
43
43
|
this.carService.counter.countCar(data.images);
|
|
@@ -35,9 +35,9 @@ export class FbExporter implements Exporter {
|
|
|
35
35
|
for (const data of chunkData) {
|
|
36
36
|
const ownerId = get(data.car, 'metaData.ownerId', null);
|
|
37
37
|
const owner = await this.carService.getOwner(ownerId);
|
|
38
|
-
console.time(`Transform ${data.car._id}`);
|
|
38
|
+
// console.time(`Transform ${data.car._id}`);
|
|
39
39
|
const car = await fbTransformer.transform({ owner, ...data });
|
|
40
|
-
console.timeEnd(`Transform ${data.car._id}`);
|
|
40
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
41
41
|
|
|
42
42
|
await fbXmlBuilder.addItem(car as FbXmlItem);
|
|
43
43
|
this.carService.counter.countCar(data.images);
|
|
@@ -36,9 +36,9 @@ export class MeinstadtExporter implements Exporter {
|
|
|
36
36
|
chunk.data = chunk.data.filter(e => this.carService.filterCar(e, this.rulesService.rules));
|
|
37
37
|
|
|
38
38
|
for (const data of chunk.data) {
|
|
39
|
-
console.time(`Transform ${data.car._id}`);
|
|
39
|
+
// console.time(`Transform ${data.car._id}`);
|
|
40
40
|
const car = await meinstadtTransformer.transform(data);
|
|
41
|
-
console.timeEnd(`Transform ${data.car._id}`);
|
|
41
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
42
42
|
await meinstadtJsonBuilder.addItem(car as MeinstadtJsonItem, firstCar);
|
|
43
43
|
this.carService.counter.countCar(data.images);
|
|
44
44
|
|
|
@@ -38,9 +38,9 @@ export class MobileExporter implements Exporter {
|
|
|
38
38
|
for (let i = 0; i < chunk.data.length; i += 1) {
|
|
39
39
|
const data = chunk.data[i];
|
|
40
40
|
const { car, images } = data;
|
|
41
|
-
console.time(`Transform ${data.car._id}`);
|
|
41
|
+
// console.time(`Transform ${data.car._id}`);
|
|
42
42
|
const transformedData = await mobileTransformer.transform(car, images);
|
|
43
|
-
console.timeEnd(`Transform ${data.car._id}`);
|
|
43
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
44
44
|
|
|
45
45
|
await writeFile(fileName, Buffer.from(`${convertToCSV(transformedData)}\n`), { flag: 'a' });
|
|
46
46
|
|
|
@@ -40,9 +40,9 @@ export class ModixExporter implements Exporter {
|
|
|
40
40
|
for (let i = 0; i < chunk.data.length; i += 1) {
|
|
41
41
|
const data = chunk.data[i];
|
|
42
42
|
|
|
43
|
-
console.time(`Transform ${data.car._id}`);
|
|
43
|
+
// console.time(`Transform ${data.car._id}`);
|
|
44
44
|
const transformedCar = await modixTransformer.transform(data, mappingBuilder.getMappingRules({ reversTransforming: true }));
|
|
45
|
-
console.timeEnd(`Transform ${data.car._id}`);
|
|
45
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
46
46
|
await modixXmlBuilder.addItem(transformedCar);
|
|
47
47
|
|
|
48
48
|
this.carService.counter.countCar(data.images);
|
|
@@ -33,9 +33,9 @@ export class OoyyoExporter implements Exporter {
|
|
|
33
33
|
|
|
34
34
|
for (let i = 0; i < chunkData.length; i += 1) {
|
|
35
35
|
const { car, images } = chunkData[i];
|
|
36
|
-
console.time(`Transform ${car._id}`);
|
|
36
|
+
// console.time(`Transform ${car._id}`);
|
|
37
37
|
await ooyyoXmlBuilder.addItem(await ooyyoTransformer.transform(car, images));
|
|
38
|
-
console.timeEnd(`Transform ${car._id}`);
|
|
38
|
+
// console.timeEnd(`Transform ${car._id}`);
|
|
39
39
|
this.carService.counter.countCar(images);
|
|
40
40
|
}
|
|
41
41
|
});
|
|
@@ -36,9 +36,9 @@ export class RubrikkExporter implements Exporter {
|
|
|
36
36
|
for (let i = 0; i < chunkData.length; i += 1) {
|
|
37
37
|
const data = chunkData[i];
|
|
38
38
|
|
|
39
|
-
console.time(`Transform ${data.car._id}`);
|
|
39
|
+
// console.time(`Transform ${data.car._id}`);
|
|
40
40
|
const transformedCar = await rubrikkTransformer.transform(data);
|
|
41
|
-
console.timeEnd(`Transform ${data.car._id}`);
|
|
41
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
42
42
|
|
|
43
43
|
await rubrikkXmlBuilder.addItem(transformedCar);
|
|
44
44
|
this.carService.counter.countCar(data.images);
|
|
@@ -35,9 +35,9 @@ export class TrovitExporter implements Exporter {
|
|
|
35
35
|
for (let i = 0; i < chunk.data.length; i += 1) {
|
|
36
36
|
const data = chunk.data[i];
|
|
37
37
|
|
|
38
|
-
console.time(`Transform ${data.car._id}`);
|
|
38
|
+
// console.time(`Transform ${data.car._id}`);
|
|
39
39
|
const transformedCar = await trovitTransformer.transform(data);
|
|
40
|
-
console.timeEnd(`Transform ${data.car._id}`);
|
|
40
|
+
// console.timeEnd(`Transform ${data.car._id}`);
|
|
41
41
|
|
|
42
42
|
await trovitXmlBuilder.addItem(transformedCar);
|
|
43
43
|
this.carService.counter.countCar(data.images);
|
|
@@ -139,7 +139,7 @@ export class ModixXmlBuilder extends XMLBuilderBase {
|
|
|
139
139
|
let item = `\n<media>\n<images url="${imageData.url}/">\n`;
|
|
140
140
|
|
|
141
141
|
imageData.imageList.forEach(image => {
|
|
142
|
-
item += `<image name="${image.atributes?.name}" />\n`;
|
|
142
|
+
item += `<image name="${image.atributes?.name}" position="${image.atributes?.position}" />\n`;
|
|
143
143
|
});
|
|
144
144
|
|
|
145
145
|
item += '\n</images>\n</media>';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { CACHE_MANAGER
|
|
1
|
+
import { CACHE_MANAGER } from '@nestjs/cache-manager';
|
|
2
|
+
import { Inject, Injectable } from '@nestjs/common';
|
|
2
3
|
import { getMonthsDiff } from '../utils/date-time.utils';
|
|
3
4
|
import { DataSchemes } from '@bytebrand/car-schema';
|
|
4
5
|
import { Cache } from 'cache-manager';
|
|
@@ -14,13 +14,75 @@ import { ImageType } from '../enums';
|
|
|
14
14
|
|
|
15
15
|
@Injectable()
|
|
16
16
|
export class ImagesService {
|
|
17
|
+
private readonly IMAGES_SORT_ORDER: { [imageCode: string]: number } = {
|
|
18
|
+
ext_f_right: 1,
|
|
19
|
+
ext_f_cowl: 2,
|
|
20
|
+
ext_f_left: 3,
|
|
21
|
+
ext_l_main: 4,
|
|
22
|
+
ext_b_left: 5,
|
|
23
|
+
ext_b_main: 6,
|
|
24
|
+
ext_b_trunk: 7,
|
|
25
|
+
ext_b_right: 8,
|
|
26
|
+
ext_r_main: 9,
|
|
27
|
+
ext_f_main: 10,
|
|
28
|
+
ext_f_main_opened: 11,
|
|
29
|
+
ext_f_left_opened: 12,
|
|
30
|
+
ext_l_main_opened: 13,
|
|
31
|
+
ext_b_left_opened: 14,
|
|
32
|
+
ext_b_main_opened: 15,
|
|
33
|
+
ext_b_right_opened: 16,
|
|
34
|
+
ext_r_main_opened: 17,
|
|
35
|
+
ext_f_right_opened: 18,
|
|
36
|
+
conext_f_main: 19,
|
|
37
|
+
conext_f_left: 20,
|
|
38
|
+
conext_l_main: 21,
|
|
39
|
+
conext_b_left: 22,
|
|
40
|
+
conext_b_main: 23,
|
|
41
|
+
conext_b_right: 24,
|
|
42
|
+
conext_r_main: 25,
|
|
43
|
+
conext_f_right: 26,
|
|
44
|
+
ext_feat_engine: 27,
|
|
45
|
+
int_f_ipanel1: 28,
|
|
46
|
+
int_f_ipanel2: 29,
|
|
47
|
+
int_f_ipanel5: 30,
|
|
48
|
+
int_f_driverseats: 31,
|
|
49
|
+
int_f_assistantseats: 32,
|
|
50
|
+
int_b_rearseats: 33,
|
|
51
|
+
int_f_fandrseats: 34,
|
|
52
|
+
int_f_driverdashboard: 35,
|
|
53
|
+
int_f_doordriverside: 36,
|
|
54
|
+
int_f_stickshift: 37,
|
|
55
|
+
int_b_trunk: 38,
|
|
56
|
+
int_t_sunroof: 39,
|
|
57
|
+
int_t_panorama_sunroof: 40,
|
|
58
|
+
int_f_ipanel3: 41,
|
|
59
|
+
int_f_ipanel4: 42,
|
|
60
|
+
int_feat_seatheating: 43,
|
|
61
|
+
ext_feat_ledlights: 44,
|
|
62
|
+
ext_feat_cruisecontrol: 45,
|
|
63
|
+
int_feat_climatization: 46,
|
|
64
|
+
int_feat_bluetooth: 47,
|
|
65
|
+
ext_feat_rainsensor: 48,
|
|
66
|
+
ext_feat_rims: 49,
|
|
67
|
+
ext_feat_parkassistant: 50,
|
|
68
|
+
ext_feat_lightsensor: 51,
|
|
69
|
+
int_feat_handsfree: 52,
|
|
70
|
+
int_feat_headupdisplay: 53,
|
|
71
|
+
ext_feat_trafficsignrec: 54,
|
|
72
|
+
ext_feat_auxiliaryheating: 55,
|
|
73
|
+
ext_feat_laneassistant: 56,
|
|
74
|
+
int_feat_startstop: 57,
|
|
75
|
+
int_feat_breakassistant: 58,
|
|
76
|
+
ext_feat_nightassistant: 59,
|
|
77
|
+
};
|
|
78
|
+
|
|
17
79
|
private readonly DEFAULT_IMAGES = [
|
|
18
80
|
'https://images.auto.de/carimage/noimage/7pNvWELuWhZX/large-cached.jpeg',
|
|
19
81
|
'https://images.auto.de/carimage/noimage/GvyXmrpaf1D6/large-cached.jpeg',
|
|
20
82
|
'https://images.auto.de/carimage/noimage/pFyfBsqBHEso/large-cached.jpeg',
|
|
21
83
|
];
|
|
22
84
|
|
|
23
|
-
constructor(private readonly configService: ConfigService, private readonly userService: UserService) {}
|
|
85
|
+
constructor(private readonly configService: ConfigService, private readonly userService: UserService) { }
|
|
24
86
|
|
|
25
87
|
async getImages(
|
|
26
88
|
car: DataSchemes.Car,
|
|
@@ -44,7 +106,7 @@ export class ImagesService {
|
|
|
44
106
|
return this.DEFAULT_IMAGES;
|
|
45
107
|
}
|
|
46
108
|
|
|
47
|
-
const sortedImages = this.sortImages(images
|
|
109
|
+
const sortedImages = this.sortImages(images);
|
|
48
110
|
const transformedImages = this.generateImageLinks(sortedImages, get(car, '_id'));
|
|
49
111
|
|
|
50
112
|
if (!ignoreDefImages && transformedImages.length < 17) {
|
|
@@ -67,7 +129,7 @@ export class ImagesService {
|
|
|
67
129
|
): Promise<string[]> {
|
|
68
130
|
const imageUrl = this.configService.config.marketingImageUrl;
|
|
69
131
|
|
|
70
|
-
const transformedImages = this.transformImagesArrayIntoObject(images);
|
|
132
|
+
const transformedImages = this.transformImagesArrayIntoObject(this.sortImages(images));
|
|
71
133
|
const config = await this.userService.getMarketingImageConfig(this.configService.config.marketingImageConfigId);
|
|
72
134
|
const marketingImageConfigs = config.marketingImages.map(i => ({ marketingImageCodes: i.imageCodes }));
|
|
73
135
|
|
|
@@ -91,13 +153,14 @@ export class ImagesService {
|
|
|
91
153
|
return imageUrls;
|
|
92
154
|
}
|
|
93
155
|
|
|
94
|
-
private transformImagesArrayIntoObject(images: ImboImageResponseInterface[]) {
|
|
95
|
-
|
|
96
|
-
images.forEach(image => {
|
|
156
|
+
private transformImagesArrayIntoObject(images: ImboImageResponseInterface[]): { [imageCode: string]: string } {
|
|
157
|
+
return images.reduce((result, image) => {
|
|
97
158
|
const imageCode = image?.imageCodePredicted?.split('-')[0];
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
159
|
+
if (imageCode) {
|
|
160
|
+
result[imageCode] = image.imageIdentifier;
|
|
161
|
+
}
|
|
162
|
+
return result;
|
|
163
|
+
}, {});
|
|
101
164
|
}
|
|
102
165
|
|
|
103
166
|
protected getChannelPath(imageUrl: string, carId: string): string {
|
|
@@ -114,31 +177,14 @@ export class ImagesService {
|
|
|
114
177
|
return `${this.getChannelPath(imageUrl, carId)}/${channelCode.replace(/ /g, '-')}-${imageId}.${imageExtension}`;
|
|
115
178
|
}
|
|
116
179
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
images[index] = images[0];
|
|
127
|
-
images[0] = tmp;
|
|
128
|
-
}
|
|
129
|
-
if (secondImageId === image?.imageIdentifier) {
|
|
130
|
-
const tmp = images[index];
|
|
131
|
-
images[index] = images[1];
|
|
132
|
-
images[1] = tmp;
|
|
133
|
-
}
|
|
134
|
-
if (thirdImageId === image?.imageIdentifier) {
|
|
135
|
-
const tmp = images[index];
|
|
136
|
-
images[index] = images[2];
|
|
137
|
-
images[2] = tmp;
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
return images.filter(i => i); // sometimes thirdImageId exists but image is not
|
|
141
|
-
}
|
|
142
|
-
return images;
|
|
180
|
+
sortImages(images: ImboImageResponseInterface[]): ImboImageResponseInterface[] {
|
|
181
|
+
return images.sort((a, b) => {
|
|
182
|
+
const imageCodePredictedA = a.imageCodePredicted.includes('-') ? a.imageCodePredicted.split('-')[1] : a.imageCodePredicted;
|
|
183
|
+
const imageCodePredictedB = b.imageCodePredicted.includes('-') ? b.imageCodePredicted.split('-')[1] : b.imageCodePredicted;
|
|
184
|
+
const orderA = this.IMAGES_SORT_ORDER[imageCodePredictedA] || 100;
|
|
185
|
+
const orderB = this.IMAGES_SORT_ORDER[imageCodePredictedB] || 100;
|
|
186
|
+
|
|
187
|
+
return orderA - orderB;
|
|
188
|
+
});
|
|
143
189
|
}
|
|
144
190
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { CACHE_MANAGER
|
|
1
|
+
import { CACHE_MANAGER } from '@nestjs/cache-manager';
|
|
2
|
+
import { Inject, Injectable } from '@nestjs/common';
|
|
2
3
|
|
|
3
4
|
import { MarketingImageConfigInterface, MarketingImageConfigsInterface } from '@bytebrand/autode-request';
|
|
4
5
|
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
@@ -16,7 +16,8 @@ import {
|
|
|
16
16
|
truncate,
|
|
17
17
|
} from 'lodash';
|
|
18
18
|
|
|
19
|
-
import { CACHE_MANAGER
|
|
19
|
+
import { CACHE_MANAGER } from '@nestjs/cache-manager';
|
|
20
|
+
import { Inject, Injectable } from '@nestjs/common';
|
|
20
21
|
|
|
21
22
|
import { DePostalCodesEntryInterface } from '@bytebrand/car-basic-data-scope/dist/interfaces/DePostalCodesInterface';
|
|
22
23
|
import { de, deVehicleDetailsPage, deVehicleProps } from '@bytebrand/i18n-dictionaries';
|
|
@@ -70,12 +71,12 @@ export class FbTransformer {
|
|
|
70
71
|
const autodeId = toString(get(car, '_id', ''));
|
|
71
72
|
const year = this.getYear(car);
|
|
72
73
|
const dealerInfo = this.getDealerItems(car);
|
|
73
|
-
console.time(`Address ${car._id}`);
|
|
74
|
+
// console.time(`Address ${car._id}`);
|
|
74
75
|
const address = await this.getAddress(car, owner);
|
|
75
|
-
console.timeEnd(`Address ${car._id}`);
|
|
76
|
-
console.time(`Images ${car._id}`);
|
|
76
|
+
// console.timeEnd(`Address ${car._id}`);
|
|
77
|
+
// console.time(`Images ${car._id}`);
|
|
77
78
|
const image_links = await this.imagesService.getImages(car, images, ImageType.marketing, false);
|
|
78
|
-
console.timeEnd(`Images ${car._id}`);
|
|
79
|
+
// console.timeEnd(`Images ${car._id}`);
|
|
79
80
|
const transformedImages = image_links.map(el => {
|
|
80
81
|
return { url: el };
|
|
81
82
|
});
|
|
@@ -11,7 +11,7 @@ import { DataSchemes } from '@bytebrand/car-schema';
|
|
|
11
11
|
|
|
12
12
|
import { imageItem, IAtributeWrapItem, ModixXmlItem } from '../interfaces';
|
|
13
13
|
import { isNotEmptyArray, isValidVin, xmlStringReplacer } from '../utils';
|
|
14
|
-
import { ConfigService } from '../services';
|
|
14
|
+
import { ConfigService, ImagesService } from '../services';
|
|
15
15
|
import {
|
|
16
16
|
BodyColorList,
|
|
17
17
|
VehicleClassList,
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
|
|
26
26
|
@Injectable()
|
|
27
27
|
export class ModixTransformer {
|
|
28
|
-
constructor(private readonly configService: ConfigService) {}
|
|
28
|
+
constructor(private readonly configService: ConfigService, private readonly imagesService: ImagesService) {}
|
|
29
29
|
|
|
30
30
|
async transform(
|
|
31
31
|
chunkData: { car: DataSchemes.Car; images: ImboImageResponseInterface[] },
|
|
@@ -205,7 +205,7 @@ export class ModixTransformer {
|
|
|
205
205
|
const imageList: IAtributeWrapItem[] = [];
|
|
206
206
|
|
|
207
207
|
if (isNotEmptyArray(images)) {
|
|
208
|
-
images.forEach((image: ImboImageResponseInterface, index) => {
|
|
208
|
+
this.imagesService.sortImages(images).forEach((image: ImboImageResponseInterface, index) => {
|
|
209
209
|
imageList.push({ value: null, atributes: { name: `${image.imageIdentifier}/large`, position: index + 1 } });
|
|
210
210
|
});
|
|
211
211
|
}
|