const Slider = require('../models/Slider') const dateFormat = require('dateformat') const {body, validationResult} = require('express-validator') const jimp = require('jimp') const fs = require('fs') const v_m = require('../validation_messages') //////////////////////////////////////////////////////////////////////////////// create module.exports.create = [ [ body('fa_title') .isLength({max: 40}).withMessage(v_m['fa'].max_char.max40), body('en_title') .isLength({max: 40}).withMessage(v_m['fa'].max_char.max40), body('fa_caption') .isLength({max: 100}).withMessage(v_m['fa'].max_char.max100), body('en_caption') .isLength({max: 100}).withMessage(v_m['fa'].max_char.max100) ], (req, res) => { const errors = validationResult(req) if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}) if (req.files) { let file = req.files.image jimp.read(file.data) .then(img => { let fileName = 'image_' + Date.now() + '.' + img.getExtension() if (img.bitmap.width >= 1920 && img.bitmap.height >= 1080) { if (file.size / 1024 < 450) { file.mv(`./static/uploads/images/slider/${fileName}`, (err, img) => { const slider = new Slider({ image: fileName, slider_details: { fa: { title: req.body.fa_title, caption: req.body.fa_caption }, en: { title: req.body.en_title, caption: req.body.en_caption } }, created_at: dateFormat(Date.now(), 'yyyy-mm-dd HH:MM:ss') }) slider.save((err, data) => { if (err) return res.status(500).json({error: err}) return res.json({message: v_m['fa'].response.success_save}) }) }) } else { return res.status(422).json({validation: {image: {msg: 'حجم تصویر نباید بیشتر از 450 کیلوبایت باشد'}}}) } } else { return res.status(422).json({validation: {image: {msg: 'ابعاد تصویر حداقل 1920*1080 پیکسل قابل قبول میباشد.'}}}) } }) .catch(err => { console.log(err) }) } else { return res.status(422).json({validation: {image: {msg: v_m['fa'].required.image}}}) } } ] //////////////////////////////////////////////////////////////////////////////// get all module.exports.getAll = [ (req, res) => { Slider.find({}, (err, slides) => { if (err) return res.status(404).json({error: err}) return res.json(slides) }) } ] //////////////////////////////////////////////////////////////////////////////// get one module.exports.getOne = [ (req, res) => { Slider.findById(req.params.id, (err, slide) => { if (err) return res.status(404).json({error: v_m['fa'].not_found.item_id}) return res.json(slide) }) } ] //////////////////////////////////////////////////////////////////////////////// update module.exports.update = [ [ body('fa_title') .isLength({max: 40}).withMessage(v_m['fa'].max_char.max40), body('en_title') .isLength({max: 40}).withMessage(v_m['fa'].max_char.max40), body('fa_caption') .isLength({max: 100}).withMessage(v_m['fa'].max_char.max100), body('en_caption') .isLength({max: 100}).withMessage(v_m['fa'].max_char.max100) ], (req, res) => { const errors = validationResult(req) if (!errors.isEmpty()) return res.status(422).json({validation: errors.mapped()}) const data = { slider_details: { fa: { title: req.body.fa_title, caption: req.body.fa_caption }, en: { title: req.body.en_title, caption: req.body.en_caption } }, updated_at: dateFormat(Date.now(), 'yyyy-mm-dd HH:MM:ss') } if (req.files) { let file = req.files.image jimp.read(file.data) .then(img => { let fileName = 'image_' + Date.now() + '.' + img.getExtension() data.image = fileName if (img.bitmap.width >= 1920 && img.bitmap.height >= 1080) { if (file.size / 1024 < 450) { file.mv(`./static/uploads/images/slider/${fileName}`, (err) => { if (err) console.log(err) Slider.findByIdAndUpdate(req.params.id, data, (err, oldSlide) => { if (err) return res.status(500).json({error: err}) fs.unlink(`./static/${oldSlide.image}`, err => { if (err) console.log(err) }) return res.json({message: v_m['fa'].response.success_save}) }) }) } else { return res.status(422).json({validation: {image: {msg: 'حجم تصویر نباید بیشتر از 450 کیلوبایت باشد'}}}) } } else { return res.status(422).json({validation: {image: {msg: 'ابعاد تصویر حداقل 1920*1080 پیکسل قابل قبول میباشد.'}}}) } }) .catch(err => { console.log(err) }) } else { Slider.findByIdAndUpdate(req.params.id, data, (err, oldSlide) => { if (err) return res.status(500).json({error: err}) return res.json({message: v_m['fa'].response.success_save}) }) } } ] //////////////////////////////////////////////////////////////////////////////// delete module.exports.delete = [ (req, res) => { Slider.findByIdAndRemove(req.params.id, (err, data) => { if (err) return res.json({error: err}) fs.unlink(`./static/${data.image}`, err => { if (err) console.log(err) }) return res.json({message: v_m['fa'].response.success_remove}) }) } ]