@bytebrand/export-cars 1.7.1 → 1.9.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 +7 -5
- package/dist/app.module.js.map +1 -1
- package/dist/configs/alleskralle.config.js +3 -1
- package/dist/configs/alleskralle.config.js.map +1 -1
- package/dist/configs/as24.config.js.map +1 -1
- package/dist/configs/autoboerse.config.js +1 -1
- package/dist/configs/autouncle.config.js +1 -1
- package/dist/configs/config.d.ts +3 -1
- package/dist/configs/config.js +6 -4
- package/dist/configs/config.js.map +1 -1
- package/dist/configs/criteo.config.js +2 -1
- package/dist/configs/criteo.config.js.map +1 -1
- package/dist/configs/dasparking.config.js +1 -1
- package/dist/configs/facebook-shop.config.d.ts +5 -0
- package/dist/configs/facebook-shop.config.js +17 -0
- package/dist/configs/facebook-shop.config.js.map +1 -0
- 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/kleinanzeigefocus.config.js +2 -2
- package/dist/configs/kleinanzeigefocus.config.js.map +1 -1
- package/dist/configs/meinstadt.config.js +0 -1
- package/dist/configs/meinstadt.config.js.map +1 -1
- package/dist/configs/ooyyo.config.js +1 -0
- package/dist/configs/ooyyo.config.js.map +1 -1
- package/dist/constants/modix/index.d.ts +1 -0
- package/dist/constants/modix/index.js +1 -0
- package/dist/constants/modix/index.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/enums/file-types.enum.js +0 -1
- package/dist/enums/file-types.enum.js.map +1 -1
- package/dist/enums/image-type.enum.d.ts +4 -0
- package/dist/enums/image-type.enum.js +9 -0
- package/dist/enums/image-type.enum.js.map +1 -0
- package/dist/enums/index.d.ts +2 -0
- package/dist/enums/index.js +2 -0
- package/dist/enums/index.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/auto24.exporter.js +1 -1
- package/dist/exporters/auto24.exporter.js.map +1 -1
- package/dist/exporters/facebook-shop.exporter.d.ts +12 -0
- package/dist/exporters/facebook-shop.exporter.js +63 -0
- package/dist/exporters/facebook-shop.exporter.js.map +1 -0
- package/dist/exporters/fb.exporter.js +1 -3
- package/dist/exporters/fb.exporter.js.map +1 -1
- package/dist/exporters/index.d.ts +1 -0
- package/dist/exporters/index.js +1 -0
- package/dist/exporters/index.js.map +1 -1
- package/dist/exporters/modix.exporter.js.map +1 -1
- package/dist/exporters/ooyyo.exporter.js +1 -1
- package/dist/exporters/ooyyo.exporter.js.map +1 -1
- package/dist/formats/facebook-shop.builder.d.ts +10 -0
- package/dist/formats/facebook-shop.builder.js +62 -0
- package/dist/formats/facebook-shop.builder.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/interfaces/export-item.interface.d.ts +26 -0
- package/dist/interfaces/params.interface.d.ts +1 -7
- package/dist/services/{marketing-images.service.d.ts → images.service.d.ts} +9 -5
- package/dist/services/images.service.js +151 -0
- package/dist/services/images.service.js.map +1 -0
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/transformers/auto24.transfomer.d.ts +4 -6
- package/dist/transformers/auto24.transfomer.js +10 -27
- package/dist/transformers/auto24.transfomer.js.map +1 -1
- package/dist/transformers/autouncle.transformer.d.ts +5 -5
- package/dist/transformers/autouncle.transformer.js +10 -34
- package/dist/transformers/autouncle.transformer.js.map +1 -1
- package/dist/transformers/facebook-shop.transformer.d.ts +18 -0
- package/dist/transformers/facebook-shop.transformer.js +96 -0
- package/dist/transformers/facebook-shop.transformer.js.map +1 -0
- package/dist/transformers/fb.transformer.d.ts +2 -3
- package/dist/transformers/fb.transformer.js +8 -26
- package/dist/transformers/fb.transformer.js.map +1 -1
- package/dist/transformers/google.transformer.d.ts +5 -5
- package/dist/transformers/google.transformer.js +10 -26
- 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 -4
- package/dist/transformers/meinstadt.transformer.js.map +1 -1
- package/dist/transformers/modix.transformer.d.ts +1 -1
- package/dist/transformers/modix.transformer.js +3 -4
- package/dist/transformers/modix.transformer.js.map +1 -1
- package/dist/transformers/ooyyo.transformer.d.ts +4 -5
- package/dist/transformers/ooyyo.transformer.js +7 -17
- package/dist/transformers/ooyyo.transformer.js.map +1 -1
- package/dist/transformers/rubrikk.transformer.d.ts +4 -4
- package/dist/transformers/rubrikk.transformer.js +5 -13
- package/dist/transformers/rubrikk.transformer.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/app.module.ts +6 -12
- package/src/configs/alleskralle.config.ts +3 -1
- package/src/configs/as24.config.ts +1 -1
- package/src/configs/auto24.config.ts +1 -1
- package/src/configs/autoboerse.config.ts +2 -2
- package/src/configs/autouncle.config.ts +1 -1
- package/src/configs/config.ts +3 -2
- package/src/configs/criteo.config.ts +3 -2
- package/src/configs/dasparking.config.ts +1 -1
- package/src/configs/{kleinanzeigefocus.config.ts → facebook-shop.config.ts} +3 -3
- package/src/configs/index.ts +1 -0
- package/src/configs/kleinanzeigeFocus.config.ts +14 -0
- package/src/configs/meinstadt.config.ts +1 -1
- package/src/configs/ooyyo.config.ts +2 -1
- package/src/constants/modix/index.ts +1 -0
- package/src/enums/export-type.enum.ts +7 -6
- package/src/enums/file-types.enum.ts +1 -1
- package/src/enums/image-type.enum.ts +4 -0
- package/src/enums/index.ts +2 -0
- package/src/export.schema.ts +8 -3
- package/src/exporters/auto24.exporter.ts +2 -4
- package/src/exporters/facebook-shop.exporter.ts +51 -0
- package/src/exporters/fb.exporter.ts +6 -6
- package/src/exporters/index.ts +1 -0
- package/src/exporters/modix.exporter.ts +6 -5
- package/src/exporters/ooyyo.exporter.ts +3 -4
- package/src/formats/facebook-shop.builder.ts +69 -0
- package/src/formats/index.ts +1 -0
- package/src/interfaces/export-item.interface.ts +26 -0
- package/src/interfaces/params.interface.ts +1 -7
- package/src/services/images.service.ts +161 -0
- package/src/services/index.ts +1 -2
- package/src/transformers/auto24.transfomer.ts +8 -31
- package/src/transformers/autouncle.transformer.ts +9 -35
- package/src/transformers/facebook-shop.transformer.ts +94 -0
- package/src/transformers/fb.transformer.ts +16 -44
- package/src/transformers/google.transformer.ts +10 -28
- package/src/transformers/index.ts +1 -0
- package/src/transformers/meinstadt.transformer.ts +2 -3
- package/src/transformers/modix.transformer.ts +19 -10
- package/src/transformers/ooyyo.transformer.ts +4 -18
- package/src/transformers/rubrikk.transformer.ts +5 -16
- package/dist/services/marketing-images.service.js +0 -58
- package/dist/services/marketing-images.service.js.map +0 -1
- package/src/services/marketing-images.service.ts +0 -70
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bytebrand/export-cars",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "bytebrand",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -66,5 +66,5 @@
|
|
|
66
66
|
"engines": {
|
|
67
67
|
"node": ">=14.0.0"
|
|
68
68
|
},
|
|
69
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "16478e91b8dadf07e870437edeef4a0e82ca6627"
|
|
70
70
|
}
|
package/src/app.module.ts
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
|
-
import { CacheModule, Module } from '@nestjs/common';
|
|
2
1
|
import Bottleneck from 'bottleneck';
|
|
3
2
|
|
|
3
|
+
import { CacheModule, Module } from '@nestjs/common';
|
|
4
|
+
|
|
5
|
+
import { ConfigService, RulesService, LoaderService, UserService, CarService, ImagesService } from './services';
|
|
6
|
+
import { RequestService } from './services/request.service';
|
|
7
|
+
import { MappingService } from './services/mapping.service';
|
|
4
8
|
import { InputQuestions } from './input.questions';
|
|
5
9
|
import { ExportRunner } from './export.command';
|
|
6
|
-
import {
|
|
7
|
-
ConfigService,
|
|
8
|
-
RequestService,
|
|
9
|
-
MappingService,
|
|
10
|
-
CarService,
|
|
11
|
-
UserService,
|
|
12
|
-
LoaderService,
|
|
13
|
-
RulesService,
|
|
14
|
-
MarketingImagesService
|
|
15
|
-
} from './services';
|
|
16
10
|
|
|
17
11
|
@Module({
|
|
18
12
|
imports: [
|
|
@@ -28,7 +22,7 @@ import {
|
|
|
28
22
|
UserService,
|
|
29
23
|
LoaderService,
|
|
30
24
|
RulesService,
|
|
31
|
-
|
|
25
|
+
ImagesService,
|
|
32
26
|
{
|
|
33
27
|
provide: Bottleneck,
|
|
34
28
|
useValue: new Bottleneck({ maxConcurrent: 10 }),
|
|
@@ -7,6 +7,8 @@ export class AlleskralleConfig extends Config {
|
|
|
7
7
|
super(params);
|
|
8
8
|
this.campaign = ExportType.ALLESKRALLE;
|
|
9
9
|
this.pathesConfig.localConvertedDirectory = `resources/${ExportType.ALLESKRALLE}-export`;
|
|
10
|
-
this.outputFiles = [
|
|
10
|
+
this.outputFiles = [
|
|
11
|
+
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.ALLESKRALLE}.${FileType.XML}`,
|
|
12
|
+
];
|
|
11
13
|
}
|
|
12
14
|
}
|
|
@@ -8,7 +8,7 @@ export class Auto24Config extends Config {
|
|
|
8
8
|
this.campaign = ExportType.AUTO24;
|
|
9
9
|
this.pathesConfig.localConvertedDirectory = `resources/${ExportType.AUTO24}-export`;
|
|
10
10
|
this.outputFiles = [
|
|
11
|
-
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.AUTO24}.${FileType.XML}`,
|
|
11
|
+
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.AUTO24}.${FileType.XML}`,
|
|
12
12
|
];
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -7,9 +7,9 @@ export class AutoboerseConfig extends Config {
|
|
|
7
7
|
super(params);
|
|
8
8
|
this.campaign = ExportType.AUTOBOERSE;
|
|
9
9
|
this.pathesConfig.localConvertedDirectory = `resources/${ExportType.AUTOBOERSE}-export`;
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
this.outputFiles = [
|
|
12
|
-
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.AUTOBOERSE}.${FileType.XML}
|
|
12
|
+
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.AUTOBOERSE}.${FileType.XML}`,
|
|
13
13
|
];
|
|
14
14
|
this.imageUrl = this.environmentConfig[params.environment].imageUrl;
|
|
15
15
|
}
|
|
@@ -7,7 +7,7 @@ export class AutouncleConfig extends Config {
|
|
|
7
7
|
super(params);
|
|
8
8
|
this.pathesConfig.localConvertedDirectory = `resources/${ExportType.AUTOUNCLE}-export`;
|
|
9
9
|
this.outputFiles = [
|
|
10
|
-
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.AUTOUNCLE}.${FileType.JSON}
|
|
10
|
+
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.AUTOUNCLE}.${FileType.JSON}`,
|
|
11
11
|
];
|
|
12
12
|
}
|
|
13
13
|
}
|
package/src/configs/config.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Environment } from '../enums
|
|
2
|
-
import { ExportType } from '../enums';
|
|
1
|
+
import { Environment, ExportType, ImageType } from '../enums';
|
|
3
2
|
import { Params } from '../interfaces/params.interface';
|
|
4
3
|
|
|
5
4
|
export class Config {
|
|
@@ -10,6 +9,8 @@ export class Config {
|
|
|
10
9
|
imboUrl: string;
|
|
11
10
|
imageUrl: string;
|
|
12
11
|
baseImageUrl: string;
|
|
12
|
+
imageType: ImageType;
|
|
13
|
+
isNewCar: boolean;
|
|
13
14
|
isCriteo: boolean;
|
|
14
15
|
criteoMarketingImagesConfigId: number;
|
|
15
16
|
exportType: ExportType;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ExportType, FileType } from 'src/enums';
|
|
1
|
+
import { ExportType, FileType, ImageType } from 'src/enums';
|
|
2
2
|
import { Params } from '../interfaces/params.interface';
|
|
3
3
|
import { Config } from './config';
|
|
4
4
|
|
|
@@ -7,8 +7,9 @@ export class CriteoConfig extends Config {
|
|
|
7
7
|
super(params);
|
|
8
8
|
this.campaign = ExportType.CRITEO;
|
|
9
9
|
this.pathesConfig.localConvertedDirectory = `resources/${ExportType.CRITEO}-export`;
|
|
10
|
+
this.imageType = ImageType.marketing;
|
|
10
11
|
this.outputFiles = [
|
|
11
|
-
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.CRITEO}.${FileType.XML}
|
|
12
|
+
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.CRITEO}.${FileType.XML}`,
|
|
12
13
|
];
|
|
13
14
|
this.isCriteo = true;
|
|
14
15
|
}
|
|
@@ -8,7 +8,7 @@ export class DasparkingConfig extends Config {
|
|
|
8
8
|
this.pathesConfig.localConvertedDirectory = `resources/${ExportType.DASPARKING}-export`;
|
|
9
9
|
this.campaign = ExportType.DASPARKING;
|
|
10
10
|
this.outputFiles = [
|
|
11
|
-
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.DASPARKING}.${FileType.XML}
|
|
11
|
+
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.DASPARKING}.${FileType.XML}`,
|
|
12
12
|
];
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -2,13 +2,13 @@ import { Params } from '../interfaces/params.interface';
|
|
|
2
2
|
import { Config } from './config';
|
|
3
3
|
import { ExportType, FileType } from '../enums';
|
|
4
4
|
|
|
5
|
-
export class
|
|
5
|
+
export class FacebookShopConfig extends Config {
|
|
6
6
|
constructor(params: Params) {
|
|
7
7
|
super(params);
|
|
8
|
-
this.pathesConfig.localConvertedDirectory = `resources/${ExportType.
|
|
8
|
+
this.pathesConfig.localConvertedDirectory = `resources/${ExportType.FACEBOOK_SHOP}-export`;
|
|
9
9
|
this.imageUrl = this.environmentConfig[params.environment].baseImageUrl;
|
|
10
10
|
this.outputFiles = [
|
|
11
|
-
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.
|
|
11
|
+
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.FACEBOOK_SHOP}.${FileType.XML}`,
|
|
12
12
|
];
|
|
13
13
|
}
|
|
14
14
|
}
|
package/src/configs/index.ts
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Params } from '../interfaces/params.interface';
|
|
2
|
+
import { Config } from './config';
|
|
3
|
+
import { ExportType, FileType, ImageType } from '../enums';
|
|
4
|
+
|
|
5
|
+
export class KleinanzeigeFocusConfig extends Config {
|
|
6
|
+
constructor(params: Params) {
|
|
7
|
+
super(params);
|
|
8
|
+
this.pathesConfig.localConvertedDirectory = `resources/${ExportType.KLEINANZEIGE_FOCUS}-export`;
|
|
9
|
+
this.imageType = ImageType.default;
|
|
10
|
+
this.outputFiles = [
|
|
11
|
+
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.KLEINANZEIGE_FOCUS}.${FileType.XML}`,
|
|
12
|
+
];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -5,7 +5,7 @@ import { ExportType, FileType } from '../enums';
|
|
|
5
5
|
export class MeinstadtConfig extends Config {
|
|
6
6
|
constructor(params: Params) {
|
|
7
7
|
super(params);
|
|
8
|
-
this.pathesConfig.localConvertedDirectory = `resources/${ExportType.MEINSTADT}-export
|
|
8
|
+
this.pathesConfig.localConvertedDirectory = `resources/${ExportType.MEINSTADT}-export`;
|
|
9
9
|
this.outputFiles = [
|
|
10
10
|
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.MEINSTADT}.${FileType.JSON}`,
|
|
11
11
|
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.MEINSTADT}.${FileType.ZIP}`,
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Params } from '../interfaces/params.interface';
|
|
2
2
|
import { Config } from './config';
|
|
3
|
-
import { ExportType, FileType } from '../enums';
|
|
3
|
+
import { ExportType, FileType, ImageType } from '../enums';
|
|
4
4
|
|
|
5
5
|
export class OoyyoConfig extends Config {
|
|
6
6
|
constructor(params: Params) {
|
|
7
7
|
super(params);
|
|
8
8
|
this.pathesConfig.localConvertedDirectory = `resources/${ExportType.OOYYO}-export`;
|
|
9
|
+
this.imageType = ImageType.default;
|
|
9
10
|
this.outputFiles = [
|
|
10
11
|
`${this.pathesConfig.localConvertedDirectory}/api_export_cars_${ExportType.OOYYO}.${FileType.XML}`,
|
|
11
12
|
`${this.pathesConfig.localConvertedDirectory}/autode-${ExportType.OOYYO}.${FileType.TAR_GZ}`,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export enum ExportType {
|
|
2
2
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
* @deprecated
|
|
4
|
+
*/
|
|
5
5
|
YESCAR = 'yescar',
|
|
6
6
|
MARKTDE = 'marktde',
|
|
7
7
|
EAUTO = 'eauto',
|
|
@@ -12,16 +12,17 @@ export enum ExportType {
|
|
|
12
12
|
OOYYO = 'ooyyo',
|
|
13
13
|
MEINSTADT = 'meinstadt',
|
|
14
14
|
/**
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
* @deprecated
|
|
16
|
+
*/
|
|
17
17
|
BY_OWNER = 'by-owner',
|
|
18
18
|
AUTOUNCLE = 'autouncle',
|
|
19
19
|
/**
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
* @deprecated
|
|
21
|
+
*/
|
|
22
22
|
AS24 = 'as24',
|
|
23
23
|
ALLESKRALLE = 'alleskralle',
|
|
24
24
|
DASPARKING = 'dasparking',
|
|
25
25
|
KLEINANZEIGE_FOCUS = 'kleinanzeigefocus',
|
|
26
26
|
CRITEO = 'criteo',
|
|
27
|
+
FACEBOOK_SHOP = 'facebookshop',
|
|
27
28
|
}
|
package/src/enums/index.ts
CHANGED
package/src/export.schema.ts
CHANGED
|
@@ -16,7 +16,8 @@ import {
|
|
|
16
16
|
KleinanzeigeFocusConfig,
|
|
17
17
|
AutoboerseConfig,
|
|
18
18
|
ByOwnerConfig,
|
|
19
|
-
|
|
19
|
+
FacebookShopConfig,
|
|
20
|
+
CriteoConfig,
|
|
20
21
|
} from './configs';
|
|
21
22
|
import {
|
|
22
23
|
As24Exporter,
|
|
@@ -29,10 +30,10 @@ import {
|
|
|
29
30
|
MobileExporter,
|
|
30
31
|
OoyyoExporter,
|
|
31
32
|
ModixExporter,
|
|
32
|
-
RubrikkExporter
|
|
33
|
+
RubrikkExporter,
|
|
34
|
+
FacebookShopExporter,
|
|
33
35
|
} from './exporters';
|
|
34
36
|
|
|
35
|
-
|
|
36
37
|
export const exportSchema = {
|
|
37
38
|
[ExportType.EAUTO]: {
|
|
38
39
|
config: EautoConfig,
|
|
@@ -98,4 +99,8 @@ export const exportSchema = {
|
|
|
98
99
|
config: CriteoConfig,
|
|
99
100
|
exporter: GoogleExporter,
|
|
100
101
|
},
|
|
102
|
+
[ExportType.FACEBOOK_SHOP]: {
|
|
103
|
+
config: FacebookShopConfig,
|
|
104
|
+
exporter: FacebookShopExporter,
|
|
105
|
+
},
|
|
101
106
|
};
|
|
@@ -3,7 +3,6 @@ import { ModuleRef } from '@nestjs/core';
|
|
|
3
3
|
|
|
4
4
|
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
5
5
|
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
6
|
-
import { Zipper } from '@bytebrand/zipper';
|
|
7
6
|
|
|
8
7
|
import { CarService, RulesService, ConfigService, LoaderService } from '../services';
|
|
9
8
|
import { Auto24Transformer } from '../transformers/auto24.transfomer';
|
|
@@ -18,7 +17,7 @@ export class Auto24Exporter implements Exporter {
|
|
|
18
17
|
private loaderService: LoaderService,
|
|
19
18
|
private moduleRef: ModuleRef,
|
|
20
19
|
private rulesService: RulesService,
|
|
21
|
-
) {
|
|
20
|
+
) {}
|
|
22
21
|
|
|
23
22
|
async export(): Promise<void> {
|
|
24
23
|
const [fileXml] = this.configService.config.outputFiles;
|
|
@@ -37,10 +36,9 @@ export class Auto24Exporter implements Exporter {
|
|
|
37
36
|
for (let i = 0; i < chunk.data.length; i += 1) {
|
|
38
37
|
const data = chunk.data[i];
|
|
39
38
|
const { car, images } = data;
|
|
40
|
-
await xmlBuilder.addItem(auto24Transformer.transform(car, images), 'Deutschland');
|
|
39
|
+
await xmlBuilder.addItem(await auto24Transformer.transform(car, images), 'Deutschland');
|
|
41
40
|
this.carService.counter.countCar(images);
|
|
42
41
|
}
|
|
43
|
-
|
|
44
42
|
}
|
|
45
43
|
});
|
|
46
44
|
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { ModuleRef } from '@nestjs/core';
|
|
3
|
+
|
|
4
|
+
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
5
|
+
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
6
|
+
|
|
7
|
+
import { CarService, ConfigService, LoaderService, RulesService } from '../services';
|
|
8
|
+
import { Exporter } from '../interfaces/exporter.interface';
|
|
9
|
+
import { FacebookShopTransformer } from '../transformers';
|
|
10
|
+
import { FacebookShopXmlBuilder } from '../formats';
|
|
11
|
+
|
|
12
|
+
@Injectable()
|
|
13
|
+
export class FacebookShopExporter implements Exporter {
|
|
14
|
+
constructor(
|
|
15
|
+
private carService: CarService,
|
|
16
|
+
private configService: ConfigService,
|
|
17
|
+
private loaderService: LoaderService,
|
|
18
|
+
private moduleRef: ModuleRef,
|
|
19
|
+
private rulesService: RulesService,
|
|
20
|
+
) {}
|
|
21
|
+
|
|
22
|
+
async export(): Promise<void> {
|
|
23
|
+
const [fileXml] = this.configService.config.outputFiles;
|
|
24
|
+
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
25
|
+
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
26
|
+
|
|
27
|
+
const facebookShopXmkBuilder = new FacebookShopXmlBuilder(fileXml);
|
|
28
|
+
await facebookShopXmkBuilder.buildStart();
|
|
29
|
+
|
|
30
|
+
const facebookShopTransformer = await this.moduleRef.create(FacebookShopTransformer);
|
|
31
|
+
|
|
32
|
+
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
33
|
+
const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
34
|
+
|
|
35
|
+
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 facebookShopTransformer.transform(data);
|
|
40
|
+
|
|
41
|
+
await facebookShopXmkBuilder.addItem(transformedCar);
|
|
42
|
+
this.carService.counter.countCar(data.images);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
await facebookShopXmkBuilder.buildEnd();
|
|
48
|
+
|
|
49
|
+
console.log(this.carService.counter.getCountedCars());
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { CarService, RulesService, LoaderService, ConfigService
|
|
2
|
+
import { CarService, RulesService, LoaderService, ConfigService } from '../services';
|
|
3
3
|
import { FsChunkInterface } from '@bytebrand/chunkable';
|
|
4
4
|
import { Exporter } from '../interfaces/exporter.interface';
|
|
5
5
|
import { CronicleUtils } from '@bytebrand/cronicle-helper';
|
|
@@ -17,7 +17,7 @@ export class FbExporter implements Exporter {
|
|
|
17
17
|
private rulesService: RulesService,
|
|
18
18
|
private loaderService: LoaderService,
|
|
19
19
|
private moduleRef: ModuleRef,
|
|
20
|
-
) {
|
|
20
|
+
) {}
|
|
21
21
|
|
|
22
22
|
async export(): Promise<void> {
|
|
23
23
|
const [fileName] = this.configService.config.outputFiles;
|
|
@@ -30,13 +30,13 @@ export class FbExporter implements Exporter {
|
|
|
30
30
|
const fbTransformer = await this.moduleRef.create(FbTransformer);
|
|
31
31
|
|
|
32
32
|
await this.loaderService.process(async (chunk: FsChunkInterface) => {
|
|
33
|
-
const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
34
|
-
chunk.data = null;
|
|
35
|
-
for (const data of
|
|
33
|
+
// const chunkData = chunk.data.filter(car => this.carService.filterCar(car, this.rulesService.rules));
|
|
34
|
+
// chunk.data = null;
|
|
35
|
+
for (const data of chunk.data) {
|
|
36
36
|
const ownerId = get(data.car, 'metaData.ownerId', null);
|
|
37
37
|
const owner = await this.carService.getOwner(ownerId);
|
|
38
38
|
const car = await fbTransformer.transform({ owner, ...data });
|
|
39
|
-
|
|
39
|
+
|
|
40
40
|
await fbXmlBuilder.addItem(car as FbXmlItem);
|
|
41
41
|
this.carService.counter.countCar(data.images);
|
|
42
42
|
}
|
package/src/exporters/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
2
|
import { ModuleRef } from '@nestjs/core';
|
|
3
3
|
|
|
4
4
|
import { CronicleUtils, ImportOrigins } from '@bytebrand/cronicle-helper';
|
|
@@ -10,7 +10,6 @@ import { Exporter } from '../interfaces/exporter.interface';
|
|
|
10
10
|
import { ModixTransformer } from '../transformers';
|
|
11
11
|
import { ModixXmlBuilder } from '../formats';
|
|
12
12
|
|
|
13
|
-
|
|
14
13
|
@Injectable()
|
|
15
14
|
export class ModixExporter implements Exporter {
|
|
16
15
|
constructor(
|
|
@@ -38,16 +37,18 @@ export class ModixExporter implements Exporter {
|
|
|
38
37
|
for (let i = 0; i < chunk.data.length; i += 1) {
|
|
39
38
|
const data = chunk.data[i];
|
|
40
39
|
|
|
41
|
-
const transformedCar = await modixTransformer.transform(
|
|
40
|
+
const transformedCar = await modixTransformer.transform(
|
|
41
|
+
data,
|
|
42
|
+
mappingBuilder.getMappingRules({ reversTransforming: true }),
|
|
43
|
+
);
|
|
42
44
|
await modixXmlBuilder.addItem(transformedCar);
|
|
43
45
|
|
|
44
46
|
this.carService.counter.countCar(data.images);
|
|
45
47
|
}
|
|
46
|
-
|
|
47
48
|
}
|
|
48
49
|
});
|
|
49
50
|
|
|
50
51
|
await modixXmlBuilder.buildEnd();
|
|
51
|
-
console.log(this.carService.counter.getCountedCars())
|
|
52
|
+
console.log(this.carService.counter.getCountedCars());
|
|
52
53
|
}
|
|
53
54
|
}
|
|
@@ -16,13 +16,13 @@ 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
22
|
const [fileXml, fileGZ] = this.configService.config.outputFiles;
|
|
23
23
|
await CronicleUtils.ensureDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
24
24
|
await CronicleUtils.emptyDir(this.configService.config.pathesConfig.localConvertedDirectory);
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
const ooyyoXmlBuilder = new OoyyoXmlBuilder(fileXml);
|
|
27
27
|
await ooyyoXmlBuilder.buildStart();
|
|
28
28
|
|
|
@@ -35,11 +35,10 @@ export class OoyyoExporter implements Exporter {
|
|
|
35
35
|
for (let i = 0; i < chunk.data.length; i += 1) {
|
|
36
36
|
const data = chunk.data[i];
|
|
37
37
|
const { car, images } = data;
|
|
38
|
-
await ooyyoXmlBuilder.addItem(ooyyoTransformer.transform(car, images));
|
|
38
|
+
await ooyyoXmlBuilder.addItem(await ooyyoTransformer.transform(car, images));
|
|
39
39
|
|
|
40
40
|
this.carService.counter.countCar(images);
|
|
41
41
|
}
|
|
42
|
-
|
|
43
42
|
}
|
|
44
43
|
});
|
|
45
44
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { XMLBuilderBase } from '@bytebrand/cronicle-helper';
|
|
2
|
+
import { FacebookShopItem, FacebookShopTag } from '../interfaces';
|
|
3
|
+
import { Description, DescriptionValue } from '../interfaces/description.interface';
|
|
4
|
+
import { isNotEmptyArray } from '../utils/validator.utils';
|
|
5
|
+
|
|
6
|
+
export class FacebookShopXmlBuilder extends XMLBuilderBase {
|
|
7
|
+
async buildStart(): Promise<void> {
|
|
8
|
+
await this.write(
|
|
9
|
+
'<?xml version="1.0" encoding="utf-8"?>\n<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0" xmlns:atom="http://www.w3.org/2005/Atom">' +
|
|
10
|
+
'\n<channel>\n<title>Produkt für auto.de</title>\n<description>Produkt für auto.de</description> \n<link>https://www.auto.de/</link>\n' +
|
|
11
|
+
'<atom:link href="https://www.mydealsshop.foo/pages/test-feed" rel="self" type="application/rss+xml" />\n',
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async addItem(car: FacebookShopItem): Promise<void> {
|
|
16
|
+
let item = '\n<item>\n';
|
|
17
|
+
|
|
18
|
+
const tags = Object.keys(car);
|
|
19
|
+
|
|
20
|
+
for (const tag of tags) {
|
|
21
|
+
if (tag === 'description') {
|
|
22
|
+
item += this.getDescriptionElement(tag, car[tag].value);
|
|
23
|
+
} else {
|
|
24
|
+
item += this.buildTagElement(tag, car[tag]);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
item += '</item>';
|
|
28
|
+
|
|
29
|
+
await this.write(item);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
buildTagElement(tag: string, params: FacebookShopTag) {
|
|
33
|
+
if (params.isGoogle) {
|
|
34
|
+
return this.getElement(`g:${tag}`, params.value);
|
|
35
|
+
}
|
|
36
|
+
return this.getElement(tag, params.value);
|
|
37
|
+
}
|
|
38
|
+
private getDescriptionElement(rootTag: string, descriptionBlocks: Description[]): string {
|
|
39
|
+
const description: string = descriptionBlocks
|
|
40
|
+
.map(({ title, values }: Description) => {
|
|
41
|
+
if (values) {
|
|
42
|
+
return `${title}\n${this.buildDescriptionValues(values)} `;
|
|
43
|
+
}
|
|
44
|
+
return '';
|
|
45
|
+
})
|
|
46
|
+
.join('\n');
|
|
47
|
+
return `<${rootTag}>${description}</${rootTag}>`;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
private buildDescriptionValues(values: DescriptionValue[]): string {
|
|
51
|
+
const validValues = [];
|
|
52
|
+
|
|
53
|
+
values.forEach(element => {
|
|
54
|
+
const filteredValues = element.value.filter(el => el);
|
|
55
|
+
if (isNotEmptyArray(filteredValues)) validValues.push(element);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
return validValues
|
|
59
|
+
.map(({ title, value }: DescriptionValue) => {
|
|
60
|
+
return `${title}: ${value.join(', ')}`;
|
|
61
|
+
})
|
|
62
|
+
.join(';\n');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async buildEnd(): Promise<void> {
|
|
66
|
+
await this.write('\n</channel>\n</rss>\n');
|
|
67
|
+
await this.end();
|
|
68
|
+
}
|
|
69
|
+
}
|
package/src/formats/index.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DataSchemes } from '@bytebrand/car-schema';
|
|
2
2
|
|
|
3
3
|
import { IModixWrapItem } from './autoborse.intreface';
|
|
4
|
+
import { Description } from './description.interface';
|
|
4
5
|
|
|
5
6
|
export interface FbXmlItem {
|
|
6
7
|
url: string;
|
|
@@ -279,3 +280,28 @@ export interface dealerItem {
|
|
|
279
280
|
vatid: IModixWrapItem;
|
|
280
281
|
};
|
|
281
282
|
}
|
|
283
|
+
|
|
284
|
+
export interface FacebookShopItem {
|
|
285
|
+
id: FacebookShopTag;
|
|
286
|
+
title: FacebookShopTag;
|
|
287
|
+
description: { value: Description[]; isGoogle: boolean };
|
|
288
|
+
availability: FacebookShopTag;
|
|
289
|
+
condition: FacebookShopTag;
|
|
290
|
+
price: FacebookShopTag;
|
|
291
|
+
link: FacebookShopTag;
|
|
292
|
+
image_link: FacebookShopTag;
|
|
293
|
+
additional_image_link: FacebookShopTag;
|
|
294
|
+
brand: FacebookShopTag;
|
|
295
|
+
|
|
296
|
+
quantity_to_sell_on_facebook: FacebookShopTag;
|
|
297
|
+
google_product_category: FacebookShopTag;
|
|
298
|
+
sale_price: FacebookShopTag;
|
|
299
|
+
status: FacebookShopTag;
|
|
300
|
+
color: FacebookShopTag;
|
|
301
|
+
product_type: FacebookShopTag;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
export interface FacebookShopTag {
|
|
305
|
+
isGoogle: boolean;
|
|
306
|
+
value: any;
|
|
307
|
+
}
|
|
@@ -1,19 +1,13 @@
|
|
|
1
|
-
import { Environment } from '../enums
|
|
2
|
-
import { ExportType } from '../enums/export-type.enum';
|
|
1
|
+
import { Environment, ExportType } from '../enums';
|
|
3
2
|
|
|
4
3
|
export interface Params {
|
|
5
4
|
environment: Environment;
|
|
6
|
-
carDetailsUrl?: string;
|
|
7
5
|
exportType?: ExportType;
|
|
8
6
|
apikey?: string;
|
|
9
7
|
String?: string;
|
|
10
8
|
Number?: string;
|
|
11
9
|
Date?: string;
|
|
12
10
|
isNewCar?: boolean;
|
|
13
|
-
isCriteo?: boolean;
|
|
14
|
-
dealers?: string;
|
|
15
11
|
cpc?: string;
|
|
16
12
|
ownerId?: string;
|
|
17
|
-
fileName?: string;
|
|
18
|
-
googleSheetsApiKey?: string;
|
|
19
13
|
}
|