@bytebrand/export-cars 1.2.2 → 1.3.2

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 (133) hide show
  1. package/README.md +0 -1
  2. package/dist/config/autoborse.config.d.ts +5 -0
  3. package/dist/config/autoborse.config.js +15 -0
  4. package/dist/config/autoborse.config.js.map +1 -0
  5. package/dist/config/index.d.ts +1 -0
  6. package/dist/config/index.js +18 -0
  7. package/dist/config/index.js.map +1 -0
  8. package/dist/constants/index.d.ts +1 -0
  9. package/dist/constants/index.js +18 -0
  10. package/dist/constants/index.js.map +1 -0
  11. package/dist/constants/modix/body-color-name.constant.d.ts +2 -0
  12. package/dist/constants/modix/body-color-name.constant.js +22 -0
  13. package/dist/constants/modix/body-color-name.constant.js.map +1 -0
  14. package/dist/constants/modix/category.constant.d.ts +2 -0
  15. package/dist/constants/modix/category.constant.js +14 -0
  16. package/dist/constants/modix/category.constant.js.map +1 -0
  17. package/dist/constants/modix/fuel.constant.d.ts +2 -0
  18. package/dist/constants/modix/fuel.constant.js +16 -0
  19. package/dist/constants/modix/fuel.constant.js.map +1 -0
  20. package/dist/constants/modix/index.d.ts +6 -0
  21. package/dist/constants/modix/index.js +23 -0
  22. package/dist/constants/modix/index.js.map +1 -0
  23. package/dist/constants/modix/manufacturers.constant.d.ts +4 -0
  24. package/dist/constants/modix/manufacturers.constant.js +7502 -0
  25. package/dist/constants/modix/manufacturers.constant.js.map +1 -0
  26. package/dist/constants/modix/transmission.constant.d.ts +2 -0
  27. package/dist/constants/modix/transmission.constant.js +10 -0
  28. package/dist/constants/modix/transmission.constant.js.map +1 -0
  29. package/dist/constants/modix/usage-type.constant.d.ts +3 -0
  30. package/dist/constants/modix/usage-type.constant.js +14 -0
  31. package/dist/constants/modix/usage-type.constant.js.map +1 -0
  32. package/dist/constants/modix/vehicle-class.constant.d.ts +2 -0
  33. package/dist/constants/modix/vehicle-class.constant.js +19 -0
  34. package/dist/constants/modix/vehicle-class.constant.js.map +1 -0
  35. package/dist/enums/export-type.enum.d.ts +2 -1
  36. package/dist/enums/export-type.enum.js +1 -0
  37. package/dist/enums/export-type.enum.js.map +1 -1
  38. package/dist/export.schema.d.ts +6 -1
  39. package/dist/export.schema.js +5 -0
  40. package/dist/export.schema.js.map +1 -1
  41. package/dist/exporters/index.d.ts +1 -0
  42. package/dist/exporters/index.js +1 -0
  43. package/dist/exporters/index.js.map +1 -1
  44. package/dist/exporters/modix.exporter.d.ts +13 -0
  45. package/dist/exporters/modix.exporter.js +64 -0
  46. package/dist/exporters/modix.exporter.js.map +1 -0
  47. package/dist/formats/auto24-xml.builder.d.ts +1 -1
  48. package/dist/formats/autouncle-json.builder.d.ts +1 -1
  49. package/dist/formats/fb-xml.builder.d.ts +1 -1
  50. package/dist/formats/google-xml.builder.d.ts +1 -1
  51. package/dist/formats/index.d.ts +1 -0
  52. package/dist/formats/index.js +1 -0
  53. package/dist/formats/index.js.map +1 -1
  54. package/dist/formats/meinstadt-json.builder.d.ts +1 -1
  55. package/dist/formats/modix-xml.builder.d.ts +14 -0
  56. package/dist/formats/modix-xml.builder.js +124 -0
  57. package/dist/formats/modix-xml.builder.js.map +1 -0
  58. package/dist/formats/ooyyo-xml.builder.d.ts +1 -1
  59. package/dist/formats/rubrikk-xml.builder.d.ts +1 -1
  60. package/dist/interfaces/autoborse.intreface.d.ts +6 -0
  61. package/dist/interfaces/autoborse.intreface.js +3 -0
  62. package/dist/interfaces/autoborse.intreface.js.map +1 -0
  63. package/dist/interfaces/export-item.interface.d.ts +78 -0
  64. package/dist/interfaces/index.d.ts +2 -0
  65. package/dist/interfaces/index.js +19 -0
  66. package/dist/interfaces/index.js.map +1 -0
  67. package/dist/interfaces/modix/index.d.ts +2 -0
  68. package/dist/interfaces/modix/index.js +19 -0
  69. package/dist/interfaces/modix/index.js.map +1 -0
  70. package/dist/interfaces/modix/modix-item-list.interface.d.ts +4 -0
  71. package/dist/interfaces/modix/modix-item-list.interface.js +3 -0
  72. package/dist/interfaces/modix/modix-item-list.interface.js.map +1 -0
  73. package/dist/interfaces/modix/modix-wrap-item.intreface.d.ts +6 -0
  74. package/dist/interfaces/modix/modix-wrap-item.intreface.js +3 -0
  75. package/dist/interfaces/modix/modix-wrap-item.intreface.js.map +1 -0
  76. package/dist/transformers/auto24.transfomer.d.ts +1 -1
  77. package/dist/transformers/autouncle.transformer.d.ts +1 -1
  78. package/dist/transformers/autouncle.transformer.js +1 -1
  79. package/dist/transformers/autouncle.transformer.js.map +1 -1
  80. package/dist/transformers/google.transformer.d.ts +1 -1
  81. package/dist/transformers/index.d.ts +1 -0
  82. package/dist/transformers/index.js +1 -0
  83. package/dist/transformers/index.js.map +1 -1
  84. package/dist/transformers/meinstadt.transformer.d.ts +1 -1
  85. package/dist/transformers/modix.transformer.d.ts +29 -0
  86. package/dist/transformers/modix.transformer.js +181 -0
  87. package/dist/transformers/modix.transformer.js.map +1 -0
  88. package/dist/transformers/ooyyo.transformer.d.ts +1 -1
  89. package/dist/transformers/ooyyo.transformer.js +1 -1
  90. package/dist/transformers/ooyyo.transformer.js.map +1 -1
  91. package/dist/transformers/rubrikk.transformer.d.ts +1 -1
  92. package/dist/tsconfig.build.tsbuildinfo +1 -1
  93. package/package.json +2 -2
  94. package/src/config/autoborse.config.ts +12 -0
  95. package/src/config/index.ts +1 -0
  96. package/src/constants/index.ts +1 -0
  97. package/src/constants/modix/body-color-name.constant.ts +20 -0
  98. package/src/constants/modix/category.constant.ts +13 -0
  99. package/src/constants/modix/fuel.constant.ts +14 -0
  100. package/src/constants/modix/index.ts +6 -0
  101. package/src/constants/modix/manufacturers.constant.ts +7498 -0
  102. package/src/constants/modix/transmission.constant.ts +8 -0
  103. package/src/constants/modix/usage-type.constant.ts +13 -0
  104. package/src/constants/modix/vehicle-class.constant.ts +17 -0
  105. package/src/enums/export-type.enum.ts +1 -0
  106. package/src/export.schema.ts +6 -1
  107. package/src/exporters/fb.exporter.ts +1 -1
  108. package/src/exporters/index.ts +1 -0
  109. package/src/exporters/meinstadt.exporter.ts +1 -1
  110. package/src/exporters/modix.exporter.ts +47 -0
  111. package/src/formats/auto24-xml.builder.ts +1 -1
  112. package/src/formats/autouncle-json.builder.ts +1 -1
  113. package/src/formats/fb-xml.builder.ts +1 -1
  114. package/src/formats/google-xml.builder.ts +1 -1
  115. package/src/formats/index.ts +1 -0
  116. package/src/formats/meinstadt-json.builder.ts +1 -1
  117. package/src/formats/modix-xml.builder.ts +167 -0
  118. package/src/formats/ooyyo-xml.builder.ts +1 -1
  119. package/src/formats/rubrikk-xml.builder.ts +1 -1
  120. package/src/interfaces/autoborse.intreface.ts +6 -0
  121. package/src/interfaces/export-item.interface.ts +84 -0
  122. package/src/interfaces/index.ts +2 -0
  123. package/src/interfaces/modix/index.ts +2 -0
  124. package/src/interfaces/modix/modix-item-list.interface.ts +5 -0
  125. package/src/interfaces/modix/modix-wrap-item.intreface.ts +6 -0
  126. package/src/transformers/auto24.transfomer.ts +1 -1
  127. package/src/transformers/autouncle.transformer.ts +2 -2
  128. package/src/transformers/google.transformer.ts +1 -1
  129. package/src/transformers/index.ts +1 -0
  130. package/src/transformers/meinstadt.transformer.ts +1 -1
  131. package/src/transformers/modix.transformer.ts +218 -0
  132. package/src/transformers/ooyyo.transformer.ts +2 -2
  133. package/src/transformers/rubrikk.transformer.ts +1 -1
