66 lines
1.9 KiB
JavaScript
66 lines
1.9 KiB
JavaScript
const moment = require("moment");
|
|
|
|
const { bulkUpsertRealEstates } = require("../../helpers/db/realEstate");
|
|
const { bulkUpsertPriceHistory } = require("../../helpers/db/priceHistory");
|
|
|
|
class PostgresSaver {
|
|
connect() {
|
|
//TODO: It seems we never worry about open/close connection with Sequelize ?
|
|
//TODO: Check if postgres is ready
|
|
return true;
|
|
}
|
|
|
|
async save(results) {
|
|
const savedRecords = await bulkUpsertRealEstates(results);
|
|
//Extruding data for price history table
|
|
const resultPrices = savedRecords.map(realEstate => {
|
|
//Null values canot be recognized by ignore duplicates in sequalize
|
|
//Value price = 0 indicates 'cijena na upit'
|
|
const priceTmp =
|
|
realEstate.dataValues.price === null ? 0 : realEstate.dataValues.price;
|
|
|
|
return {
|
|
realEstateId: realEstate.dataValues.id,
|
|
price: priceTmp,
|
|
createdAt: realEstate.dataValues.createdAt,
|
|
updatedAt: realEstate.dataValues.updatedAt
|
|
};
|
|
});
|
|
const savedPrices = await bulkUpsertPriceHistory(resultPrices);
|
|
//
|
|
console.log("savedPrices", savedPrices);
|
|
//
|
|
if (Array.isArray(savedRecords)) {
|
|
const newRealEstates = [];
|
|
const existingRealEstates = [];
|
|
|
|
for (const savedRecord of savedRecords) {
|
|
const { createdAt, updatedAt } = savedRecord;
|
|
|
|
const createdAtMoment = moment.utc(createdAt);
|
|
const updatedAtMoment = moment.utc(updatedAt);
|
|
|
|
if (createdAtMoment.isSame(updatedAtMoment, "second")) {
|
|
newRealEstates.push(savedRecord);
|
|
} else {
|
|
existingRealEstates.push(savedRecord);
|
|
}
|
|
}
|
|
|
|
return {
|
|
newRecords: newRealEstates,
|
|
existingRecords: existingRealEstates
|
|
};
|
|
} else {
|
|
throw { message: "[POSTGRES] Failed to save records" };
|
|
}
|
|
}
|
|
|
|
close() {
|
|
//TODO: It seems we never worry about open/close connection with Sequelize ?
|
|
return true;
|
|
}
|
|
}
|
|
|
|
module.exports = PostgresSaver;
|