const MenuType = require('../models/MenuType') const FoodCategory = require('../models/FoodCategory') const {body, validationResult} = require('express-validator') const {_sr} = require('../plugins/serverResponses') const {res404, res500, checkValidations} = require('../plugins/controllersHelperFunctions') const StoreInfo = require('../models/StoreInfo'); const limit = 20 module.exports.create = [ [ body('index') .notEmpty().withMessage(_sr['fa'].required.index) .bail() .isNumeric().withMessage(_sr['fa'].format.number), body('name') .notEmpty().withMessage(_sr['fa'].required.name) .bail() .custom((value, {req}) => { return MenuType.findOne({name: value , branchId: req?.body?.branchId}) .then(menuType => { if (menuType) return Promise.reject(_sr['fa'].duplicated.name) else return true }) }), body('branchId') .notEmpty().withMessage(_sr['fa'].required.name) .bail() .custom((value, {req}) => { return StoreInfo.findOne({_id: value}) .then(store => { if (!store) return Promise.reject(_sr['fa'].not_found.item_id) else return true }) }) ], checkValidations(validationResult), (req, res) => { const menuType = new MenuType(req.body) menuType.save((err, data) => { if (err) return res500(res, err) else return res.json({message: _sr['fa'].response.success_save}) }) } ] module.exports.get_all_for_panel = [ (req, res) => { const filter = {branchId : req?.params?.branchId} MenuType.paginate(filter, { page: req.query.page, limit, sort : {index : 1} } , (err, data) => { if (err) return res500(res, err) else return res.json(data) }) } ] module.exports.get_all_for_web = [ (req, res) => { MenuType.find({branchId: req?.params?.branchId ,isCafeMenu:false}).sort({index: 1}).exec((err, data) => { if (err) return res500(res, err) else return res.json(data) }) } ] module.exports.get_all_wihout_paginate = [ (req, res) => { MenuType.find({branchId : req?.params?.branchId}).sort({index: 1}).exec((err, data) => { if (err) return res500(res, err?.message) else return res.json(data) }) } ] module.exports.get_one = [ (req, res) => { MenuType.findById(req?.params?.id, (err, data) => { if (err || !data) return res404(res, err) else return res.json(data) }) } ] module.exports.update = [ [ body('index') .notEmpty().withMessage(_sr['fa'].required.index) .bail() .isNumeric().withMessage(_sr['fa'].format.number), body('name') .notEmpty().withMessage(_sr['fa'].required.name) .bail() .custom((value, {req}) => { return MenuType.findOne({name: value , branchId: req?.body?.branchId}) .then(menuType => { if (menuType && menuType._id.toString() !== req.params.id) return Promise.reject(_sr['fa'].duplicated.name) else return true }) }), body('branchId') .notEmpty().withMessage(_sr['fa'].required.name) .bail() .custom((value, {req}) => { return StoreInfo.findOne({_id: value}) .then(store => { if (!store) return Promise.reject(_sr['fa'].not_found.item_id) else return true }) }) ], checkValidations(validationResult), (req, res) => { MenuType.findByIdAndUpdate(req?.params?.id, req.body, (err, oldData) => { if (err || !oldData) return res404(res, err) else return res.json({message: _sr['fa'].response.success_save}) }) } ] module.exports.delete = [ (req, res) => { FoodCategory.findOne({type: req.params.id}, (err, category) => { if (err) return res500(res, err) if (category) return res.status(403).json({message: 'نمیتوان منوهایی که شامل زیرمجموعه هستند را حذف کرد.'}) else { MenuType.findByIdAndDelete(req.params.id, (err1, data) => { if (err1 || !data) return res404(res, err1) else return res.json({message: _sr['fa'].response.success_remove}) }) } }) } ]