Your IP : 216.73.216.220


Current Path : /home/deltalab/PMS/partner-manager-backend/rest/queries/
Upload File :
Current File : //home/deltalab/PMS/partner-manager-backend/rest/queries/channel.js

const { channelModel } = require('../../models/mongoose/channel');
const { partnerModel } = require('../../models/mongoose/partner');
const { warehouseModel } = require('../../models/mongoose/warehouse');

/**
 * Return a list of channels given a partner ID
 * @param {string} channelId
 * @returns channels
 */
async function readMany(partnerId = undefined) {
  const channels = await channelModel.find();
  const partner = await partnerModel.findById(partnerId);

  const availableChannels = [];
  for (let i = 0; i < partner.channels.length; i++) {
    for (let j = 0; j < channels.length; j++) {
      if ((partner.channels[i]._id.equals(channels[j]._id))) {
        availableChannels.push(channels[j]);
      }
    }
  }

  return availableChannels;
}

/**
 * Return a list of partners given a channel ID
 * @param {string} channelId
 * @returns partners
 */
async function readChannelPartners(channelId = undefined) {
  const channel = await channelModel.findById(channelId);

  const requestBody = {
    channels: { $in: channel._id },
  };
  // if (product.refrigerated) {
  //   requestBody.refrigerated = true;
  // }

  const partners = await partnerModel.find(requestBody);
  return partners;
}

async function readOwned(partnerId = undefined) {
  const channels = await channelModel.find();
  const partner = await partnerModel.findById(partnerId);

  const availableChannels = [];
  for (let j = 0; j < channels.length; j++) {
    const { managerId } = channels[j];
    if (managerId && managerId.equals(partner._id)) {
      availableChannels.push(channels[j]);
    }
  }
  return availableChannels;
}

/**
 * Return a list of channels given a partner ID
 * @param {string} channelId
 * @returns channels
 */
async function readManyWarehouse(warehouseId = undefined) {
  const channels = await channelModel.find();
  const warehouse = await warehouseModel.findById(warehouseId);
  const availableChannels = [];
  for (let i = 0; i < warehouse.channelAssignments.length; i++) {
    for (let j = 0; j < channels.length; j++) {
      if (warehouse.channelAssignments[i].channelId.equals(channels[j]._id)) {
        availableChannels.push(channels[j]);
      }
    }
  }

  return availableChannels;
}

/**
 * Return a channel given its ID
 * @param {string} channelId
 * @returns channel
 */
async function readOne(channelId) {
  const channel = await channelModel.findById({ _id: channelId });
  return channel;
}

async function createOne(channel) {
  const addedChannel = await channelModel.create(channel);
  return addedChannel;
}

async function updateOne(channelId, channel) {
  const updatedChannel = await channelModel.findByIdAndUpdate(channelId, channel, { returnDocument: 'after' });
  return updatedChannel;
}

async function deleteOne(channelId) {
  await channelModel.deleteOne({ _id: channelId });
}

module.exports = {
  readMany,
  readOwned,
  readManyWarehouse,
  readChannelPartners,
  readOne,
  createOne,
  updateOne,
  deleteOne,
};