@@ -0,0 +1,218 @@
1
+ import { findLast, get, toNumber, toSafeInteger, toString } from 'lodash';
2
+ import { Injectable } from '@nestjs/common';
3
+ import * as moment from 'moment/moment';
4
+
5
+ import { de, deVehicleDetailsPage, deVehicleProps } from '@bytebrand/i18n-dictionaries';
6
+ import { toLowercase } from '@bytebrand/schema-tools/dist/transform/utils';
7
+ import { DePostalCodesService } from '@bytebrand/car-basic-data-scope';
8
+ import { ImboImageResponseInterface } from '@bytebrand/chunkable';
9
+ import { TranslatorExtended } from '@bytebrand/schema-tools';
10
+ import { DataSchemes } from '@bytebrand/car-schema';
11
+
12
+ import { imageItem, IModixWrapItem, ModixXmlItem } from '../interfaces';
13
+
14
+ import {
15
+ BodyColorList,
16
+ VehicleClassList,
17
+ FuelList,
18
+ ManufactureList,
19
+ TransmissionList,
20
+ UsageConditionList,
21
+ UsageTypeList,
22
+ } from '../constants';
23
+ import { CategoryList } from '../constants/modix/category.constant';
24
+ import { isNotEmptyArray, isValidVin } from '../utils/validator.utils';
25
+ import { ConfigService } from '../services/config.service';
26
+
27
+ @Injectable()
28
+ export class ModixTransformer {
29
+ private translator: TranslatorExtended;
30
+ private postalCodesService: DePostalCodesService;
31
+
32
+ constructor(private readonly configService: ConfigService) {
33
+ const dict = { ...de, ...deVehicleProps, ...deVehicleDetailsPage };
34
+ this.postalCodesService = DePostalCodesService.getInstance();
35
+ this.translator = new TranslatorExtended(dict);
36
+ }
37
+
38
+ async transform({
39
+ car,
40
+ images,
41
+ }: {
42
+ car: DataSchemes.Car;
43
+ images: ImboImageResponseInterface[];
44
+ }): Promise<ModixXmlItem> {
45
+ return {
46
+ //Main data
47
+ maindata: {
48
+ category: this.getCategoryData(car),
49
+ manufacturer: this.getManufactureData(car),
50
+ model: { value: toString(get(car, 'mainData.model', '')) },
51
+ submodel: { value: get(car, 'mainData.subModel', '') },
52
+ mileage: { value: toNumber(get(car, 'mainData.mileage', null)), atributes: { scaleUnit: 'km' } },
53
+ cylinderCapacity: { value: toString(get(car, 'engineData.cylinders', null)) },
54
+ enginePower: { value: toNumber(get(car, 'engineData.powerKW', null)), atributes: { scaleUnit: 'kW' } },
55
+ fuel: this.getFuelData(car),
56
+ transmission: this.getTransmissionData(car),
57
+ accident: this.getAccident(car),
58
+ usageCategory: this.getUsageData(car),
59
+ bodyStyle: this.getBodyStyleData(car),
60
+ isOnline: { value: get(car, 'state.isOnline', null) },
61
+ },
62
+
63
+ //colors
64
+ bodyColors: {
65
+ id: this.getColorNameData(car).atributes.id,
66
+ data: {
67
+ name: { value: this.getColorNameData(car).value },
68
+ description: { value: `Außenfarbe ${this.getColorNameData(car).value}` },
69
+ paint: this.getPainId(car),
70
+ },
71
+ },
72
+
73
+ //dates
74
+ dates: [
75
+ { tag: 'date', value: toString(this.getGeneralInspection(car)), atributes: { id: 3 } },
76
+ { tag: 'date', value: toString(this.getExhaustInspection(car)), atributes: { id: 4 } },
77
+ { tag: 'date', value: toString(this.getConstruction(car)), atributes: { id: 1 } },
78
+ { tag: 'date', value: toString(this.getYear(car)), atributes: { id: 2 } },
79
+ ],
80
+
81
+ // identification
82
+ identification: {
83
+ hsnTsn: {
84
+ hsn: { value: get(car, 'metaData.hsn', '') },
85
+ tsn: { value: get(car, 'metaData.tsn', '') },
86
+ },
87
+ vin: { value: this.getVin(car) },
88
+ datEuropacode: { value: get(car, 'metaData.codeDAT', '') },
89
+ schwackecode: { value: get(car, 'metaData.codeSchwacke', '') },
90
+ },
91
+
92
+ //price
93
+ prices: {
94
+ vatReclaimable: get(car, 'price.vatDeductible', false),
95
+ grossPrice: { value: toNumber(get(car, 'price.currentSalesPrice', null)) },
96
+ },
97
+
98
+ //images
99
+ images: this.getImagesLinks(car, images),
100
+
101
+ //dealer
102
+ dealer: {
103
+ address: {
104
+ company: { value: 'auto.de Handels GmbH' },
105
+ street: { value: 'Thomaskirchhof 20' },
106
+ city: { value: 'Leipzig' },
107
+ zip: { value: '04109' },
108
+ country: { value: 'DE' },
109
+ phone: { value: '+498004030182' },
110
+ fax: { value: '+4934199153879' },
111
+ email: { value: 'auto@auto.de' },
112
+ homepage: { value: 'https://www.auto.de' },
113
+ },
114
+ imprint: {
115
+ registerId: { value: ' - HRB 33676' },
116
+ representitive: { value: 'Michael Klemmer, Boris Radke' },
117
+ vatid: { value: 'DE311875741' },
118
+ },
119
+ },
120
+ };
121
+ }
122
+
123
+ private getCategoryData(car: DataSchemes.Car): IModixWrapItem {
124
+ const vehicle_class = get(car, 'mainData.vehicleClass', 'selector_unknown');
125
+ return get(VehicleClassList, vehicle_class);
126
+ }
127
+
128
+ private getManufactureData(car: DataSchemes.Car): IModixWrapItem {
129
+ const carMake = toString(get(car, 'mainData.make', ''));
130
+ const manufactureData = findLast(ManufactureList, item => toLowercase(item.name) === toLowercase(carMake));
131
+ return { value: manufactureData.name || carMake, atributes: { id: manufactureData.id || null } };
132
+ }
133
+
134
+ private getFuelData(car: DataSchemes.Car): IModixWrapItem {
135
+ const fuel_selector = get(car, 'consumption.fuel', '');
136
+ return get(FuelList, fuel_selector);
137
+ }
138
+
139
+ private getTransmissionData(car: DataSchemes.Car): IModixWrapItem {
140
+ const transmission_selector = get(car, 'driveSuspension.gearbox', 'selector_unknown');
141
+ return get(TransmissionList, transmission_selector);
142
+ }
143
+
144
+ private getAccident(car: DataSchemes.Car): IModixWrapItem {
145
+ const accident = get(car, 'maindata.accidentDamaged', null);
146
+
147
+ return { value: accident };
148
+ }
149
+
150
+ private getUsageData(car: DataSchemes.Car): IModixWrapItem {
151
+ const usageType = get(car, 'maindata.usageType', '');
152
+ const usage_by_selector = get(UsageTypeList, usageType);
153
+
154
+ if (usage_by_selector) {
155
+ return usage_by_selector;
156
+ }
157
+
158
+ const condition = get(car, 'maindata.condition', 'selector_unknown');
159
+ return get(UsageConditionList, condition);
160
+ }
161
+
162
+ private getBodyStyleData(car: DataSchemes.Car): IModixWrapItem {
163
+ const body_style_selector = get(car, 'mainData.category', 'selector_unknown');
164
+ return get(CategoryList, body_style_selector);
165
+ }
166
+
167
+ private getPainId(car: DataSchemes.Car): IModixWrapItem {
168
+ const metallic = get(car, 'exterior.metallic', false);
169
+ return metallic ? { value: 'metallic', atributes: { id: 3 } } : { value: 'solid', atributes: { id: 1 } };
170
+ }
171
+
172
+ private getColorNameData(car): IModixWrapItem {
173
+ const colorSelection = get(car, 'exterior.exteriorColor', 'selector_unknown');
174
+ return get(BodyColorList, colorSelection);
175
+ }
176
+
177
+ private getYear(car: DataSchemes.Car): number {
178
+ const firstRegistration = get(car, 'mainData.firstRegistration', 0) as number;
179
+ if (firstRegistration !== 0) {
180
+ return toSafeInteger(moment(firstRegistration * 1000).format('YYYY'));
181
+ }
182
+ return 0;
183
+ }
184
+
185
+ private getGeneralInspection(car: DataSchemes.Car): number {
186
+ const inspection_date = get(car, 'careService.generalInspection', 0) as number;
187
+ return inspection_date ? toSafeInteger(moment(inspection_date * 1000).format('YYYY')) : 0;
188
+ }
189
+
190
+ private getConstruction(car: DataSchemes.Car): number {
191
+ const construction_date = get(car, 'mainData.constructionDate', 0) as number;
192
+ return construction_date ? toSafeInteger(moment(construction_date * 1000).format('YYYY')) : 0;
193
+ }
194
+
195
+ private getExhaustInspection(car: DataSchemes.Car): number {
196
+ const exhaust_date = get(car, 'careService.exhaustInspection', 0) as number;
197
+ return exhaust_date ? toSafeInteger(moment(exhaust_date * 1000).format('YYYY')) : 0;
198
+ }
199
+
200
+ private getVin(car: DataSchemes.Car): string {
201
+ const vin: string = get(car, 'metaData.vin', '');
202
+ return isValidVin(vin) ? vin : get(car, 'marketing.fakeVIN', '');
203
+ }
204
+
205
+ private getImagesLinks(car: DataSchemes.Car, images: ImboImageResponseInterface[]): imageItem {
206
+ const car_id = toString(get(car, '_id', ''));
207
+ const url = `https://${this.configService.config.url}/carimage/${car_id}`;
208
+
209
+ const imageList: IModixWrapItem[] = [];
210
+
211
+ if (isNotEmptyArray(images)) {
212
+ images.forEach((image: ImboImageResponseInterface, index) => {
213
+ imageList.push({ value: null, atributes: { name: `${image.imageIdentifier}/large`, position: index + 1 } });
214
+ });
215
+ }
216
+ return { url, imageList };
217
+ }
218
+ }
@@ -3,7 +3,7 @@ import { de } from '@bytebrand/i18n-dictionaries';
3
3
  import { get, toString, isEmpty, trim, join } from 'lodash';
