const request = require('request');
const fs = require('fs');
const path = require('path');
const mongoose = require('mongoose');
const Vehiculo = require('../DB-schemas/schema-vehiculo.js');
const Contact = require('../DB-schemas/schema-contactos.js');
const MLAschema = require('../DB-schemas/schema-ml.js');
const updateDescription = require('./updateDescription.js');
const { promisify } = require('util');
const utils = require('../utils');
const delay = promisify(setTimeout);
function checkForImages(carId) {
const imageDir = path.join(__dirname, '..', 'public', 'images', 'cars', carId, 'carPhotos');
var pictures = [];
fs.readdir(imageDir, (err, files) => {
if (err) {
console.error(
Error reading image directory: ${err}
);
return;
}
if (files.length === 0) {
setTimeout(checkForImages(carId), 3000);
} else {
files.forEach((file, index) => {
const picture = {
source:
https://worldcambio.com/images/cars/${carId}/carPhotos/${file}
}
pictures.push(picture);
});
}
});
return pictures;
}
async function uploadCar(carInfo, carId, type) {
const pictures = await checkForImages(carId);
const car = await Vehiculo.findOne({ _id: carId });
const contactInfo = await Contact.findOne({ _id: car.contact });
const mercadolibreToken = await MLAschema.findOne({ _id: "64dbc3196a1dab9a00132eff" });
var options = {
'method': 'POST',
'url': '
https://api.mercadolibre.com/items',
'headers': {
'Authorization': 'Bearer ' + utils.decrypt(mercadolibreToken.token),
'Content-Type': 'application/json'
},
body: JSON.stringify({
"title": carInfo.title,
"description": carInfo.description,
"channels": [
"marketplace"
],
pictures,
"condition": carInfo.condition,
"category_id": carInfo.category_id,
"price": carInfo.price,
"currency_id": carInfo.currency_id,
"listing_type_id": carInfo.listing_type_id,
"available_quantity": 1,
"location": {
"address_line": "Avenida del Libertdor, 14745",
"zip_code": "1641",
"city": {
"name": "Acassuso"
},
"state": {
"id": "AR-C",
"name": "Porvincia de Buenos Aires"
},
"country": {
"id": "AR",
"name": "Argentina"
}
},
"seller_contact": {
"contact": contactInfo.name,
"other_info": contactInfo.surname,
"country_code": "+54",
"phone": contactInfo.phone,
"email": contactInfo.email,
"webpage": "
https://www.munafoautomoviles.com/"
},
"attributes": [
{
"id": "BRAND",
"value_name": carInfo.BRAND
},
{
"id": "VEHICLE_YEAR",
"value_name": carInfo.VEHICLE_YEAR
},
{
"id": "MODEL",
"value_name": carInfo.MODEL
},
{
"id": "DOORS",
"value_name": carInfo.DOORS
},
{
"id": "KILOMETERS",
"value_name": "" + carInfo.KILOMETERS + "km"
},
{
"id": "FUEL_TYPE",
"value_name": carInfo.FUEL_TYPE
},
{
"id": "COLOR",
"value_name": carInfo.COLOR
},
{
"id": "TRANSMISSION",
"value_name": carInfo.TRANSMISSION
},
{
"id": "TRIM",
"value_name": carInfo.TRIM
},
{
"id": "TRACTION_CONTROL",
"value_name": carInfo.TRACTION_CONTROL
},
{
"id": "HAS_ABS_BRAKES",
"value_name": carInfo.HAS_ABS_BRAKES
},
{
"id": "HAS_AIR_CONDITIONING",
"value_name": carInfo.HAS_AIR_CONDITIONING
},
{
"id": "HAS_BLUETOOTH",
"value_name": carInfo.HAS_BLUETOOTH
},
{
"id": "HAS_PARKING_SENSOR",
"value_name": carInfo.HAS_PARKING_SENSOR
},
{
"id": "HAS_POWER_WINDOWS",
"value_name": carInfo.HAS_POWER_WINDOWS
},
{
"id": "HAS_HEATED_FRONT_SEATS",
"value_name": carInfo.HAS_HEATED_FRONT_SEATS
},
{
"id": "ENGINE",
"value_name": carInfo.ENGINE
},
{
"id": "HAS_RAIN_SENSOR",
"value_name": carInfo.HAS_RAIN_SENSOR
},
{
"id": "HAS_PASSENGER_AIRBAG",
"value_name": carInfo.HAS_PASSENGER_AIRBAG
},
{
"id": "HAS_STABILITY_CONTROL",
"value_name": carInfo.HAS_STABILITY_CONTROL
},
{
"id": "HAS_REMOTE_TRUNK_RELEASE",
"value_name": carInfo.HAS_REMOTE_TRUNK_RELEASE
},
{
"id": "WITH_BACKUP_CAMERA",
"value_name": carInfo.WITH_BACKUP_CAMERA
},
{
"id": "HAS_LEATHER_UPHOLSTERY",
"value_name": carInfo.HAS_LEATHER_UPHOLSTERY
},
{
"id": "HAS_APPLE_CARPLAY",
"value_name": carInfo.HAS_APPLE_CARPLAY
},
{
"id": "HAS_AUXILIARY_PORT",
"value_name": carInfo.HAS_AUXILIARY_PORT
},
{
"id": "HAS_SPARE_TYRE_SUPPORT",
"value_name": carInfo.HAS_SPARE_TYRE_SUPPORT
},
{
"id": "HAS_SLIDING_ROOF",
"value_name": carInfo.HAS_SLIDING_ROOF
},
{
"id": "STEERING",
"value_name": carInfo.STEERING
},
{
"id": "STEERING",
"value_name": carInfo.STEERING
},
{
"id": "VEHICLE_BODY_TYPE",
"value_name": carInfo.VEHICLE_BODY_TYPE
},
{
"id": "WITH_ECO_MODE",
"value_name": carInfo.WITH_ECO_MODE
},
{
"id": "HAS_HEADLIGHT_CONTROL",
"value_name": carInfo.HAS_HEADLIGHT_CONTROL
},
{
"id": "HAS_REAR_FOGLIGHTS",
"value_name": carInfo.HAS_REAR_FOGLIGHTS
},
{
"id": "HAS_REAR_WINDOW_DEFOGGER",
"value_name": carInfo.HAS_REAR_WINDOW_DEFOGGER
},
{
"id": "HAS_CENTRAL_POWER_DOOR_LOCKS",
"value_name": carInfo.HAS_CENTRAL_POWER_DOOR_LOCKS
},
{
"id": "ARMORED",
"value_name": carInfo.ARMORED
},
{
"id": "HAS_ISOFIX",
"value_name": carInfo.HAS_ISOFIX
},
{
"id": "HAS_ASR_TRACTION",
"value_name": carInfo.HAS_ASR_TRACTION
},
{
"id": "HAS_BLIND_SIDE_ZONE_ALERT",
"value_name": carInfo.HAS_BLIND_SIDE_ZONE_ALERT
},
{
"id": "SINGLE_OWNER",
"value_name": carInfo.SINGLE_OWNER
},
{
"id": "HAS_AUTOPILOT",
"value_name": carInfo.HAS_AUTOPILOT
},
{
"id": "HAS_LIGHT_ON_REMINDER",
"value_name": carInfo.HAS_LIGHT_ON_REMINDER
},
{
"id": "HAS_CLIMATE_CONTROL",
"value_name": carInfo.HAS_CLIMATE_CONTROL
},
{
"id": "HAS_AUTO_WINDOW_CLOSER",
"value_name": carInfo.HAS_AUTO_WINDOW_CLOSER
},
{
"id": "WITH_ACTIVE_LANE_CHANGING_SENSOR",
"value_name": carInfo.WITH_ACTIVE_LANE_CHANGING_SENSOR
},
{
"id": "WITH_PARKING_SENSOR_BY_FRONT_CAMERA",
"value_name": carInfo.WITH_PARKING_SENSOR_BY_FRONT_CAMERA
},
{
"id": "WITH_PARKING_SENSOR_BY_REAR_CAMERA",
"value_name": carInfo.WITH_PARKING_SENSOR_BY_REAR_CAMERA
},
{
"id": "WITH_AUTOMATIC_PARKING_SENSOR",
"value_name": carInfo.ARMORED
},
{
"id": "WITH_CHROMED_ALLOY_WHEELS",
"value_name": carInfo.WITH_CHROMED_ALLOY_WHEELS
}
]
})
};
request(options, async function (error, response) {
if (error) {
if (error.response && error.response.data && error.response.data.message) {
const errorMessage = error.response.data.message;
if (errorMessage.includes("Invalid token")) {
console.log("acutalizando token");
await updateToken();
uploadCar(carInfo, carId);
}
} else {
console.log("Error message format is unexpected.");
}
}
const responseBody = JSON.parse(response.body);
console.log(responseBody);
const timestamp = Date.parse(responseBody.end_time);
car.mercadolibre_id = responseBody.id;
car.time_to_end = timestamp;
car.perma_link = responseBody.permalink;
await car.save();
});
await delay(4000);
updateDescription(carInfo, carId);
}
module.exports = uploadCar;
me puedes ayudar con esto, porque cuando subo las fotos se suben en 500x500, quiero que se suban con mas calidad porfa