HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: /var/www/javago_test/src/services/inHouse/house.services.js
import inHouseItem from "../../models/in_house_items.model.js";
import inHouseItemType from "../../models/in_house_item_type.model.js";
import inHouseMenuDetails from "../../models/in_house_menu_details.model.js";
import inHouseOrder from "../../models/in_house_order.model.js";
import inHouseOrderItems from "../../models/in_house_order_items.model.js"
import moment from 'moment';

export async function GetInHouseMenu(page) {
  try {
    if (['', null, undefined, 0].includes(page)) {
      page = 1
    }
    page = parseInt(page)
    let menu = await inHouseItem.paginate({
      page: page,
      paginate: 10, // limit should go here
      attributes: ['id', 'item_name', 'item_image'],
      include: [
        {
          model: inHouseItemType,
          attributes: ['id', 'type_name'],
          where: {
            is_active: 1
          },
          required: false
        }
      ]
    });
    menu = JSON.stringify(menu)
    menu = JSON.parse(menu)
    for (let index = 0; index < menu.docs.length; index++) {
      const element = menu.docs[index];
      element.size_data = await inHouseMenuDetails.findAll({
        where: {
          type: 1,
          is_active: 1,
          in_house_item_id: element.id
        },
        attributes: ['id', 'type_value']
      })
      element.milk_data = await inHouseMenuDetails.findAll({
        where: {
          type: 2,
          is_active: 1,
          in_house_item_id: element.id
        },
        attributes: ['id', 'type_value']
      })
      element.sugar_data = await inHouseMenuDetails.findAll({
        where: {
          type: 3,
          is_active: 1,
          in_house_item_id: element.id
        },
        attributes: ['id', 'type_value']
      })
    }
    return menu;
  } catch (error) {
    throw new Error(error)
  }
}

export async function GetInHouseItemById(item_id) {
  try {
    let menu = await inHouseItem.findAll(
      {
        where: {
          id: parseInt(item_id),
          is_active: 1
        },
        attributes: ['id', 'item_name', 'item_image'],
        include: [
          {
            model: inHouseItemType,
            attributes: ['id', 'type_name'],
            where: {
              is_active: 1
            },
            required: false
          }
        ]
      }
    );
    menu = JSON.stringify(menu)
    menu = JSON.parse(menu)
    for (let index = 0; index < menu.length; index++) {
      const element = menu[index];
      element.size_data = await inHouseMenuDetails.findAll({
        where: {
          type: 1,
          is_active: 1,
          in_house_item_id: element.id
        },
        attributes: ['id', 'type_value']
      })
      element.milk_data = await inHouseMenuDetails.findAll({
        where: {
          type: 2,
          is_active: 1,
          in_house_item_id: element.id
        },
        attributes: ['id', 'type_value']
      })
      element.sugar_data = await inHouseMenuDetails.findAll({
        where: {
          type: 3,
          is_active: 1,
          in_house_item_id: element.id
        },
        attributes: ['id', 'type_value']
      })
    }
    return menu;
  } catch (error) {
    throw new Error(error)
  }
}

export async function saveOrder(itemData) {
  try {
    let customisedOrderObj = {
      user_id: itemData.user_id,
      customized_order: itemData.customized_order,
      is_active: 1,
      created_at: moment().unix()
    }
    let result = await inHouseOrder.create(customisedOrderObj);
    let storeOrderObj = [];
    itemData.items.forEach(element => {
      storeOrderObj.push({
        in_house_order_id: result.id,
        in_house_item_id: element.in_house_item_id,
        item_type_id: element.item_type_id,
        size_id: element.size_id,
        milk_id: element.milk_id,
        sugar_id: element.sugar_id,
        qty: element.qty,
        created_at: moment().unix()
      })
    });
    let a = await inHouseOrderItems.bulkCreate(storeOrderObj);
    return a;
  } catch (error) {
    throw new Error(error)
  }
}

export async function getOrder(data) {
  try {

    if (['', null, undefined, 0].includes(data.page_no)) {
      data.page_no = 1
    }
    data.page_no = parseInt(data.page_no)
    let whereObject = {}
    whereObject.user_id = data.user_id
    let whereOrderObj = {
      where: whereObject,
      page: data.page_no,
      paginate: 10,
      attributes: ['id', 'user_id', 'customized_order'],
      order: [['id', 'DESC']],
      include: [{
        model: inHouseOrderItems,
        required: true,
        attributes: ['id', 'in_house_order_id', 'in_house_item_id', 'item_type_id', 'size_id', 'milk_id', 'sugar_id', 'qty', 'created_at'],
      }
      ]
    }
    let result = [];
    result = await inHouseOrder.paginate(whereOrderObj);
    result = JSON.stringify(result)
    result = JSON.parse(result)
    for (let index = 0; index < result.docs.length; index++) {
      const element = result.docs[index];
      for (let i = 0; i < element.in_house_order_items.length; i++) {
        const itemsData = element.in_house_order_items[i];
        itemsData.item_details = await inHouseItem.findOne({
          where: {
            is_active: 1,
            id: itemsData.in_house_item_id
          },
          attributes: ['id', 'item_name', 'item_image']
        })
        itemsData.type = await inHouseItemType.findOne({
          where: {
            is_active: 1,
            id: itemsData.item_type_id
          },
          attributes: ['id', 'type_name']
        })
        itemsData.size_data = await inHouseMenuDetails.findOne({
          where: {
            type: 1,
            is_active: 1,
            id: itemsData.size_id
          },
          attributes: ['id', 'type_value']
        })
        itemsData.milk_data = await inHouseMenuDetails.findOne({
          where: {
            type: 2,
            is_active: 1,
            id: itemsData.milk_id
          },
          attributes: ['id', 'type_value']
        })
        itemsData.sugar_data = await inHouseMenuDetails.findOne({
          where: {
            type: 3,
            is_active: 1,
            id: itemsData.sugar_id
          },
          attributes: ['id', 'type_value']
        })
        delete itemsData.sugar_id
        delete itemsData.in_house_item_id
        delete itemsData.size_id
        delete itemsData.item_type_id
        delete itemsData.milk_id
      }
    }
    return result;
  } catch (error) {
    throw new Error(error)
  }
}

// edit In house Order
export async function editOrder(itemData) {
  try {
    let customisedOrderObj = {
      customized_order: itemData.customized_order,
      is_active: 1,
      created_at: moment().unix()
    }
    let result = await inHouseOrder.update(customisedOrderObj, {
      where: { id: itemData.order_id, user_id: itemData.user_id }
    });
    await inHouseOrderItems.destroy({
      where: {
        in_house_order_id: itemData.order_id
      }
    })
    itemData.items.forEach(async element => {
      let updateObj = {
        in_house_order_id: itemData.order_id,
        in_house_item_id: element.in_house_item_id,
        item_type_id: element.item_type_id,
        size_id: element.size_id,
        milk_id: element.milk_id,
        sugar_id: element.sugar_id,
        qty: element.qty,
        updated_at: moment().unix()
      }
      await inHouseOrderItems.create(updateObj);
    });
    return result;
  } catch (error) {
    throw new Error(error)
  }
}

//delete item from in house order
export async function deleteInhouseItem(item_id) {
  try {
    let result = await inHouseOrderItems.destroy({
      where: { id: item_id }
    });
    return result;
  } catch (error) {
    throw new Error(error)
  }
}