feat: add ci cd files dont edit those files
This commit is contained in:
@@ -0,0 +1,542 @@
|
||||
const Slider = require('../models/Slider');
|
||||
const {
|
||||
body,
|
||||
validationResult
|
||||
} = require('express-validator');
|
||||
const sharp = require('sharp');
|
||||
const {
|
||||
_sr
|
||||
} = require('../plugins/serverResponses');
|
||||
const {
|
||||
res404,
|
||||
res500,
|
||||
hasWhiteSpaces,
|
||||
isLatinCharactersWithSymbol,
|
||||
generateRandomDigits
|
||||
} = require('../plugins/controllersHelperFunctions');
|
||||
const fs = require('fs');
|
||||
|
||||
////// variables
|
||||
const profileWidth = 600;
|
||||
const profileHeight = 400;
|
||||
const profileQuality = 100;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////// admin
|
||||
module.exports.addSlider = [
|
||||
[
|
||||
body('title')
|
||||
.notEmpty().withMessage(_sr['fa'].required.title),
|
||||
|
||||
body('summaryTitle')
|
||||
.notEmpty().withMessage(_sr['fa'].required.field),
|
||||
|
||||
body('url')
|
||||
.notEmpty().withMessage(_sr['fa'].required.field),
|
||||
|
||||
body('index')
|
||||
.optional().isNumeric().withMessage(_sr['fa'].format.number),
|
||||
|
||||
body('isLocal')
|
||||
.optional().isBoolean().withMessage(_sr['fa'].format.boolean),
|
||||
|
||||
body('siteMap')
|
||||
.optional().isBoolean().withMessage(_sr['fa'].format.boolean),
|
||||
|
||||
body('modelType')
|
||||
.custom((value, {
|
||||
req
|
||||
}) => {
|
||||
if (req.user.portals.join() === portal.join()) {
|
||||
if (!portal.includes(value)) {
|
||||
return Promise.reject(_sr['fa'].required.field);
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
})
|
||||
],
|
||||
async (req, res) => {
|
||||
|
||||
const errors = validationResult(req)
|
||||
if (!errors.isEmpty()) return res.status(422).json({
|
||||
validation: errors.mapped()
|
||||
});
|
||||
|
||||
try {
|
||||
var {
|
||||
title,
|
||||
summaryTitle,
|
||||
isLocal,
|
||||
url,
|
||||
index,
|
||||
siteMap,
|
||||
modelType,
|
||||
} = req.body;
|
||||
|
||||
/** set portals */
|
||||
modelType = (req.user.portals.join() === portal.join()) ? modelType : req.user.portals[0];
|
||||
|
||||
const sliderData = {
|
||||
title : title.trim(),
|
||||
summaryTitle : summaryTitle.trim(),
|
||||
url : url.trim(),
|
||||
isLocal,
|
||||
index,
|
||||
siteMap,
|
||||
_creator: req.user._id,
|
||||
_updatedBy: req.user._id,
|
||||
modelType,
|
||||
};
|
||||
|
||||
var createSlider = await Slider.create(sliderData);
|
||||
|
||||
if (!createSlider) {
|
||||
res500(res, `error in add slider to data base`);
|
||||
}
|
||||
|
||||
/**
|
||||
* if we have pic upload to server
|
||||
*/
|
||||
if (req.files && req.files.cover) {
|
||||
const image = req.files.cover;
|
||||
if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) {
|
||||
return res.status(422).json({
|
||||
validation: {
|
||||
cover: {
|
||||
msg: _sr['fa'].format.image
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
const imageName = `slider_${Date.now()}_${createSlider._id}.${image.mimetype.split('/')[1]}`;
|
||||
try {
|
||||
const target = sharp(image.data)
|
||||
await target
|
||||
.resize(profileWidth, profileHeight, {
|
||||
fit: 'cover'
|
||||
})
|
||||
.jpeg({
|
||||
quality: profileQuality
|
||||
})
|
||||
.toFile(`./static/uploads/images/slider/${imageName}`);
|
||||
|
||||
createSlider.cover = imageName;
|
||||
|
||||
await createSlider.save();
|
||||
} catch (e) {
|
||||
return res500(res, e?.message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* show result
|
||||
*/
|
||||
return res.json(createSlider);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
/**
|
||||
* if we got unkown error show to client
|
||||
*/
|
||||
res500(res, error.message);
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
module.exports.updateSlider = [
|
||||
[
|
||||
body('title')
|
||||
.notEmpty().withMessage(_sr['fa'].required.title),
|
||||
|
||||
body('summaryTitle')
|
||||
.notEmpty().withMessage(_sr['fa'].required.field),
|
||||
|
||||
body('url')
|
||||
.notEmpty().withMessage(_sr['fa'].required.field),
|
||||
|
||||
body('isLocal')
|
||||
.optional().isBoolean().withMessage(_sr['fa'].format.boolean),
|
||||
|
||||
body('index')
|
||||
.optional().isNumeric().withMessage(_sr['fa'].format.number),
|
||||
|
||||
body('siteMap')
|
||||
.optional().isBoolean().withMessage(_sr['fa'].format.boolean),
|
||||
|
||||
body('modelType')
|
||||
.custom((value, {
|
||||
req
|
||||
}) => {
|
||||
if (req.user.portals.join() === portal.join()) {
|
||||
if (!portal.includes(value)) {
|
||||
return Promise.reject(_sr['fa'].required.field);
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
})
|
||||
],
|
||||
async (req, res) => {
|
||||
const errors = validationResult(req)
|
||||
if (!errors.isEmpty()) return res.status(422).json({
|
||||
validation: errors.mapped()
|
||||
});
|
||||
|
||||
try {
|
||||
|
||||
/**
|
||||
* get data from input
|
||||
*/
|
||||
var {
|
||||
title,
|
||||
summaryTitle,
|
||||
url,
|
||||
isLocal,
|
||||
index,
|
||||
siteMap,
|
||||
modelType,
|
||||
} = req.body;
|
||||
|
||||
/**
|
||||
* get id
|
||||
*/
|
||||
var sliderId = req.params.id;
|
||||
|
||||
var targetSlider = await Slider.findOne({
|
||||
_id: sliderId
|
||||
});
|
||||
|
||||
/** check slider exist or not */
|
||||
if (!targetSlider) {
|
||||
return res404(res, `اسلایدر مورد نظر پیدا نشد`);
|
||||
}
|
||||
|
||||
/** check access portal */
|
||||
if (!req.user.portals.includes(targetSlider.modelType)) {
|
||||
return res500(res, `شما اجازه آپدیت این اسلایدر را ندارید`);
|
||||
}
|
||||
|
||||
if (targetSlider.title !== title) {
|
||||
var checkDuppTitle = await Slider.findOne({
|
||||
title: title
|
||||
});
|
||||
|
||||
if (checkDuppTitle) {
|
||||
return res.status(422).json({
|
||||
validation: {
|
||||
title: {
|
||||
msg: _sr['fa'].duplicated.title
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* if we have pic upload to server
|
||||
*/
|
||||
if (req.files && req.files.cover) {
|
||||
const image = req.files.cover;
|
||||
if (!_sr.supportedImageFormats.includes(image.mimetype.split('/')[1])) {
|
||||
return res.status(422).json({
|
||||
validation: {
|
||||
cover: {
|
||||
msg: _sr['fa'].format.image
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
const imageName = `slider_${Date.now()}_${targetSlider._id}.${image.mimetype.split('/')[1]}`;
|
||||
try {
|
||||
const target = sharp(image.data)
|
||||
await target
|
||||
.resize(profileWidth, profileHeight, {
|
||||
fit: 'cover'
|
||||
})
|
||||
.jpeg({
|
||||
quality: profileQuality
|
||||
})
|
||||
.toFile(`./static/uploads/images/slider/${imageName}`);
|
||||
|
||||
/**
|
||||
* if exist old pic delete it from file
|
||||
*/
|
||||
if (targetSlider.cover) {
|
||||
var oldPic = `./static${targetSlider.cover}`;
|
||||
|
||||
if (fs.existsSync(oldPic)) {
|
||||
fs.unlink(oldPic, (err) => {
|
||||
if (err) return res500(res, err?.message);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
targetSlider.cover = imageName;
|
||||
} catch (e) {
|
||||
return res500(res, e?.message);
|
||||
}
|
||||
}
|
||||
|
||||
targetSlider.title = title.trim();
|
||||
targetSlider.summaryTitle = summaryTitle.trim();
|
||||
targetSlider.url = url.trim();
|
||||
targetSlider.isLocal = isLocal
|
||||
targetSlider.index = index;
|
||||
targetSlider.siteMap = siteMap;
|
||||
targetSlider.modelType = modelType;
|
||||
|
||||
await targetSlider.save();
|
||||
|
||||
/**
|
||||
* show result
|
||||
*/
|
||||
return res.json(targetSlider);
|
||||
|
||||
} catch (error) {
|
||||
return res500(res, error.message);
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
module.exports.deletOneSlider = [
|
||||
async (req, res) => {
|
||||
try {
|
||||
var sliderId = req.params.id;
|
||||
|
||||
var targetSlider = await Slider.findOne({
|
||||
_id: sliderId
|
||||
});
|
||||
|
||||
/** check slider exist or not */
|
||||
if (!targetSlider) {
|
||||
return res404(res, `اسلایدر مورد نظر پیدا نشد`);
|
||||
}
|
||||
|
||||
/** check access portal */
|
||||
if (!req.user.portals.includes(targetSlider.modelType)) {
|
||||
return res500(res, `شما اجازه حذف این اسلایدر را ندارید`);
|
||||
}
|
||||
|
||||
if (targetSlider.cover) {
|
||||
var oldPic = `./static${targetSlider.cover}`;
|
||||
|
||||
if (fs.existsSync(oldPic)) {
|
||||
fs.unlink(oldPic, (error) => {
|
||||
if (error) return res500(res, error?.message);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/** delete slider */
|
||||
await targetSlider.deleteOne();
|
||||
|
||||
/**
|
||||
* show result
|
||||
*/
|
||||
return res.json(targetSlider);
|
||||
|
||||
} catch (error) {
|
||||
/**
|
||||
* if we got unkown error show to client
|
||||
*/
|
||||
res500(res, error);
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
module.exports.getOneSlider = [
|
||||
async (req, res) => {
|
||||
try {
|
||||
var sliderId = req.params.id;
|
||||
|
||||
var findQuery = {
|
||||
_id: sliderId
|
||||
};
|
||||
|
||||
var slider = await Slider.findOne(findQuery);
|
||||
|
||||
if (!slider) {
|
||||
return res404(res, `اسلایدر مورد نظر پیدا نشد`);
|
||||
}
|
||||
|
||||
/** check access portal */
|
||||
if (!req.user.portals.includes(slider.modelType)) {
|
||||
return res.status(403).json({
|
||||
message: `شما اجازه دسترسی به اطلاعات این اسلایدر را ندارید`
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* show result
|
||||
*/
|
||||
return res.json(slider);
|
||||
} catch (error) {
|
||||
/**
|
||||
* if we got unkown error show to client
|
||||
*/
|
||||
res500(res, error);
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
module.exports.getAllSliderByAdmin = [
|
||||
async (req, res) => {
|
||||
try {
|
||||
|
||||
var findQuery = {};
|
||||
|
||||
if (req.user.portals.length) {
|
||||
findQuery.modelType = {
|
||||
$in: req.user.portals
|
||||
};
|
||||
}
|
||||
|
||||
/** get all slider */
|
||||
var allSlider = await Slider.find(findQuery).sort({
|
||||
_id: -1
|
||||
});
|
||||
|
||||
/** if null we have error */
|
||||
if (!allSlider) {
|
||||
return res500(res, `مشکلی در گرفتن اطلاعات پیش آمده است`);
|
||||
}
|
||||
|
||||
/** show result to client */
|
||||
return res.json(allSlider);
|
||||
} catch (error) {
|
||||
/** if we have unkown error show it */
|
||||
return res500(res, error?.message);
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
module.exports.search = [
|
||||
async (req, res) => {
|
||||
try {
|
||||
var findQuery = {};
|
||||
findQuery['$and'] = [];
|
||||
findQuery['$or'] = [];
|
||||
|
||||
if (req.user.portals.length) {
|
||||
findQuery.modelType = {
|
||||
$in: req.user.portals
|
||||
};
|
||||
}
|
||||
|
||||
var {
|
||||
term,
|
||||
portals,
|
||||
galleryStatus,
|
||||
publish,
|
||||
galleryType,
|
||||
date
|
||||
} = req.body;
|
||||
|
||||
/** search by term */
|
||||
if (term && !_.isEmpty(term)) {
|
||||
findQuery['$or'].push(
|
||||
{
|
||||
title: {
|
||||
$regex: '.*' + term + '.*'
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
/** search by galleryType */
|
||||
if (galleryType && !_.isEmpty(galleryType)) {
|
||||
findQuery['$and'].push({
|
||||
galleryType
|
||||
});
|
||||
}
|
||||
/** search by publish */
|
||||
if (!_.isUndefined(publish) && _.isBoolean(publish)) {
|
||||
findQuery['$and'].push({
|
||||
publish
|
||||
});
|
||||
}
|
||||
/** search by portals */
|
||||
if (portals && !_.isEmpty(portals)) {
|
||||
findQuery['$and'].push({
|
||||
modelType: {
|
||||
$in: portals
|
||||
}
|
||||
})
|
||||
}
|
||||
/** search by galleryStatus */
|
||||
if (!_.isUndefined(galleryStatus) && _.isBoolean(galleryStatus)) {
|
||||
findQuery['$and'].push({
|
||||
galleryStatus
|
||||
})
|
||||
}
|
||||
|
||||
/** search by date */
|
||||
if (date && !_.isEmpty(date)) {
|
||||
if(date.length === 1){
|
||||
findQuery['$and'].push({
|
||||
created_at: {
|
||||
$gte: moment(date[0]).startOf('days'),
|
||||
$lt: moment(date[0]).endOf('days')
|
||||
}
|
||||
});
|
||||
}else{
|
||||
findQuery['$and'].push({
|
||||
created_at: {
|
||||
$gte: new Date(date[0]),
|
||||
$lt: new Date(date[1])
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
_.isEmpty(findQuery['$and']) && delete findQuery['$and'];
|
||||
_.isEmpty(findQuery['$or']) && delete findQuery['$or'];
|
||||
|
||||
/** get gallery */
|
||||
var gallery = await Gallery.paginate(findQuery , {page : req.query.page , limit, populate : [{
|
||||
path : '_creator',
|
||||
select : {
|
||||
firstName: 1,
|
||||
lastName: 1,
|
||||
profilePic: 1
|
||||
}
|
||||
}],
|
||||
sort :{
|
||||
created_at: -1
|
||||
}
|
||||
});
|
||||
|
||||
/** show result */
|
||||
return res.json(gallery);
|
||||
} catch (error) {
|
||||
return res500(res ,error?.message)
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
/////////////////////////////////////////////////////////////////////// public
|
||||
module.exports.getAllSliderByUser = [
|
||||
async (req, res) => {
|
||||
try {
|
||||
var {
|
||||
portal,
|
||||
} = req.query;
|
||||
|
||||
var findQuery = {};
|
||||
|
||||
var setSort = {index : 1};
|
||||
|
||||
findQuery.modelType = !portal ? 'ostandari' : portal;
|
||||
|
||||
var getSlider = await Slider.find(findQuery).sort(setSort);
|
||||
|
||||
return res.json(getSlider);
|
||||
} catch (error) {
|
||||
return res500(res, error?.message);
|
||||
}
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user