const BlogCategory = require('../models/blog/BlogCategory') const BlogPost = require('../models/blog/BlogPost') const dateformat = require('dateformat') const {body, validationResult} = require('express-validator') module.exports.create = [ [ body('fa_name') .notEmpty().withMessage('نام نباید خالی باشد.') .bail() .custom((value, {req}) => { return BlogCategory.findOne({'blogCategory_details.fa.name': value}).then(category => { if (category) return Promise.reject('این نام از قبل وجود دارد.') return true }) }), body('en_name') .notEmpty().withMessage('نام نباید خالی باشد.') .bail() .custom((value, {req}) => { return BlogCategory.findOne({'blogCategory_details.en.name': value}).then(category => { if (category) return Promise.reject('این نام از قبل وجود دارد.') return true }) }), body('de_name') .notEmpty().withMessage('نام نباید خالی باشد.') .bail() .custom((value, {req}) => { return BlogCategory.findOne({'blogCategory_details.de.name': value}).then(category => { if (category) return Promise.reject('این نام از قبل وجود دارد.') return true }) }), body('tr_name') .notEmpty().withMessage('نام نباید خالی باشد.') .bail() .custom((value, {req}) => { return BlogCategory.findOne({'blogCategory_details.tr.name': value}).then(category => { if (category) return Promise.reject('این نام از قبل وجود دارد.') return true }) }), body('it_name') .notEmpty().withMessage('نام نباید خالی باشد.') .bail() .custom((value, {req}) => { return BlogCategory.findOne({'blogCategory_details.it.name': value}).then(category => { if (category) return Promise.reject('این نام از قبل وجود دارد.') return true }) }) ], (req, res) => { const errors = validationResult(req) if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}) const blogCategory = new BlogCategory({ blogCategory_details: { fa: { name: req.body.fa_name }, en: { name: req.body.en_name }, de: { name: req.body.de_name }, tr: { name: req.body.tr_name }, it: { name: req.body.it_name } }, created_at: dateformat(Date.now(), 'yyyy-mm-dd HH:MM:ss') }) blogCategory.save(err => { if (err) console.log(err) return res.json({message: 'دسته بندی اضافه شد.'}) }) } ] module.exports.getAll = [ (req, res) => { BlogCategory.find({}, (err, categories) => { if (err) return res.status(500).json({message: err}) return res.json(categories) }) } ] module.exports.getOne = [ (req, res) => { BlogCategory.findById(req.params.id, (err, category) => { if (err) return res.status(404).json({message: err}) return res.json(category) }) } ] module.exports.update = [ [ body('fa_name') .notEmpty().withMessage('نام نباید خالی باشد.') .bail() .custom((value, {req}) => { return BlogCategory.findOne({'blogCategory_details.fa.name': value}).then(category => { if (category && category._id.toString() !== req.params.id) return Promise.reject('این نام از قبل وجود دارد.') return true }) }), body('en_name') .notEmpty().withMessage('نام نباید خالی باشد.') .bail() .custom((value, {req}) => { return BlogCategory.findOne({'blogCategory_details.en.name': value}).then(category => { if (category && category._id.toString() !== req.params.id) return Promise.reject('این نام از قبل وجود دارد.') return true }) }), body('de_name') .notEmpty().withMessage('نام نباید خالی باشد.') .bail() .custom((value, {req}) => { return BlogCategory.findOne({'blogCategory_details.de.name': value}).then(category => { if (category && category._id.toString() !== req.params.id) return Promise.reject('این نام از قبل وجود دارد.') return true }) }), body('tr_name') .notEmpty().withMessage('نام نباید خالی باشد.') .bail() .custom((value, {req}) => { return BlogCategory.findOne({'blogCategory_details.tr.name': value}).then(category => { if (category && category._id.toString() !== req.params.id) return Promise.reject('این نام از قبل وجود دارد.') return true }) }), body('it_name') .notEmpty().withMessage('نام نباید خالی باشد.') .bail() .custom((value, {req}) => { return BlogCategory.findOne({'blogCategory_details.it.name': value}).then(category => { if (category && category._id.toString() !== req.params.id) return Promise.reject('این نام از قبل وجود دارد.') return true }) }) ], (req, res) => { const errors = validationResult(req) if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}) const data = { blogCategory_details: { fa: { name: req.body.fa_name }, en: { name: req.body.en_name }, de: { name: req.body.de_name }, tr: { name: req.body.tr_name }, it: { name: req.body.it_name } }, updated_at: dateformat(Date.now(), 'yyyy-mm-dd HH:MM:ss') } BlogCategory.findByIdAndUpdate(req.params.id, data, (err, oldData) => { if (err) console.log(err) return res.json({message: 'دسته بندی بروزرسانی شد.'}) }) } ] module.exports.delete = [ (req, res) => { BlogPost.find({category: req.params.id}, (err, categories) => { if (err) console.log(err) if (!categories.length) { BlogCategory.findByIdAndDelete(req.params.id, (err) => { if (err) return res.status(404).json({message: err}) return res.json({message: 'دسته بندی حذف شد.'}) }) } else { return res.status(500).json({message: 'نمیتوان دسته بندی هایی که دارای پست هستند را پاک کرد.'}) } }) } ]