@bytebrand/export-cars 1.10.11 → 1.11.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 -7
- package/dist/app.module.js.map +1 -1
- 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/trovit.config.d.ts +5 -0
- package/dist/configs/trovit.config.js +17 -0
- package/dist/configs/trovit.config.js.map +1 -0
- package/dist/constants/modix/category.constant.js.map +1 -1
- package/dist/enums/export-type.enum.d.ts +2 -1
- package/dist/enums/export-type.enum.js +1 -0
- package/dist/enums/export-type.enum.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/index.d.ts +1 -0
- package/dist/exporters/index.js +1 -0
- package/dist/exporters/index.js.map +1 -1
- package/dist/exporters/trovit.exporter.d.ts +12 -0
- package/dist/exporters/trovit.exporter.js +62 -0
- package/dist/exporters/trovit.exporter.js.map +1 -0
- package/dist/formats/index.d.ts +1 -0
- package/dist/formats/index.js +1 -0
- package/dist/formats/index.js.map +1 -1
- package/dist/formats/trovit-xml.builder.d.ts +8 -0
- package/dist/formats/trovit-xml.builder.js +39 -0
- package/dist/formats/trovit-xml.builder.js.map +1 -0
- package/dist/interfaces/{autoborse.intreface.d.ts → atributes-wrap-item.intreface.d.ts} +1 -1
- package/dist/interfaces/{modix/modix-wrap-item.intreface.js → atributes-wrap-item.intreface.js} +1 -1
- package/dist/interfaces/atributes-wrap-item.intreface.js.map +1 -0
- package/dist/interfaces/export-item.interface.d.ts +64 -37
- package/dist/interfaces/index.d.ts +1 -0
- package/dist/interfaces/index.js +1 -0
- package/dist/interfaces/index.js.map +1 -1
- package/dist/interfaces/modix/index.d.ts +0 -1
- package/dist/interfaces/modix/index.js +0 -1
- package/dist/interfaces/modix/index.js.map +1 -1
- package/dist/interfaces/modix/modix-item-list.interface.d.ts +2 -2
- package/dist/services/images.service.d.ts +3 -3
- package/dist/services/images.service.js +10 -10
- package/dist/services/images.service.js.map +1 -1
- package/dist/services/index.d.ts +6 -5
- package/dist/services/index.js +6 -5
- package/dist/services/index.js.map +1 -1
- package/dist/services/transformer.service.d.ts +29 -0
- package/dist/services/transformer.service.js +122 -0
- package/dist/services/transformer.service.js.map +1 -0
- package/dist/transformers/auto24.transfomer.js +3 -3
- 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/facebook-shop.transformer.js +1 -1
- package/dist/transformers/facebook-shop.transformer.js.map +1 -1
- package/dist/transformers/fb-description.transformer.js +4 -4
- package/dist/transformers/fb-description.transformer.js.map +1 -1
- package/dist/transformers/fb.transformer.js +5 -6
- package/dist/transformers/fb.transformer.js.map +1 -1
- package/dist/transformers/google.transformer.js +1 -1
- package/dist/transformers/google.transformer.js.map +1 -1
- package/dist/transformers/index.d.ts +1 -0
- package/dist/transformers/index.js +1 -0
- package/dist/transformers/index.js.map +1 -1
- package/dist/transformers/meinstadt.transformer.d.ts +1 -1
- package/dist/transformers/meinstadt.transformer.js +3 -3
- package/dist/transformers/meinstadt.transformer.js.map +1 -1
- package/dist/transformers/mobile.transformer.js +3 -3
- package/dist/transformers/mobile.transformer.js.map +1 -1
- package/dist/transformers/modix.transformer.js +5 -5
- package/dist/transformers/modix.transformer.js.map +1 -1
- package/dist/transformers/ooyyo.transformer.js +1 -1
- 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/transformers/trovit.transformer.d.ts +16 -0
- package/dist/transformers/trovit.transformer.js +73 -0
- package/dist/transformers/trovit.transformer.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/converter.utils.d.ts +1 -0
- package/dist/utils/converter.utils.js +5 -1
- package/dist/utils/converter.utils.js.map +1 -1
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +20 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +3 -3
- package/src/app.module.ts +14 -8
- package/src/configs/index.ts +1 -0
- package/src/configs/trovit.config.ts +14 -0
- package/src/constants/modix/category.constant.ts +0 -1
- package/src/enums/export-type.enum.ts +1 -0
- package/src/export.schema.ts +6 -0
- package/src/exporters/index.ts +1 -0
- package/src/exporters/trovit.exporter.ts +49 -0
- package/src/formats/index.ts +1 -0
- package/src/formats/trovit-xml.builder.ts +44 -0
- package/src/interfaces/{autoborse.intreface.ts → atributes-wrap-item.intreface.ts} +1 -1
- package/src/interfaces/export-item.interface.ts +65 -37
- package/src/interfaces/index.ts +1 -0
- package/src/interfaces/modix/index.ts +0 -1
- package/src/interfaces/modix/modix-item-list.interface.ts +2 -2
- package/src/services/images.service.ts +19 -10
- package/src/services/index.ts +6 -5
- package/src/services/transformer.service.ts +129 -0
- package/src/transformers/as24.transformer.ts +3 -3
- package/src/transformers/auto24.transfomer.ts +7 -2
- package/src/transformers/autouncle.transformer.ts +2 -2
- package/src/transformers/facebook-shop.transformer.ts +1 -1
- package/src/transformers/fb-description.transformer.ts +4 -4
- package/src/transformers/fb.transformer.ts +14 -12
- package/src/transformers/google.transformer.ts +6 -2
- package/src/transformers/index.ts +1 -0
- package/src/transformers/meinstadt.transformer.ts +9 -4
- package/src/transformers/mobile.transformer.ts +8 -4
- package/src/transformers/modix.transformer.ts +14 -14
- package/src/transformers/ooyyo.transformer.ts +1 -1
- package/src/transformers/rubrikk.transformer.ts +1 -1
- package/src/transformers/trovit.transformer.ts +63 -0
- package/src/utils/converter.utils.ts +4 -0
- package/src/utils/index.ts +3 -0
- package/dist/interfaces/autoborse.intreface.js +0 -3
- package/dist/interfaces/autoborse.intreface.js.map +0 -1
- package/dist/interfaces/modix/modix-wrap-item.intreface.d.ts +0 -6
- package/dist/interfaces/modix/modix-wrap-item.intreface.js.map +0 -1
- package/src/interfaces/modix/modix-wrap-item.intreface.ts +0 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.convertToCSV = void 0;
|
|
3
|
+
exports.xmlStringReplacer = exports.convertToCSV = void 0;
|
|
4
4
|
const lodash_1 = require("lodash");
|
|
5
5
|
function convertToCSV(data) {
|
|
6
6
|
const converted = [];
|
|
@@ -12,4 +12,8 @@ function convertToCSV(data) {
|
|
|
12
12
|
return converted.join(';');
|
|
13
13
|
}
|
|
14
14
|
exports.convertToCSV = convertToCSV;
|
|
15
|
+
const xmlStringReplacer = (str) => {
|
|
16
|
+
return typeof str === 'string' ? str.replace(/&/g, '&').replace(/[<>]/g, '') : '';
|
|
17
|
+
};
|
|
18
|
+
exports.xmlStringReplacer = xmlStringReplacer;
|
|
15
19
|
//# sourceMappingURL=converter.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.utils.js","sourceRoot":"","sources":["../../src/utils/converter.utils.ts"],"names":[],"mappings":";;;AAAA,mCAA6B;AAE7B,SAAgB,YAAY,CAAC,IAAa;IACxC,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC/B,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAa,CAAC;QAC7B,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAChE,IAAA,YAAG,EAAC,SAAS,EAAE,CAAC,EAAE,IAAI,QAAQ,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AARD,oCAQC"}
|
|
1
|
+
{"version":3,"file":"converter.utils.js","sourceRoot":"","sources":["../../src/utils/converter.utils.ts"],"names":[],"mappings":";;;AAAA,mCAA6B;AAE7B,SAAgB,YAAY,CAAC,IAAa;IACxC,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC/B,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAa,CAAC;QAC7B,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAChE,IAAA,YAAG,EAAC,SAAS,EAAE,CAAC,EAAE,IAAI,QAAQ,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AARD,oCAQC;AAEM,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAU,EAAE;IACvD,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxF,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./converter.utils"), exports);
|
|
18
|
+
__exportStar(require("./validator.utils"), exports);
|
|
19
|
+
__exportStar(require("./date-time.utils"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,oDAAkC;AAClC,oDAAkC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bytebrand/export-cars",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "bytebrand",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"@bytebrand/car-basic-data-scope": "^9.8.23",
|
|
20
20
|
"@bytebrand/car-description": "^1.7.24",
|
|
21
21
|
"@bytebrand/car-schema": "^3.12.24",
|
|
22
|
-
"@bytebrand/chunkable": "^5.13.
|
|
22
|
+
"@bytebrand/chunkable": "^5.13.10",
|
|
23
23
|
"@bytebrand/cronicle-helper": "^1.15.1",
|
|
24
24
|
"@bytebrand/i18n-dictionaries": "^1.4.2",
|
|
25
25
|
"@bytebrand/import-helper": "^0.35.1",
|
|
@@ -60,5 +60,5 @@
|
|
|
60
60
|
"engines": {
|
|
61
61
|
"node": ">=14.0.0"
|
|
62
62
|
},
|
|
63
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "52e8a6afc5e3392fbdd35795da8fffc24f5ca754"
|
|
64
64
|
}
|
package/src/app.module.ts
CHANGED
|
@@ -2,16 +2,22 @@ import Bottleneck from 'bottleneck';
|
|
|
2
2
|
|
|
3
3
|
import { CacheModule, Module } from '@nestjs/common';
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import {
|
|
6
|
+
TransformerService,
|
|
7
|
+
MappingService,
|
|
8
|
+
RequestService,
|
|
9
|
+
ConfigService,
|
|
10
|
+
RulesService,
|
|
11
|
+
LoaderService,
|
|
12
|
+
UserService,
|
|
13
|
+
CarService,
|
|
14
|
+
ImagesService,
|
|
15
|
+
} from './services';
|
|
8
16
|
import { InputQuestions } from './input.questions';
|
|
9
17
|
import { ExportRunner } from './export.command';
|
|
10
18
|
|
|
11
19
|
@Module({
|
|
12
|
-
imports: [
|
|
13
|
-
CacheModule.register(),
|
|
14
|
-
],
|
|
20
|
+
imports: [CacheModule.register()],
|
|
15
21
|
providers: [
|
|
16
22
|
InputQuestions,
|
|
17
23
|
ExportRunner,
|
|
@@ -23,11 +29,11 @@ import { ExportRunner } from './export.command';
|
|
|
23
29
|
LoaderService,
|
|
24
30
|
RulesService,
|
|
25
31
|
ImagesService,
|
|
32
|
+
TransformerService,
|
|
26
33
|
{
|
|
27
34
|
provide: Bottleneck,
|
|
28
35
|
useValue: new Bottleneck({ maxConcurrent: 10 }),
|
|
29
36
|
},
|
|
30
37
|
],
|
|
31
38
|
})
|
|
32
|
-
|
|
33
|
-
export class AppModule { }
|
|
39
|
+
export class AppModule {}
|
package/src/configs/index.ts
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ExportType, FileType, ImageType } from 'src/enums';
|
|
2
|
+
import { Params } from '../interfaces/params.interface';
|
|
3
|
+
import { Config } from './config';
|
|
4
|
+
|
|
5
|
+
export class TrovitConfig extends Config {
|
|
6
|
+
constructor(params: Params) {
|
|
7
|
+
super(params);
|
|
8
|
+
this.pathesConfig.localConvertedDirectory = `resources/${ExportType.TROVIT}-export`;
|
|
9
|
+
this.imageType = ImageType.default;
|
|
10
|
+
this.outputFiles = [
|
|
11
|
+
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.TROVIT}.${FileType.XML}`,
|
|
12
|
+
];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -8,6 +8,5 @@ export const CategoryList: IModixItemsList = {
|
|
|
8
8
|
selector_category_convertible: { value: 'Convertible', atributes: { id: 1 } },
|
|
9
9
|
selector_category_suv: { value: 'Off - Road', atributes: { id: 11 } },
|
|
10
10
|
selector_category_van: { value: 'Van', atributes: { id: 388 } },
|
|
11
|
-
// selector_category_transporter - there are 14 diffrenet
|
|
12
11
|
selector_category_minibus: { value: 'Minibusses', atributes: { id: 251 } },
|
|
13
12
|
};
|
package/src/export.schema.ts
CHANGED
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
ByOwnerConfig,
|
|
19
19
|
FacebookShopConfig,
|
|
20
20
|
CriteoConfig,
|
|
21
|
+
TrovitConfig,
|
|
21
22
|
} from './configs';
|
|
22
23
|
import {
|
|
23
24
|
As24Exporter,
|
|
@@ -32,6 +33,7 @@ import {
|
|
|
32
33
|
ModixExporter,
|
|
33
34
|
RubrikkExporter,
|
|
34
35
|
FacebookShopExporter,
|
|
36
|
+
TrovitExporter,
|
|
35
37
|
} from './exporters';
|
|
36
38
|
|
|
37
39
|
export const exportSchema = {
|
|
@@ -103,4 +105,8 @@ export const exportSchema = {
|
|
|
103
105
|
config: FacebookShopConfig,
|
|
104
106
|
exporter: FacebookShopExporter,
|
|
105
107
|
},
|
|
108
|
+
[ExportType.TROVIT]: {
|
|
109
|
+
config: TrovitConfig,
|
|
110
|
+
exporter: TrovitExporter,
|
|
111
|
+
},
|
|
106
112
|
};
|
package/src/exporters/index.ts
CHANGED
|
@@ -0,0 +1,49 @@
|
|
|
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 { TrovitXmlBuilder } from '../formats';
|
|
10
|
+
import { TrovitTransformer } from '../transformers';
|
|
11
|
+
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class TrovitExporter 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 trovitXmlBuilder = new TrovitXmlBuilder(fileXml);
|
|
28
|
+
await trovitXmlBuilder.buildStart();
|
|
29
|
+
|
|
30
|
+
const trovitTransformer = await this.moduleRef.create(TrovitTransformer);
|
|
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
|
+
if (chunk && chunkData) {
|
|
36
|
+
for (let i = 0; i < chunk.data.length; i += 1) {
|
|
37
|
+
const data = chunk.data[i];
|
|
38
|
+
|
|
39
|
+
const transformedCar = await trovitTransformer.transform(data);
|
|
40
|
+
|
|
41
|
+
await trovitXmlBuilder.addItem(transformedCar);
|
|
42
|
+
this.carService.counter.countCar(data.images);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
await trovitXmlBuilder.buildEnd();
|
|
48
|
+
}
|
|
49
|
+
}
|
package/src/formats/index.ts
CHANGED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { XMLBuilderBase } from '@bytebrand/cronicle-helper';
|
|
2
|
+
import { TrovitXmlItem } from '../interfaces';
|
|
3
|
+
|
|
4
|
+
export class TrovitXmlBuilder extends XMLBuilderBase {
|
|
5
|
+
async buildStart(): Promise<void> {
|
|
6
|
+
await this.write('<?xml version="1.0" encoding="utf-8"?>\n<trovit>\n');
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
async addItem(car: TrovitXmlItem): Promise<void> {
|
|
10
|
+
let item = '\n<ad>\n';
|
|
11
|
+
|
|
12
|
+
const tags = Object.keys(car);
|
|
13
|
+
|
|
14
|
+
for (const tag of tags) {
|
|
15
|
+
if (tag === 'pictures') {
|
|
16
|
+
item += this.mapPictures(car[tag]);
|
|
17
|
+
} else {
|
|
18
|
+
item += this.getElement(tag, car[tag]?.value, true, car[tag]?.atributes);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
item += '</ad>';
|
|
22
|
+
|
|
23
|
+
await this.write(item);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async buildEnd(): Promise<void> {
|
|
27
|
+
await this.write('</trovit>');
|
|
28
|
+
await this.end();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
mapPictures(images: Array<string>) {
|
|
32
|
+
let item = '<pictures>';
|
|
33
|
+
|
|
34
|
+
images.map(url => {
|
|
35
|
+
item += '<picture>\n';
|
|
36
|
+
item += this.getElement('picture_url', url, true);
|
|
37
|
+
item += '</picture>\n';
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
item += '</pictures>\n';
|
|
41
|
+
|
|
42
|
+
return item;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DataSchemes } from '@bytebrand/car-schema';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { IAtributeWrapItem } from './atributes-wrap-item.intreface';
|
|
4
4
|
import { Description } from './description.interface';
|
|
5
5
|
|
|
6
6
|
export interface FbXmlItem {
|
|
@@ -97,7 +97,7 @@ export interface MeinstadtJsonItem {
|
|
|
97
97
|
sellerType: string;
|
|
98
98
|
usageState: string;
|
|
99
99
|
imagesCount: number;
|
|
100
|
-
images: string
|
|
100
|
+
images: string;
|
|
101
101
|
power: number;
|
|
102
102
|
'transmissionType/transmission': string;
|
|
103
103
|
'customerType/sellerType': string;
|
|
@@ -205,19 +205,19 @@ export interface RubrikkXmlItem {
|
|
|
205
205
|
|
|
206
206
|
export interface ModixXmlItem {
|
|
207
207
|
maindata: {
|
|
208
|
-
category:
|
|
209
|
-
manufacturer:
|
|
210
|
-
model:
|
|
211
|
-
submodel:
|
|
212
|
-
mileage:
|
|
213
|
-
cylinderCapacity:
|
|
214
|
-
enginePower:
|
|
215
|
-
fuel:
|
|
216
|
-
accident:
|
|
217
|
-
transmission:
|
|
218
|
-
usageCategory:
|
|
219
|
-
bodyStyle:
|
|
220
|
-
isOnline:
|
|
208
|
+
category: IAtributeWrapItem;
|
|
209
|
+
manufacturer: IAtributeWrapItem;
|
|
210
|
+
model: IAtributeWrapItem;
|
|
211
|
+
submodel: IAtributeWrapItem;
|
|
212
|
+
mileage: IAtributeWrapItem;
|
|
213
|
+
cylinderCapacity: IAtributeWrapItem;
|
|
214
|
+
enginePower: IAtributeWrapItem;
|
|
215
|
+
fuel: IAtributeWrapItem;
|
|
216
|
+
accident: IAtributeWrapItem;
|
|
217
|
+
transmission: IAtributeWrapItem;
|
|
218
|
+
usageCategory: IAtributeWrapItem;
|
|
219
|
+
bodyStyle: IAtributeWrapItem;
|
|
220
|
+
isOnline: IAtributeWrapItem;
|
|
221
221
|
};
|
|
222
222
|
bodyColors: bodyColorItem;
|
|
223
223
|
dates: mapSameTagsItem[];
|
|
@@ -241,48 +241,48 @@ export interface tagWrapperItem {
|
|
|
241
241
|
export interface bodyColorItem {
|
|
242
242
|
id: number;
|
|
243
243
|
data: {
|
|
244
|
-
name:
|
|
245
|
-
description:
|
|
246
|
-
paint:
|
|
244
|
+
name: IAtributeWrapItem;
|
|
245
|
+
description: IAtributeWrapItem;
|
|
246
|
+
paint: IAtributeWrapItem;
|
|
247
247
|
};
|
|
248
248
|
}
|
|
249
249
|
|
|
250
250
|
export interface identificationItem {
|
|
251
251
|
hsnTsn: {
|
|
252
|
-
hsn:
|
|
253
|
-
tsn:
|
|
252
|
+
hsn: IAtributeWrapItem;
|
|
253
|
+
tsn: IAtributeWrapItem;
|
|
254
254
|
};
|
|
255
|
-
vin:
|
|
256
|
-
datEuropacode:
|
|
257
|
-
schwackecode:
|
|
255
|
+
vin: IAtributeWrapItem;
|
|
256
|
+
datEuropacode: IAtributeWrapItem;
|
|
257
|
+
schwackecode: IAtributeWrapItem;
|
|
258
258
|
}
|
|
259
259
|
|
|
260
260
|
export interface imageItem {
|
|
261
261
|
url: string;
|
|
262
|
-
imageList:
|
|
262
|
+
imageList: IAtributeWrapItem[];
|
|
263
263
|
}
|
|
264
264
|
|
|
265
265
|
export interface priceItem {
|
|
266
266
|
vatReclaimable: boolean;
|
|
267
|
-
grossPrice:
|
|
267
|
+
grossPrice: IAtributeWrapItem;
|
|
268
268
|
}
|
|
269
269
|
|
|
270
270
|
export interface dealerItem {
|
|
271
271
|
address: {
|
|
272
|
-
company:
|
|
273
|
-
street:
|
|
274
|
-
city:
|
|
275
|
-
zip:
|
|
276
|
-
country:
|
|
277
|
-
phone:
|
|
278
|
-
fax:
|
|
279
|
-
email:
|
|
280
|
-
homepage:
|
|
272
|
+
company: IAtributeWrapItem;
|
|
273
|
+
street: IAtributeWrapItem;
|
|
274
|
+
city: IAtributeWrapItem;
|
|
275
|
+
zip: IAtributeWrapItem;
|
|
276
|
+
country: IAtributeWrapItem;
|
|
277
|
+
phone: IAtributeWrapItem;
|
|
278
|
+
fax: IAtributeWrapItem;
|
|
279
|
+
email: IAtributeWrapItem;
|
|
280
|
+
homepage: IAtributeWrapItem;
|
|
281
281
|
};
|
|
282
282
|
imprint: {
|
|
283
|
-
registerId:
|
|
284
|
-
representitive:
|
|
285
|
-
vatid:
|
|
283
|
+
registerId: IAtributeWrapItem;
|
|
284
|
+
representitive: IAtributeWrapItem;
|
|
285
|
+
vatid: IAtributeWrapItem;
|
|
286
286
|
};
|
|
287
287
|
}
|
|
288
288
|
|
|
@@ -310,3 +310,31 @@ export interface FacebookShopTag {
|
|
|
310
310
|
isGoogle: boolean;
|
|
311
311
|
value: any;
|
|
312
312
|
}
|
|
313
|
+
|
|
314
|
+
export interface TrovitXmlItem {
|
|
315
|
+
id: IAtributeWrapItem;
|
|
316
|
+
url: IAtributeWrapItem;
|
|
317
|
+
title: IAtributeWrapItem;
|
|
318
|
+
content: IAtributeWrapItem;
|
|
319
|
+
price: IAtributeWrapItem;
|
|
320
|
+
car_type: IAtributeWrapItem;
|
|
321
|
+
dealer: IAtributeWrapItem;
|
|
322
|
+
postcode: IAtributeWrapItem;
|
|
323
|
+
vin_database: IAtributeWrapItem;
|
|
324
|
+
make: IAtributeWrapItem;
|
|
325
|
+
model: IAtributeWrapItem;
|
|
326
|
+
color: IAtributeWrapItem;
|
|
327
|
+
year: IAtributeWrapItem;
|
|
328
|
+
mileage: IAtributeWrapItem;
|
|
329
|
+
doors: IAtributeWrapItem;
|
|
330
|
+
seats: IAtributeWrapItem;
|
|
331
|
+
engine_size: IAtributeWrapItem;
|
|
332
|
+
cylinders: IAtributeWrapItem;
|
|
333
|
+
fuel: IAtributeWrapItem;
|
|
334
|
+
transmission: IAtributeWrapItem;
|
|
335
|
+
power: IAtributeWrapItem;
|
|
336
|
+
fuel_consumption: IAtributeWrapItem;
|
|
337
|
+
co2_emissions: IAtributeWrapItem;
|
|
338
|
+
pictures: Array<string>;
|
|
339
|
+
is_new: IAtributeWrapItem;
|
|
340
|
+
}
|
package/src/interfaces/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { get
|
|
1
|
+
import { get } from 'lodash';
|
|
2
2
|
|
|
3
3
|
import { Injectable } from '@nestjs/common';
|
|
4
4
|
|
|
@@ -7,7 +7,7 @@ import { ImboImageResponseInterface } from '@bytebrand/chunkable';
|
|
|
7
7
|
import { DataSchemes } from '@bytebrand/car-schema';
|
|
8
8
|
|
|
9
9
|
import { FB_MAX_IMAGE_COUNT_FOR_DEAFULT } from '../constants/fb.constants';
|
|
10
|
-
import { isNotEmptyArray } from '../utils
|
|
10
|
+
import { isNotEmptyArray } from '../utils';
|
|
11
11
|
import { ConfigService } from './config.service';
|
|
12
12
|
import { UserService } from './user.service';
|
|
13
13
|
import { ImageType } from '../enums';
|
|
@@ -20,21 +20,26 @@ export class ImagesService {
|
|
|
20
20
|
'https://images.auto.de/carimage/noimage/pFyfBsqBHEso/large-cached.jpeg',
|
|
21
21
|
];
|
|
22
22
|
|
|
23
|
-
constructor(private readonly configService: ConfigService, private readonly userService: UserService) {
|
|
23
|
+
constructor(private readonly configService: ConfigService, private readonly userService: UserService) {}
|
|
24
24
|
|
|
25
25
|
async getImages(
|
|
26
26
|
car: DataSchemes.Car,
|
|
27
27
|
images: ImboImageResponseInterface[],
|
|
28
28
|
imageType: ImageType,
|
|
29
|
+
ignoreDefImages: boolean,
|
|
29
30
|
): Promise<Array<string>> {
|
|
30
31
|
if (imageType === ImageType.default) {
|
|
31
|
-
return this.getDefaultImages(car, images);
|
|
32
|
+
return this.getDefaultImages(car, images, ignoreDefImages);
|
|
32
33
|
} else {
|
|
33
|
-
return await this.getMarketingImages(car, images);
|
|
34
|
+
return await this.getMarketingImages(car, images, ignoreDefImages);
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
|
|
37
|
-
getDefaultImages(
|
|
38
|
+
getDefaultImages(
|
|
39
|
+
car: DataSchemes.Car,
|
|
40
|
+
images: ImboImageResponseInterface[],
|
|
41
|
+
ignoreDefImages: boolean,
|
|
42
|
+
): Array<string> {
|
|
38
43
|
if (!isNotEmptyArray(images)) {
|
|
39
44
|
return this.DEFAULT_IMAGES;
|
|
40
45
|
}
|
|
@@ -42,7 +47,7 @@ export class ImagesService {
|
|
|
42
47
|
const sortedImages = this.sortImages(images, car);
|
|
43
48
|
const transformedImages = this.generateImageLinks(sortedImages, get(car, '_id'));
|
|
44
49
|
|
|
45
|
-
if (transformedImages.length < 17) {
|
|
50
|
+
if (!ignoreDefImages && transformedImages.length < 17) {
|
|
46
51
|
transformedImages.push(...this.DEFAULT_IMAGES);
|
|
47
52
|
}
|
|
48
53
|
|
|
@@ -55,7 +60,11 @@ export class ImagesService {
|
|
|
55
60
|
});
|
|
56
61
|
}
|
|
57
62
|
|
|
58
|
-
async getMarketingImages(
|
|
63
|
+
async getMarketingImages(
|
|
64
|
+
car: DataSchemes.Car,
|
|
65
|
+
images: ImboImageResponseInterface[],
|
|
66
|
+
ignoreDefImages: boolean,
|
|
67
|
+
): Promise<string[]> {
|
|
59
68
|
const imageUrl = this.configService.config.marketingImageUrl;
|
|
60
69
|
|
|
61
70
|
const transformedImages = this.transformImagesArrayIntoObject(images);
|
|
@@ -75,7 +84,7 @@ export class ImagesService {
|
|
|
75
84
|
}
|
|
76
85
|
}
|
|
77
86
|
|
|
78
|
-
if (imageUrls.length < FB_MAX_IMAGE_COUNT_FOR_DEAFULT) {
|
|
87
|
+
if (!ignoreDefImages && imageUrls.length < FB_MAX_IMAGE_COUNT_FOR_DEAFULT) {
|
|
79
88
|
imageUrls.push(...this.DEFAULT_IMAGES);
|
|
80
89
|
}
|
|
81
90
|
|
|
@@ -85,7 +94,7 @@ export class ImagesService {
|
|
|
85
94
|
private transformImagesArrayIntoObject(images: ImboImageResponseInterface[]) {
|
|
86
95
|
const result: { [imageCode: string]: string } = {};
|
|
87
96
|
images.forEach(image => {
|
|
88
|
-
const imageCode = image
|
|
97
|
+
const imageCode = image?.imageCodePredicted?.split('-')[0];
|
|
89
98
|
result[imageCode] = image.imageIdentifier;
|
|
90
99
|
});
|
|
91
100
|
return result;
|
package/src/services/index.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './rules.service';
|
|
3
|
-
export * from './car.service';
|
|
4
|
-
export * from './loader.service';
|
|
5
|
-
export * from './config.service';
|
|
1
|
+
export * from './transformer.service';
|
|
6
2
|
export * from './request.service';
|
|
7
3
|
export * from './mapping.service';
|
|
4
|
+
export * from './loader.service';
|
|
5
|
+
export * from './config.service';
|
|
8
6
|
export * from './images.service';
|
|
7
|
+
export * from './rules.service';
|
|
8
|
+
export * from './user.service';
|
|
9
|
+
export * from './car.service';
|