| Current Path : /home/deltalab/PMS/partner-manager-backend/rest/queries/ |
| Current File : //home/deltalab/PMS/partner-manager-backend/rest/queries/product.js |
const { productModel } = require('../../models/mongoose/product');
const ims = require('../../services/ims');
/**
* Return a list of products given a partner ID
* @param {string} partnerId
* @returns products
*/
async function readMany(partnerId = undefined) {
const query = {};
if (partnerId) {
query.partnerId = partnerId;
}
query.deleted = false;
const products = await productModel.find(query);
return products;
}
async function readManyLinked(productId) {
const product = await productModel.findById({ _id: productId });
if (product) {
const recomms = [];
if (product.linkedProducts) {
for (let i = 0; i < product.linkedProducts.length; i++) {
const recommendedProduct = await productModel.findById({ _id: product.linkedProducts[i].productId });
if (recommendedProduct) {
recomms.push(recommendedProduct);
}
}
return recomms;
}
}
return null;
}
async function readManyByChannel(partnerId = undefined, channelId = undefined) {
let query;
if (channelId) {
query = { 'offers.channelId': channelId };
} else {
query = {};
}
if (partnerId) {
query.partnerId = partnerId;
}
query.deleted = false;
const products = await productModel.find(query);
return products;
}
/**
* Return a product given its ID
* @param {string} productId
* @returns product
*/
async function readOne(productId) {
const products = await productModel.findById({ _id: productId });
return products;
}
async function createOne(product) {
const addedProduct = await productModel.create(product);
return addedProduct;
}
async function updateOne(productId, product) {
const updatedProduct = await productModel.findByIdAndUpdate(productId, product, { returnDocument: 'after' });
return updatedProduct;
}
async function deleteOne(productSku) {
await productModel.deleteOne({ sku: productSku });
}
async function addMedia(productId, media) {
const updatedProduct = await productModel.findOneAndUpdate(
{ _id: productId },
{ $push: { media } },
{ returnDocument: 'after' },
);
return updatedProduct;
}
async function removeMedia(productId, mediaId) {
const updatedProduct = await productModel.findOneAndUpdate(
{ _id: productId },
{ $pull: { media: { imsgid: mediaId } } },
{ returnDocument: 'after' },
);
return updatedProduct;
}
async function updateAll() {
const list = await this.readMany();
console.log('[UPDATE] Inizio aggiornamento');
for (reference of list) {
try {
console.log(`[UPDATE] aggiornamento di ${reference.sku}`);
await ims.referenceUpdate(reference, reference.sku);
} catch {
continue;
}
}
return list;
}
module.exports = {
readMany,
readManyLinked,
readManyByChannel,
readOne,
createOne,
updateOne,
deleteOne,
addMedia,
removeMedia,
updateAll,
};