@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.
Files changed (123) hide show
  1. package/dist/app.module.js +4 -7
  2. package/dist/app.module.js.map +1 -1
  3. package/dist/configs/index.d.ts +1 -0
  4. package/dist/configs/index.js +1 -0
  5. package/dist/configs/index.js.map +1 -1
  6. package/dist/configs/trovit.config.d.ts +5 -0
  7. package/dist/configs/trovit.config.js +17 -0
  8. package/dist/configs/trovit.config.js.map +1 -0
  9. package/dist/constants/modix/category.constant.js.map +1 -1
  10. package/dist/enums/export-type.enum.d.ts +2 -1
  11. package/dist/enums/export-type.enum.js +1 -0
  12. package/dist/enums/export-type.enum.js.map +1 -1
  13. package/dist/export.schema.d.ts +6 -2
  14. package/dist/export.schema.js +4 -0
  15. package/dist/export.schema.js.map +1 -1
  16. package/dist/exporters/index.d.ts +1 -0
  17. package/dist/exporters/index.js +1 -0
  18. package/dist/exporters/index.js.map +1 -1
  19. package/dist/exporters/trovit.exporter.d.ts +12 -0
  20. package/dist/exporters/trovit.exporter.js +62 -0
  21. package/dist/exporters/trovit.exporter.js.map +1 -0
  22. package/dist/formats/index.d.ts +1 -0
  23. package/dist/formats/index.js +1 -0
  24. package/dist/formats/index.js.map +1 -1
  25. package/dist/formats/trovit-xml.builder.d.ts +8 -0
  26. package/dist/formats/trovit-xml.builder.js +39 -0
  27. package/dist/formats/trovit-xml.builder.js.map +1 -0
  28. package/dist/interfaces/{autoborse.intreface.d.ts → atributes-wrap-item.intreface.d.ts} +1 -1
  29. package/dist/interfaces/{modix/modix-wrap-item.intreface.js → atributes-wrap-item.intreface.js} +1 -1
  30. package/dist/interfaces/atributes-wrap-item.intreface.js.map +1 -0
  31. package/dist/interfaces/export-item.interface.d.ts +64 -37
  32. package/dist/interfaces/index.d.ts +1 -0
  33. package/dist/interfaces/index.js +1 -0
  34. package/dist/interfaces/index.js.map +1 -1
  35. package/dist/interfaces/modix/index.d.ts +0 -1
  36. package/dist/interfaces/modix/index.js +0 -1
  37. package/dist/interfaces/modix/index.js.map +1 -1
  38. package/dist/interfaces/modix/modix-item-list.interface.d.ts +2 -2
  39. package/dist/services/images.service.d.ts +3 -3
  40. package/dist/services/images.service.js +10 -10
  41. package/dist/services/images.service.js.map +1 -1
  42. package/dist/services/index.d.ts +6 -5
  43. package/dist/services/index.js +6 -5
  44. package/dist/services/index.js.map +1 -1
  45. package/dist/services/transformer.service.d.ts +29 -0
  46. package/dist/services/transformer.service.js +122 -0
  47. package/dist/services/transformer.service.js.map +1 -0
  48. package/dist/transformers/auto24.transfomer.js +3 -3
  49. package/dist/transformers/auto24.transfomer.js.map +1 -1
  50. package/dist/transformers/autouncle.transformer.js +1 -1
  51. package/dist/transformers/autouncle.transformer.js.map +1 -1
  52. package/dist/transformers/facebook-shop.transformer.js +1 -1
  53. package/dist/transformers/facebook-shop.transformer.js.map +1 -1
  54. package/dist/transformers/fb-description.transformer.js +4 -4
  55. package/dist/transformers/fb-description.transformer.js.map +1 -1
  56. package/dist/transformers/fb.transformer.js +5 -6
  57. package/dist/transformers/fb.transformer.js.map +1 -1
  58. package/dist/transformers/google.transformer.js +1 -1
  59. package/dist/transformers/google.transformer.js.map +1 -1
  60. package/dist/transformers/index.d.ts +1 -0
  61. package/dist/transformers/index.js +1 -0
  62. package/dist/transformers/index.js.map +1 -1
  63. package/dist/transformers/meinstadt.transformer.d.ts +1 -1
  64. package/dist/transformers/meinstadt.transformer.js +3 -3
  65. package/dist/transformers/meinstadt.transformer.js.map +1 -1
  66. package/dist/transformers/mobile.transformer.js +3 -3
  67. package/dist/transformers/mobile.transformer.js.map +1 -1
  68. package/dist/transformers/modix.transformer.js +5 -5
  69. package/dist/transformers/modix.transformer.js.map +1 -1
  70. package/dist/transformers/ooyyo.transformer.js +1 -1
  71. package/dist/transformers/ooyyo.transformer.js.map +1 -1
  72. package/dist/transformers/rubrikk.transformer.js +1 -1
  73. package/dist/transformers/rubrikk.transformer.js.map +1 -1
  74. package/dist/transformers/trovit.transformer.d.ts +16 -0
  75. package/dist/transformers/trovit.transformer.js +73 -0
  76. package/dist/transformers/trovit.transformer.js.map +1 -0
  77. package/dist/tsconfig.build.tsbuildinfo +1 -1
  78. package/dist/utils/converter.utils.d.ts +1 -0
  79. package/dist/utils/converter.utils.js +5 -1
  80. package/dist/utils/converter.utils.js.map +1 -1
  81. package/dist/utils/index.d.ts +3 -0
  82. package/dist/utils/index.js +20 -0
  83. package/dist/utils/index.js.map +1 -0
  84. package/package.json +3 -3
  85. package/src/app.module.ts +14 -8
  86. package/src/configs/index.ts +1 -0
  87. package/src/configs/trovit.config.ts +14 -0
  88. package/src/constants/modix/category.constant.ts +0 -1
  89. package/src/enums/export-type.enum.ts +1 -0
  90. package/src/export.schema.ts +6 -0
  91. package/src/exporters/index.ts +1 -0
  92. package/src/exporters/trovit.exporter.ts +49 -0
  93. package/src/formats/index.ts +1 -0
  94. package/src/formats/trovit-xml.builder.ts +44 -0
  95. package/src/interfaces/{autoborse.intreface.ts → atributes-wrap-item.intreface.ts} +1 -1
  96. package/src/interfaces/export-item.interface.ts +65 -37
  97. package/src/interfaces/index.ts +1 -0
  98. package/src/interfaces/modix/index.ts +0 -1
  99. package/src/interfaces/modix/modix-item-list.interface.ts +2 -2
  100. package/src/services/images.service.ts +19 -10
  101. package/src/services/index.ts +6 -5
  102. package/src/services/transformer.service.ts +129 -0
  103. package/src/transformers/as24.transformer.ts +3 -3
  104. package/src/transformers/auto24.transfomer.ts +7 -2
  105. package/src/transformers/autouncle.transformer.ts +2 -2
  106. package/src/transformers/facebook-shop.transformer.ts +1 -1
  107. package/src/transformers/fb-description.transformer.ts +4 -4
  108. package/src/transformers/fb.transformer.ts +14 -12
  109. package/src/transformers/google.transformer.ts +6 -2
  110. package/src/transformers/index.ts +1 -0
  111. package/src/transformers/meinstadt.transformer.ts +9 -4
  112. package/src/transformers/mobile.transformer.ts +8 -4
  113. package/src/transformers/modix.transformer.ts +14 -14
  114. package/src/transformers/ooyyo.transformer.ts +1 -1
  115. package/src/transformers/rubrikk.transformer.ts +1 -1
  116. package/src/transformers/trovit.transformer.ts +63 -0
  117. package/src/utils/converter.utils.ts +4 -0
  118. package/src/utils/index.ts +3 -0
  119. package/dist/interfaces/autoborse.intreface.js +0 -3
  120. package/dist/interfaces/autoborse.intreface.js.map +0 -1
  121. package/dist/interfaces/modix/modix-wrap-item.intreface.d.ts +0 -6
  122. package/dist/interfaces/modix/modix-wrap-item.intreface.js.map +0 -1
  123. package/src/interfaces/modix/modix-wrap-item.intreface.ts +0 -6
