@bytebrand/export-cars 1.0.14 → 1.0.17
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.d.ts +5 -0
- package/dist/config/alleskralle.config.js +18 -0
- package/dist/config/alleskralle.config.js.map +1 -0
- package/dist/config/auto24.config.d.ts +0 -1
- package/dist/config/auto24.config.js +3 -18
- package/dist/config/auto24.config.js.map +1 -1
- package/dist/config/config.d.ts +3 -0
- package/dist/config/config.js +5 -0
- package/dist/config/config.js.map +1 -1
- package/dist/config/dasparking.config.d.ts +5 -0
- package/dist/config/dasparking.config.js +18 -0
- package/dist/config/dasparking.config.js.map +1 -0
- package/dist/enums/export-type.enum.d.ts +3 -1
- package/dist/enums/export-type.enum.js +2 -0
- package/dist/enums/export-type.enum.js.map +1 -1
- package/dist/export.schema.d.ts +10 -0
- package/dist/export.schema.js +10 -0
- package/dist/export.schema.js.map +1 -1
- package/dist/exporters/auto24.exporter.js +9 -17
- package/dist/exporters/auto24.exporter.js.map +1 -1
- package/dist/exporters/mobile.exporter.js.map +1 -1
- package/dist/formats/auto24-xml.builder.d.ts +1 -1
- package/dist/formats/auto24-xml.builder.js +8 -3
- package/dist/formats/auto24-xml.builder.js.map +1 -1
- package/dist/interfaces/dealers-mapping.interface.d.ts +7 -0
- package/dist/interfaces/dealers-mapping.interface.js +3 -0
- package/dist/interfaces/dealers-mapping.interface.js.map +1 -0
- package/dist/interfaces/params.interface.d.ts +0 -1
- package/dist/services/car.service.js +0 -1
- package/dist/services/car.service.js.map +1 -1
- package/dist/services/mapping.service.d.ts +3 -0
- package/dist/services/mapping.service.js +11 -0
- package/dist/services/mapping.service.js.map +1 -1
- package/dist/transformers/auto24.transfomer.js +5 -1
- package/dist/transformers/auto24.transfomer.js.map +1 -1
- package/dist/transformers/google.transformer.js +3 -0
- package/dist/transformers/google.transformer.js.map +1 -1
- package/dist/transformers/mobile.transformer.js +12 -2
- package/dist/transformers/mobile.transformer.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/parser.utils.d.ts +1 -0
- package/dist/utils/parser.utils.js +12 -1
- package/dist/utils/parser.utils.js.map +1 -1
- package/package.json +3 -3
- package/src/config/alleskralle.config.ts +15 -0
- package/src/config/auto24.config.ts +3 -19
- package/src/config/config.ts +5 -0
- package/src/config/dasparking.config.ts +15 -0
- package/src/enums/export-type.enum.ts +2 -0
- package/src/export.schema.ts +10 -0
- package/src/exporters/auto24.exporter.ts +9 -17
- package/src/exporters/mobile.exporter.ts +0 -2
- package/src/formats/auto24-xml.builder.ts +7 -3
- package/src/interfaces/dealers-mapping.interface.ts +7 -0
- package/src/interfaces/params.interface.ts +0 -1
- package/src/services/car.service.ts +0 -1
- package/src/services/mapping.service.ts +15 -2
- package/src/transformers/auto24.transfomer.ts +5 -1
- package/src/transformers/google.transformer.ts +3 -0
- package/src/transformers/mobile.transformer.ts +13 -2
- package/src/utils/parser.utils.ts +11 -0
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseFields = void 0;
|
|
3
|
+
exports.parseDealersList = exports.parseFields = void 0;
|
|
4
|
+
const lodash_1 = require("lodash");
|
|
4
5
|
function parseFields(values, fc) {
|
|
5
6
|
const fieldsArr = values.split(',');
|
|
6
7
|
return fieldsArr.map((e) => fc(e));
|
|
7
8
|
}
|
|
8
9
|
exports.parseFields = parseFields;
|
|
10
|
+
function parseDealersList(dealers) {
|
|
11
|
+
if (dealers) {
|
|
12
|
+
if ((0, lodash_1.indexOf)(dealers, ',') !== -1) {
|
|
13
|
+
return dealers.split(',').map((dealerId) => dealerId.trim());
|
|
14
|
+
}
|
|
15
|
+
return [dealers];
|
|
16
|
+
}
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
exports.parseDealersList = parseDealersList;
|
|
9
20
|
//# sourceMappingURL=parser.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.utils.js","sourceRoot":"","sources":["../../src/utils/parser.utils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"parser.utils.js","sourceRoot":"","sources":["../../src/utils/parser.utils.ts"],"names":[],"mappings":";;;AAAA,mCAAiC;AAGjC,SAAgB,WAAW,CAAI,MAAc,EAAE,EAAiB;IAC9D,MAAM,SAAS,GAAa,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAS,EAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAHD,kCAGC;AAED,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,IAAI,OAAO,EAAE;QACX,IAAI,IAAA,gBAAO,EAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;YAChC,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;SACtE;QACD,OAAO,CAAC,OAAO,CAAC,CAAC;KAClB;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AARD,4CAQC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bytebrand/export-cars",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.17",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "bytebrand",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"@bytebrand/autode-request": "^1.5.13",
|
|
18
18
|
"@bytebrand/car-basic-data-scope": "~7.1.11",
|
|
19
19
|
"@bytebrand/car-description": "^1.2.24",
|
|
20
|
-
"@bytebrand/car-schema": "^3.
|
|
20
|
+
"@bytebrand/car-schema": "^3.12.24",
|
|
21
21
|
"@bytebrand/chunkable": "^5.4.4",
|
|
22
22
|
"@bytebrand/cronicle-helper": "^1.7.4",
|
|
23
23
|
"@bytebrand/fe-financing": "^5.3.1",
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"engines": {
|
|
65
65
|
"node": ">=14.0.0"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "a89952f7214cc5ca0453df1973e09ba73b0d8770"
|
|
68
68
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Params } from '../interfaces/params.interface';
|
|
2
|
+
import { parseDealersList } from '../utils/parser.utils';
|
|
3
|
+
import { Config } from './config';
|
|
4
|
+
|
|
5
|
+
export class AlleskralleConfig extends Config {
|
|
6
|
+
constructor(params: Params) {
|
|
7
|
+
super(params);
|
|
8
|
+
this.pathesConfig.localConvertedDirectory = this.environmentConfig[params.environment].localConvertedDirectory;
|
|
9
|
+
this.pathesConfig.remoteDirectory = this.environmentConfig[params.environment].remoteDirectory;
|
|
10
|
+
this.dealersList = params.dealers ? parseDealersList(params.dealers) : null;
|
|
11
|
+
this.campaign = 'alleskralle';
|
|
12
|
+
this.location = 'Deutschland';
|
|
13
|
+
this.outputFiles = ['api_export_cars_alleskralle.xml'];
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { indexOf } from 'lodash';
|
|
2
1
|
import { Params } from '../interfaces/params.interface';
|
|
2
|
+
import { parseDealersList } from '../utils/parser.utils';
|
|
3
3
|
import { Config } from './config';
|
|
4
4
|
|
|
5
5
|
export class Auto24Config extends Config {
|
|
@@ -7,23 +7,7 @@ export class Auto24Config extends Config {
|
|
|
7
7
|
super(params);
|
|
8
8
|
this.pathesConfig.localConvertedDirectory = this.environmentConfig[params.environment].localConvertedDirectory;
|
|
9
9
|
this.pathesConfig.remoteDirectory = this.environmentConfig[params.environment].remoteDirectory;
|
|
10
|
-
this.dealersList =
|
|
11
|
-
this.outputFiles = [
|
|
12
|
-
'api_export_cars_GERMAN.xml',
|
|
13
|
-
'api_export_moto_GERMAN.xml',
|
|
14
|
-
'api_export_nfz_GERMAN.xml',
|
|
15
|
-
'api_export_womo_GERMAN.xml',
|
|
16
|
-
'autode.tar.gz',
|
|
17
|
-
];
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
private getDealersList(dealers: string): string[] {
|
|
21
|
-
if (dealers) {
|
|
22
|
-
if (indexOf(dealers, ',') !== -1) {
|
|
23
|
-
return dealers.split(',').map((dealerId: string) => dealerId.trim());
|
|
24
|
-
}
|
|
25
|
-
return [dealers];
|
|
26
|
-
}
|
|
27
|
-
return [];
|
|
10
|
+
this.dealersList = params.dealers ? parseDealersList(params.dealers) : null;
|
|
11
|
+
this.outputFiles = ['api_export_cars_GERMAN.xml', 'autode.tar.gz'];
|
|
28
12
|
}
|
|
29
13
|
}
|
package/src/config/config.ts
CHANGED
|
@@ -14,6 +14,7 @@ export class Config {
|
|
|
14
14
|
isNewCar: boolean;
|
|
15
15
|
isCriteo: boolean;
|
|
16
16
|
criteoId: number;
|
|
17
|
+
location: string;
|
|
17
18
|
exportType: ExportType;
|
|
18
19
|
url: string;
|
|
19
20
|
input: {
|
|
@@ -35,6 +36,8 @@ export class Config {
|
|
|
35
36
|
googleSheetsApiKey: string;
|
|
36
37
|
mappingSpreadsheetId: string;
|
|
37
38
|
mappingSpreadsheetTitle: string;
|
|
39
|
+
dealersSpreadsheetId: string;
|
|
40
|
+
dealersSpreadsheetTitle: string;
|
|
38
41
|
|
|
39
42
|
protected environmentConfig = {
|
|
40
43
|
[Environment.LOCAL]: {
|
|
@@ -73,6 +76,8 @@ export class Config {
|
|
|
73
76
|
this.url = this.environmentConfig[params.environment].url;
|
|
74
77
|
this.googleSheetsApiKey = params.googleSheetsApiKey;
|
|
75
78
|
this.mappingSpreadsheetId = '147qz9sTgs1wi13ua8YKa0IgfxAn1X_qH6LkGnAnzeyY';
|
|
79
|
+
this.dealersSpreadsheetId = '1gWrcA-uRTpna1h66Mbe2Y7NA0tIhlUaQXBcS4a_UzOw';
|
|
80
|
+
this.dealersSpreadsheetTitle = 'dealers_mapping';
|
|
76
81
|
this.userActionsUrl = `https://www.${this.url}/service/user-actions`;
|
|
77
82
|
this.imboUrl = `https://www.${this.url}/service/image-imbo`;
|
|
78
83
|
this.imageUrl = `https://images.${this.url}`;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Params } from '../interfaces/params.interface';
|
|
2
|
+
import { parseDealersList } from '../utils/parser.utils';
|
|
3
|
+
import { Config } from './config';
|
|
4
|
+
|
|
5
|
+
export class DasparkingConfig extends Config {
|
|
6
|
+
constructor(params: Params) {
|
|
7
|
+
super(params);
|
|
8
|
+
this.pathesConfig.localConvertedDirectory = this.environmentConfig[params.environment].localConvertedDirectory;
|
|
9
|
+
this.pathesConfig.remoteDirectory = this.environmentConfig[params.environment].remoteDirectory;
|
|
10
|
+
this.dealersList = params.dealers ? parseDealersList(params.dealers) : null;
|
|
11
|
+
this.campaign = 'dasparking';
|
|
12
|
+
this.location = 'Deutschland';
|
|
13
|
+
this.outputFiles = ['api_export_cars_dasparking.xml'];
|
|
14
|
+
}
|
|
15
|
+
}
|
package/src/export.schema.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { AlleskralleConfig } from './config/alleskralle.config';
|
|
1
2
|
import { As24Config } from './config/as24.config';
|
|
2
3
|
import { Auto24Config } from './config/auto24.config';
|
|
3
4
|
import { AutoboerseConfig } from './config/autoboerse.config';
|
|
4
5
|
import { AutouncleConfig } from './config/autouncle.config';
|
|
5
6
|
import { ByOwnerConfig } from './config/by-owner.config';
|
|
7
|
+
import { DasparkingConfig } from './config/dasparking.config';
|
|
6
8
|
import { EautoConfig } from './config/eauto.config';
|
|
7
9
|
import { FbConfig } from './config/fb.config';
|
|
8
10
|
import { GoogleConfig } from './config/google.config';
|
|
@@ -70,4 +72,12 @@ export const exportSchema = {
|
|
|
70
72
|
config: As24Config,
|
|
71
73
|
exporter: As24Exporter,
|
|
72
74
|
},
|
|
75
|
+
[ExportType.ALLESKRALLE]: {
|
|
76
|
+
config: AlleskralleConfig,
|
|
77
|
+
exporter: Auto24Exporter,
|
|
78
|
+
},
|
|
79
|
+
[ExportType.DASPARKING]: {
|
|
80
|
+
config: DasparkingConfig,
|
|
81
|
+
exporter: Auto24Exporter,
|
|
82
|
+
},
|
|
73
83
|
};
|
|
@@ -26,31 +26,24 @@ export class Auto24Exporter implements Exporter {
|
|
|
26
26
|
exists && (await CronicleUtils.unlink(file));
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
const [
|
|
30
|
-
console.log(fileCarXml);
|
|
31
|
-
const carsXmlBuilder = new Auto24XmlBuilder(fileCarXml);
|
|
32
|
-
const motoXmlBuilder = new Auto24XmlBuilder(fileMotoXml);
|
|
33
|
-
const nfzXmlBuilder = new Auto24XmlBuilder(fileNfzXml);
|
|
34
|
-
const womoXmlBuilder = new Auto24XmlBuilder(fileWomoXml);
|
|
29
|
+
const [fileXml, fileGZ] = this.configService.config.outputFiles;
|
|
35
30
|
|
|
36
|
-
|
|
37
|
-
await nfzXmlBuilder.buildStart();
|
|
38
|
-
await womoXmlBuilder.buildStart();
|
|
31
|
+
const xmlBuilder = new Auto24XmlBuilder(fileXml);
|
|
39
32
|
|
|
40
33
|
const auto24Transformer = await this.moduleRef.create(Auto24Transformer);
|
|
41
34
|
|
|
42
35
|
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
43
36
|
if (chunk && chunk.data) {
|
|
44
37
|
if (toNumber(chunk.id) === 0) {
|
|
45
|
-
await
|
|
38
|
+
await xmlBuilder.buildStart(chunk.total);
|
|
46
39
|
}
|
|
47
40
|
|
|
48
41
|
for (let i = 0; i < chunk.data.length; i += 1) {
|
|
49
42
|
const data = chunk.data[i];
|
|
50
43
|
const { car, images } = data;
|
|
51
44
|
const ownerId = get(car, 'metaData.ownerId');
|
|
52
|
-
if (this.configService.config.dealersList.indexOf(ownerId) !== -1) {
|
|
53
|
-
await
|
|
45
|
+
if (!this.configService.config.dealersList || this.configService.config.dealersList.indexOf(ownerId) !== -1) {
|
|
46
|
+
await xmlBuilder.addItem(auto24Transformer.transform(car, images), this.configService.config.location);
|
|
54
47
|
this.carService.counter.countCar(images);
|
|
55
48
|
}
|
|
56
49
|
}
|
|
@@ -58,11 +51,10 @@ export class Auto24Exporter implements Exporter {
|
|
|
58
51
|
}
|
|
59
52
|
});
|
|
60
53
|
|
|
61
|
-
await
|
|
62
|
-
await motoXmlBuilder.buildEnd();
|
|
63
|
-
await nfzXmlBuilder.buildEnd();
|
|
64
|
-
await womoXmlBuilder.buildEnd();
|
|
54
|
+
await xmlBuilder.buildEnd();
|
|
65
55
|
|
|
66
|
-
|
|
56
|
+
if (fileGZ) {
|
|
57
|
+
await Zipper.tar({ dest: fileGZ, fileList: [fileXml] });
|
|
58
|
+
}
|
|
67
59
|
}
|
|
68
60
|
}
|
|
@@ -13,10 +13,8 @@ import { Injectable } from '@nestjs/common';
|
|
|
13
13
|
import { ModuleRef } from '@nestjs/core';
|
|
14
14
|
import { HttpService } from '@nestjs/axios';
|
|
15
15
|
import { lastValueFrom } from 'rxjs';
|
|
16
|
-
import { createWriteStream } from 'fs';
|
|
17
16
|
import { get } from 'lodash';
|
|
18
17
|
import { RulesService } from '../services/rules.service';
|
|
19
|
-
import { pipeline } from 'stream/promises';
|
|
20
18
|
|
|
21
19
|
@Injectable()
|
|
22
20
|
export class MobileExporter implements Exporter {
|
|
@@ -9,7 +9,7 @@ export class Auto24XmlBuilder extends XMLBuilderBase {
|
|
|
9
9
|
<index_totalResults>${totalResults}</index_totalResults>`);
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
async addItem(car: Auto24XmlItem): Promise<void> {
|
|
12
|
+
async addItem(car: Auto24XmlItem, location = ''): Promise<void> {
|
|
13
13
|
let item = '';
|
|
14
14
|
|
|
15
15
|
item += '\n<item>\n';
|
|
@@ -30,8 +30,12 @@ export class Auto24XmlBuilder extends XMLBuilderBase {
|
|
|
30
30
|
item += this.getElementsList('images', 'image', car.images);
|
|
31
31
|
item += this.getElement('price', car.price);
|
|
32
32
|
item += this.getElement('power-kw', car.power);
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
if (location) {
|
|
34
|
+
item += this.getElement('location', location);
|
|
35
|
+
} else {
|
|
36
|
+
item += this.getElement('zip', car.zip);
|
|
37
|
+
item += this.getElement('city', car.city, true);
|
|
38
|
+
}
|
|
35
39
|
item += this.getElement('mileage', car.mileage);
|
|
36
40
|
item += this.getElement('companyname', car.companyname, true);
|
|
37
41
|
item += this.getElement('extras', car.extras, true);
|
|
@@ -41,7 +41,6 @@ export class CarService {
|
|
|
41
41
|
if (!owner) {
|
|
42
42
|
try {
|
|
43
43
|
owner = await this.bottleneck.schedule(() => this.requestService.upaRequest.getDealerProfile(ownerId));
|
|
44
|
-
console.log('TEST');
|
|
45
44
|
} catch (e) {
|
|
46
45
|
console.log(e);
|
|
47
46
|
if (e.statusCode !== HttpStatus.NOT_FOUND) {
|
|
@@ -2,11 +2,13 @@ import { Injectable } from '@nestjs/common';
|
|
|
2
2
|
import { MappingRules } from '../interfaces/mapping-rules.interface';
|
|
3
3
|
import { GoogleSpreadsheet, GoogleSpreadsheetRow } from 'google-spreadsheet';
|
|
4
4
|
import { ConfigService } from './config.service';
|
|
5
|
+
import { DealersMapping } from '../interfaces/dealers-mapping.interface';
|
|
5
6
|
|
|
6
7
|
@Injectable()
|
|
7
8
|
export class MappingService {
|
|
8
9
|
constructor(private configService: ConfigService) {}
|
|
9
10
|
private rules: MappingRules[];
|
|
11
|
+
private dealers: any;
|
|
10
12
|
|
|
11
13
|
async getRules(): Promise<MappingRules[]> {
|
|
12
14
|
if (!this.rules) {
|
|
@@ -14,7 +16,7 @@ export class MappingService {
|
|
|
14
16
|
spreadsheet.useApiKey(this.configService.config.googleSheetsApiKey);
|
|
15
17
|
await spreadsheet.loadInfo();
|
|
16
18
|
const rows = await spreadsheet.sheetsByTitle[this.configService.config.mappingSpreadsheetTitle].getRows();
|
|
17
|
-
const mappingRules = this.rowsToRules(rows);
|
|
19
|
+
const mappingRules = this.rowsToRules(rows) as MappingRules[];
|
|
18
20
|
|
|
19
21
|
mappingRules.map((rule, _i, selfRules) => {
|
|
20
22
|
this.removeEmptyKeys(rule);
|
|
@@ -28,7 +30,18 @@ export class MappingService {
|
|
|
28
30
|
return this.rules;
|
|
29
31
|
}
|
|
30
32
|
|
|
31
|
-
|
|
33
|
+
async getDealersMapping(): Promise<DealersMapping[]> {
|
|
34
|
+
if (!this.dealers) {
|
|
35
|
+
const spreadsheet = new GoogleSpreadsheet(this.configService.config.dealersSpreadsheetId);
|
|
36
|
+
spreadsheet.useApiKey(this.configService.config.googleSheetsApiKey);
|
|
37
|
+
await spreadsheet.loadInfo();
|
|
38
|
+
const rows = await spreadsheet.sheetsByTitle[this.configService.config.dealersSpreadsheetTitle].getRows();
|
|
39
|
+
this.dealers = this.rowsToRules(rows) as DealersMapping[];
|
|
40
|
+
}
|
|
41
|
+
return this.dealers;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private rowsToRules(rows: GoogleSpreadsheetRow[]): MappingRules[] | DealersMapping[] {
|
|
32
45
|
return rows.map(row =>
|
|
33
46
|
Object.assign(
|
|
34
47
|
{},
|
|
@@ -19,10 +19,14 @@ export class Auto24Transformer {
|
|
|
19
19
|
|
|
20
20
|
transform(car: DataSchemes.Car, imboImages: ImboImageResponseInterface[]): Auto24XmlItem {
|
|
21
21
|
const autodeid = toString(get(car, '_id', ''));
|
|
22
|
+
let userlink = `https://www.${this.configService.config.url}/search/vehicle/${autodeid}`;
|
|
23
|
+
if (this.configService.config.campaign) {
|
|
24
|
+
userlink += `?source=classifieds&medium=listing&campaign=${this.configService.config.campaign}`;
|
|
25
|
+
}
|
|
22
26
|
|
|
23
27
|
return {
|
|
24
28
|
autodeid,
|
|
25
|
-
userlink
|
|
29
|
+
userlink,
|
|
26
30
|
apilink: `https://www.${this.configService.config.url}/service/car-basic-data/api/v1/car/${autodeid}`,
|
|
27
31
|
brand: toString(get(car, 'mainData.make', '')),
|
|
28
32
|
modell: toString(get(car, 'mainData.model', '')),
|
|
@@ -48,6 +48,9 @@ export class GoogleTransformer {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
private async getDescription(car: DataSchemes.Car): Promise<string> {
|
|
51
|
+
if (this.configService.config.isCriteo) {
|
|
52
|
+
return '0€ Anzahlung möglich. 14 Tage Geld-zurück-Garantie. Lieferung bis vor die Haustür. 1 Jahr Garantie inklusive. Deutschlands großes Autoportal.';
|
|
53
|
+
}
|
|
51
54
|
const dealerId = get(car, 'metaData.ownerId');
|
|
52
55
|
const descriptionSchema = await this.userService.getDefaultSummaryByDealerId(dealerId);
|
|
53
56
|
const descriptionBuilder = CarDescriptionFactory.create(DescriptionTypeEnum.Mobile, car);
|
|
@@ -51,6 +51,10 @@ export class MobileTransformer {
|
|
|
51
51
|
set(transformedCarData, 293, toString(get(carData, 'leasing.monthlyInstallment', '')));
|
|
52
52
|
set(transformedCarData, 1, get(carData, 'metaData.vehicleId', null));
|
|
53
53
|
|
|
54
|
+
if (this.configService.config.campaign === 'eauto' && carData.offer.ftpFolder === 'auto_de_eautos') {
|
|
55
|
+
set(transformedCarData, 12, get(carData, 'offer.internalNumber', null));
|
|
56
|
+
}
|
|
57
|
+
|
|
54
58
|
return transformedCarData;
|
|
55
59
|
}
|
|
56
60
|
|
|
@@ -128,7 +132,7 @@ export class MobileTransformer {
|
|
|
128
132
|
return this.getAutodeUrl(car);
|
|
129
133
|
}
|
|
130
134
|
case 'persistentId': {
|
|
131
|
-
return this.getPersistentId();
|
|
135
|
+
return this.getPersistentId(car);
|
|
132
136
|
}
|
|
133
137
|
case 'price.vatDeductible': {
|
|
134
138
|
return this.getVatDeductible(car);
|
|
@@ -174,9 +178,16 @@ export class MobileTransformer {
|
|
|
174
178
|
}
|
|
175
179
|
}
|
|
176
180
|
|
|
177
|
-
private getPersistentId() {
|
|
181
|
+
private async getPersistentId(car: DataSchemes.Car) {
|
|
178
182
|
switch (this.configService.config.campaign) {
|
|
179
183
|
case 'eauto':
|
|
184
|
+
if (car.offer.ftpFolder === 'auto_de_eautos') {
|
|
185
|
+
const dealers = await this.mappingService.getDealersMapping();
|
|
186
|
+
const dealerId = dealers.find(dealer => dealer.firebaseUserId === car.metaData.ownerId)?.dealerId;
|
|
187
|
+
if (dealerId) {
|
|
188
|
+
return dealerId;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
180
191
|
return '416';
|
|
181
192
|
default:
|
|
182
193
|
return '04109003';
|
|
@@ -1,6 +1,17 @@
|
|
|
1
|
+
import { indexOf } from 'lodash';
|
|
1
2
|
import { RuleParser } from '../interfaces/rule-parser.interface';
|
|
2
3
|
|
|
3
4
|
export function parseFields<T>(values: string, fc: RuleParser<T>): T[] {
|
|
4
5
|
const fieldsArr: string[] = values.split(',');
|
|
5
6
|
return fieldsArr.map((e: string): T => fc(e));
|
|
6
7
|
}
|
|
8
|
+
|
|
9
|
+
export function parseDealersList(dealers: string): string[] {
|
|
10
|
+
if (dealers) {
|
|
11
|
+
if (indexOf(dealers, ',') !== -1) {
|
|
12
|
+
return dealers.split(',').map((dealerId: string) => dealerId.trim());
|
|
13
|
+
}
|
|
14
|
+
return [dealers];
|
|
15
|
+
}
|
|
16
|
+
return [];
|
|
17
|
+
}
|