@bytebrand/export-cars 1.21.73 → 1.21.75

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytebrand/export-cars",
3
- "version": "1.21.73",
3
+ "version": "1.21.75",
4
4
  "description": "",
5
5
  "author": "bytebrand",
6
6
  "license": "UNLICENSED",
@@ -1,4 +1,4 @@
1
- import { get, isEmpty, isNil, set, toString, upperFirst } from 'lodash';
1
+ import { get, isEmpty, isNil, isNumber, set, toString, upperFirst } from 'lodash';
2
2
 
3
3
  import { Injectable } from '@nestjs/common';
4
4
 
@@ -50,9 +50,22 @@ export class SantanderTransformer {
50
50
  const transformedCarData = {};
51
51
  const rules = await this.mappingService.getRules();
52
52
 
53
- console.log('rules', JSON.stringify(rules));
53
+ const isNew =
54
+ (!carData.mainData.firstRegistration || this.monthDiffLess(carData, 8)) &&
55
+ (!carData.mainData.mileage || carData.mainData.mileage < 1000);
56
+
57
+ if (isNew) {
58
+ console.log('carData', carData._id);
59
+ }
54
60
 
55
61
  for (const rule of rules) {
62
+ const importFieldNumber = Number(rule.importField.match(/\d+/)[0]);
63
+
64
+ if (!isNew && this.checkFieldsOnlyForNew(importFieldNumber)) {
65
+ console.log(`NEW - ${rule.importField} - ${importFieldNumber}`);
66
+ continue;
67
+ }
68
+
56
69
  if (rule.custom === 'yes') {
57
70
  const transformedField = await this.customTransformers(rule, carData, images);
58
71
  if (transformedField) {
@@ -64,10 +77,12 @@ export class SantanderTransformer {
64
77
  set(transformedCarData, `${rule.importField}`, await this.customTransformers(rule, carData, images));
65
78
  } else {
66
79
  if (!isNil(fieldValue) || ["['8']"].includes(rule.importField)) {
67
- const transformedField = await this.transformField(fieldValue, rule);
80
+ if (!this.checkFieldsOnlyForNew(importFieldNumber)) {
81
+ const transformedField = await this.transformField(fieldValue, rule);
68
82
 
69
- if (!isNil(transformedField)) {
70
- set(transformedCarData, `${rule.importField}`, transformedField);
83
+ if (!isNil(transformedField)) {
84
+ set(transformedCarData, `${rule.importField}`, transformedField);
85
+ }
71
86
  }
72
87
  }
73
88
  }
@@ -81,10 +96,19 @@ export class SantanderTransformer {
81
96
  if (this.configService.config.campaign === 'eauto' && carData.offer.ftpFolder === 'auto_de_eautos') {
82
97
  set(transformedCarData, 12, get(carData, 'offer.internalNumber', null));
83
98
  }
84
- console.log('transformedCarData', transformedCarData);
99
+
85
100
  return transformedCarData;
86
101
  }
87
102
 
103
+ private async checkFieldsOnlyForNew(importFieldNumber: number) {
104
+ const fieldsOnlyForNewCar = new Set<number>([
105
+ 336, 337, 338, 339, 313, 320, 405, 468, 469, 470, 471, 472, 473, 474, 475,
106
+ 513, 514, 515, 516, 517, 520, 521, 522, 523, 524, 525, 526, 527
107
+ ]);
108
+
109
+ return fieldsOnlyForNewCar.has(importFieldNumber);
110
+ }
111
+
88
112
  private async transformField(fieldValue: any, rule: MappingRules): Promise<string | void> {
89
113
  const transformProcedureName = `${rule.autodeFieldType}To${upperFirst(rule.importFieldType)}`;
90
114
 
@@ -144,6 +168,36 @@ export class SantanderTransformer {
144
168
  }
145
169
  }
146
170
 
171
+ private monthDiffLess(car: DataSchemes.Car, month: number) {
172
+ const fieldDate = new Date(this.convertToSeconds(car.mainData.firstRegistration)).getTime();
173
+ const conditionDate = new Date().getTime();
174
+ if (!isNumber(fieldDate)) {
175
+ return false;
176
+ }
177
+
178
+ const monthsDifference = (fieldDate - conditionDate) / (1000 * 60 * 60 * 24 * 30);
179
+
180
+ return Math.round(Math.abs(monthsDifference)) <= month;
181
+ }
182
+
183
+ private convertToSeconds(fieldValue: string | number | Date | null): any {
184
+ if (fieldValue === null) {
185
+ return null;
186
+ }
187
+
188
+ let timestamp = 0;
189
+
190
+ if (typeof fieldValue === 'number') {
191
+ if (fieldValue > 1e12) {
192
+ timestamp = fieldValue;
193
+ } else {
194
+ timestamp = fieldValue * 1000;
195
+ }
196
+ }
197
+
198
+ return Math.floor(timestamp);
199
+ }
200
+
147
201
  private async offerStringToString(): Promise<string> {
148
202
  const dealerId = get(this.currentCar, 'metaData.ownerId');
149
203
  const descriptionSchema = await this.userService.getDefaultSummaryByDealerId(dealerId);