@@ -1 +1,2 @@
1
1
  export declare function convertToCSV(data: unknown): string;
2
+ export declare const xmlStringReplacer: (str: string) => string;
@@ -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, '&amp;').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,3 @@
1
+ export * from './converter.utils';
2
+ export * from './validator.utils';
3
+ export * from './date-time.utils';
@@ -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.10.11",
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.2",
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": "99cb018c16172e25ddca83a388a1d56bc109921c"
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 { ConfigService, RulesService, LoaderService, UserService, CarService, ImagesService } from './services';
6
- import { RequestService } from './services/request.service';
7
- import { MappingService } from './services/mapping.service';
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 {}
@@ -15,3 +15,4 @@ export * from './ooyyo.config';
15
15
  export * from './yescar.config';
16
16
  export * from './autoboerse.config';
17
17
  export * from './facebook-shop.config';
18
+ export * from './trovit.config';
@@ -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
  };
@@ -25,4 +25,5 @@ export enum ExportType {
25
25
  KLEINANZEIGE_FOCUS = 'kleinanzeigefocus',
26
26
  CRITEO = 'criteo',
27
27
  FACEBOOK_SHOP = 'facebookshop',
28
+ TROVIT = 'trovit',
28
29
  }
@@ -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
  };
@@ -10,3 +10,4 @@ export * from './modix.exporter';
10
10
  export * from './ooyyo.exporter';