4
4
  import * as moment from 'moment';
5
5
  import { DataSchemes } from '@bytebrand/car-schema';
6
- import { OoyyoXmlItem } from '../interfaces/export-item.interface';
6
+ import { OoyyoXmlItem } from '../interfaces';
7
7
  import { ImboImageResponseInterface } from '@bytebrand/chunkable';
8
8
  import { ConfigService } from '../services/config.service';
9
9
  import { Injectable } from '@nestjs/common';
@@ -30,7 +30,7 @@ export class OoyyoTransformer {
30
30
  }
31
31
 
32
32
  return {
33
- url: `https://www.${this.configService.config.url}/search/vehicle/${autodeid}`,
33
+ url: `https://www.${this.configService.config.url}/search/vehicle/${autodeid}?source=classifieds&medium=listing&campaign=ooyyo`,
34
34
  title: this.getTitle(car),
35
35
  content: trim(toString(get(car, 'offer.offerDescription', ''))),
36
36
  price: toString(get(car, 'price.currentSalesPrice', '')),
@@ -6,7 +6,7 @@ import { DePostalCodesService } from '@bytebrand/car-basic-data-scope';
6
6
  import { TranslatorExtended } from '@bytebrand/schema-tools';
7
7
  import { DataSchemes } from '@bytebrand/car-schema';
8
8
 
9
- import { RubrikkXmlItem } from '../interfaces/export-item.interface';
9
+ import { RubrikkXmlItem } from '../interfaces';
10
10
  import { ConfigService } from '../services/config.service';
11
11
  import * as moment from 'moment/moment';
12
12
  import { ImboImageResponseInterface } from '@bytebrand/chunkable';