const Slide = require('../models/Slide') const {body, validationResult} = require('express-validator') const sharp = require('sharp') const fs = require('fs') const {_sr} = require('../plugins/serverResponses') const {res404, re500} = require('../plugins/controllersHelperFunctions') ////// variables const maxCaptionLength = 65 const slideImageWidth = 1920 const slideImageHeight = 1080 const slideImageQuality = 100 //////////////////////////////////////////////////////////////////////////////// create module.exports.create = [ async (req, res) => { if (!req.files || !req.files.image) return res.status(422).json({validation: {image: {msg: _sr['fa'].required.image}}}) if (req.files && req.files.image && !_sr.supportedImageFormats.includes(req.files.image.mimetype.split('/')[1])) return res.status(422).json({validation: {image: {msg: _sr['fa'].format.image}}}) let image = req.files.image let imageName = 'slide_' + Date.now() + '.' + image.mimetype.split('/')[1] const data = { caption: req.body.caption.slice(0, maxCaptionLength), image: imageName } try { const target = sharp(image.data) await target .resize(slideImageWidth, slideImageHeight, {fit: 'cover'}) .jpeg({quality: slideImageQuality}) .toFile(`./static/uploads/images/slider/${imageName}`) } catch (e) { return res500(res, e) } const slider = new Slide(data) slider.save((err, data) => { if (err) return res500(res, err) return res.json({message: _sr['fa'].response.success_save}) }) } ] //////////////////////////////////////////////////////////////////////////////// get all module.exports.getAll = [ (req, res) => { Slide.find({}, (err, slides) => { if (err) return res500(res, err) return res.json(slides) }) } ] //////////////////////////////////////////////////////////////////////////////// get one module.exports.getOne = [ (req, res) => { Slide.findById(req.params.id, (err, slide) => { if (err || !slide) return res404(res, err) return res.json(slide) }) } ] //////////////////////////////////////////////////////////////////////////////// update module.exports.update = [ async (req, res) => { if (req.files && req.files.image && !_sr.supportedImageFormats.includes(req.files.image.mimetype.split('/')[1])) return res.status(422).json({validation: {image: {msg: _sr['fa'].format.image}}}) const data = {caption: req.body.caption.slice(0, maxCaptionLength)} if (req.files && req.files.image) { let image = req.files.image let imageName = 'slide_' + Date.now() + '.' + image.mimetype.split('/')[1] data.image = imageName try { const target = sharp(image.data) await target .resize(slideImageWidth, slideImageHeight, {fit: 'cover'}) .jpeg({quality: slideImageQuality}) .toFile(`./static/uploads/images/slider/${imageName}`) } catch (e) { return res500(res, e) } } Slide.findByIdAndUpdate(req.params.id, data, (err, oldSlide) => { if (err || !oldSlide) return res404(res, err) if (req.files && req.files.image) { fs.unlink(`./static/${oldSlide.image}`, err => { if (err) console.log(err) }) } return res.json({message: _sr['fa'].response.success_save}) }) } ] //////////////////////////////////////////////////////////////////////////////// delete module.exports.delete = [ (req, res) => { Slide.findByIdAndRemove(req.params.id, (err, data) => { if (err || !data) return res404(res, err) fs.unlink(`./static/${data.image}`, err => { if (err) console.log(err) }) return res.json({message: _sr['fa'].response.success_remove}) }) } ]