11
11
  export * from './rubrikk.exporter';
12
12
  export * from './facebook-shop.exporter';
13
+ export * from './trovit.exporter';
@@ -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
+ }
@@ -1,3 +1,4 @@
1
1
  export * from './rubrikk-xml.builder';
2
2
  export * from './modix-xml.builder';
3
3
  export * from './facebook-shop.builder';
4
+ export * from './trovit-xml.builder';
@@ -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,4 +1,4 @@
1
- export interface IModixWrapItem {
1
+ export interface IAtributeWrapItem {
2
2
  value: string | boolean | number;
3
3
  atributes?: {
4
4
  [key: string]: any;
@@ -1,6 +1,6 @@
1
1
  import { DataSchemes } from '@bytebrand/car-schema';
2
2
 
3
- import { IModixWrapItem } from './autoborse.intreface';
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: IModixWrapItem;
209
- manufacturer: IModixWrapItem;
210
- model: IModixWrapItem;
211
- submodel: IModixWrapItem;
212
- mileage: IModixWrapItem;
213
- cylinderCapacity: IModixWrapItem;
214
- enginePower: IModixWrapItem;
215
- fuel: IModixWrapItem;
216
- accident: IModixWrapItem;
217
- transmission: IModixWrapItem;
218
- usageCategory: IModixWrapItem;
219
- bodyStyle: IModixWrapItem;
220
- isOnline: IModixWrapItem;
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: IModixWrapItem;
245
- description: IModixWrapItem;
246
- paint: IModixWrapItem;
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: IModixWrapItem;
253
- tsn: IModixWrapItem;
252
+ hsn: IAtributeWrapItem;
253
+ tsn: IAtributeWrapItem;
254
254
  };
255
- vin: IModixWrapItem;
256
- datEuropacode: IModixWrapItem;
257
- schwackecode: IModixWrapItem;
255
+ vin: IAtributeWrapItem;
256
+ datEuropacode: IAtributeWrapItem;
257
+ schwackecode: IAtributeWrapItem;
258
258
  }
259
259
 
260
260
  export interface imageItem {
261
261
  url: string;
262
- imageList: IModixWrapItem[];
262
+ imageList: IAtributeWrapItem[];
263
263
  }
264
264
 
265
265
  export interface priceItem {
266
266
  vatReclaimable: boolean;
267
- grossPrice: IModixWrapItem;
267
+ grossPrice: IAtributeWrapItem;
268
268
  }
269
269
 
270
270
  export interface dealerItem {
271
271
  address: {
272
- company: IModixWrapItem;
273
- street: IModixWrapItem;
274
- city: IModixWrapItem;
275
- zip: IModixWrapItem;
276
- country: IModixWrapItem;
277
- phone: IModixWrapItem;
278
- fax: IModixWrapItem;
279
- email: IModixWrapItem;
280
- homepage: IModixWrapItem;
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: IModixWrapItem;
284
- representitive: IModixWrapItem;
285
- vatid: IModixWrapItem;
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
+ }
@@ -1,2 +1,3 @@
1
1
  export * from './export-item.interface';
2
2
  export * from './modix';
3
+ export * from './atributes-wrap-item.intreface';
@@ -1,2 +1 @@
1
- export * from './modix-wrap-item.intreface';
2
1
  export * from './modix-item-list.interface';
@@ -1,5 +1,5 @@
1
- import { IModixWrapItem } from './modix-wrap-item.intreface';
1
+ import { IAtributeWrapItem } from '../atributes-wrap-item.intreface';
2
2
 
3
3
  export interface IModixItemsList {
4
- [key: string]: IModixWrapItem;
4
+ [key: string]: IAtributeWrapItem;
5
5
  }
@@ -1,4 +1,4 @@
1
- import { get, toString } from 'lodash';
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/validator.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(car: DataSchemes.Car, images: ImboImageResponseInterface[]): Array<string> {
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(car: DataSchemes.Car, images: ImboImageResponseInterface[]): Promise<string[]> {
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.imageCodePredicted.split('-')[0];
97
+ const imageCode = image?.imageCodePredicted?.split('-')[0];
89
98
  result[imageCode] = image.imageIdentifier;
90
99
  });
91
100
  return result;
@@ -1,8 +1,9 @@
1
- export * from './user.service';
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';