feat: add ci cd files dont edit those files
This commit is contained in:
@@ -0,0 +1,413 @@
|
||||
const {body, validationResult} = require('express-validator');
|
||||
const mongoose = require('mongoose');
|
||||
const sharp = require('sharp');
|
||||
const {_sr} = require('../plugins/serverResponses');
|
||||
const allPortals = require('../plugins/portals');
|
||||
const {res404, res500} = require('../plugins/controllersHelperFunctions');
|
||||
const fs = require('fs');
|
||||
const moment = require('moment-jalaali');
|
||||
const axios = require('axios');
|
||||
|
||||
const HomePage = require('../models/HomePage');
|
||||
const News = require('./../models/News');
|
||||
const Gallery = require('./../models/Gallery');
|
||||
const Category = require('./../models/Category');
|
||||
const NewsFile = require('./../models/NewsFile');
|
||||
const Slider = require('./../models/Slider');
|
||||
const Links = require('./../models/Links');
|
||||
const Content = require('./../models/Content');
|
||||
const Occasion = require('./../models/Occasion');
|
||||
|
||||
/////////////////////////////////////////////////////// admin
|
||||
|
||||
module.exports.updateHomePage = [
|
||||
async (req, res) => {
|
||||
try {
|
||||
const {
|
||||
s2,
|
||||
s3,
|
||||
s4,
|
||||
s5,
|
||||
s6,
|
||||
s2Side,
|
||||
s3Side,
|
||||
s4Side,
|
||||
s5Side,
|
||||
s6Side
|
||||
} = req.body;
|
||||
|
||||
const portal = req.query.portal ? 'ostandari' : req.query.portal;
|
||||
|
||||
if (!req.user.portals.includes(portal)) {
|
||||
return res.status(403).json({message: `شما اجازه دسترسی به اطلاعات این صفحه را ندارید`});
|
||||
}
|
||||
|
||||
if (!allPortals.some(item => item.value === portal)) {
|
||||
return res.status(403).json(`پرتال ارسال شده وجود ندارد`);
|
||||
}
|
||||
|
||||
const addHome = await HomePage.findOne({modelType: portal});
|
||||
if (addHome) {
|
||||
const oldData = addHome
|
||||
oldData.s2 = s2 || null
|
||||
oldData.s3 = s3 || null
|
||||
oldData.s4 = s4 || null
|
||||
oldData.s5 = s5 || null
|
||||
oldData.s6 = s6 || null
|
||||
// side bar
|
||||
oldData.s2Side = s2Side || null
|
||||
oldData.s3Side = s3Side || null
|
||||
oldData.s4Side = s4Side || null
|
||||
oldData.s5Side = s5Side || null
|
||||
oldData.s6Side = s6Side || null
|
||||
await oldData.save();
|
||||
|
||||
return res.json({message: _sr['fa'].response.success_save})
|
||||
} else {
|
||||
const data = {
|
||||
s2: s2 || null,
|
||||
s3: s3 || null,
|
||||
s4: s4 || null,
|
||||
s5: s5 || null,
|
||||
s6: s6 || null,
|
||||
s2Side: s2Side || null,
|
||||
s3Side: s3Side || null,
|
||||
s4Side: s4Side || null,
|
||||
s5Side: s5Side || null,
|
||||
s6Side: s6Side || null,
|
||||
modelType: portal
|
||||
}
|
||||
|
||||
const addHome = await HomePage.create(data);
|
||||
|
||||
if (!addHome) return res500(res, `مشکلی در اجرای درخواست شما به وجود آمده است`);
|
||||
|
||||
return res.json({message: _sr['fa'].response.success_save})
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
return res500(res, 'مشکلی در گرفتن اطلاعات پیش آمده است');
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
module.exports.getHomePage = [
|
||||
async (req, res) => {
|
||||
try {
|
||||
const portal = req?.query?.portal ? req.query.portal : 'ostandari';
|
||||
|
||||
if (!req.user.portals.includes(portal)) {
|
||||
return res.status(403).json(`شما اجازه دسترسی به اطلاعات این صفحه را ندارید`);
|
||||
}
|
||||
|
||||
const getHome = await HomePage.find({modelType: portal});
|
||||
if (getHome.length) return res.json(getHome[0])
|
||||
else return res.json({
|
||||
s2: '',
|
||||
s3: '',
|
||||
s4: '',
|
||||
s5: [],
|
||||
s6: '',
|
||||
s2Side: '',
|
||||
s3Side: '',
|
||||
s4Side: '',
|
||||
s5Side: '',
|
||||
s6Side: ''
|
||||
})
|
||||
} catch (e) {
|
||||
return res500(res, 'مشکلی در گرفتن اطلاعات پیش آمده است');
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
module.exports.changeShowInHome = [
|
||||
[
|
||||
body('id')
|
||||
.notEmpty().withMessage(_sr['fa'].required.title),
|
||||
|
||||
body('modelName')
|
||||
.custom((value, {req}) => {
|
||||
const models = ['news', 'newsFile', 'gallery']
|
||||
if (!models.includes(value)) {
|
||||
return Promise.reject(_sr['fa'].required.field);
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
})
|
||||
|
||||
],
|
||||
async (req, res) => {
|
||||
const errors = validationResult(req)
|
||||
if (!errors.isEmpty()) return res.status(422).json({
|
||||
validation: errors.mapped()
|
||||
});
|
||||
try {
|
||||
const {id, modelName} = req.body;
|
||||
|
||||
let Model;
|
||||
|
||||
switch (modelName) {
|
||||
case 'news':
|
||||
Model = News;
|
||||
break;
|
||||
case 'newsFile' :
|
||||
Model = NewsFile;
|
||||
break;
|
||||
case 'gallery':
|
||||
Model = Gallery;
|
||||
break;
|
||||
}
|
||||
|
||||
const targetModel = await Model.findById(id)
|
||||
|
||||
if (!targetModel) return res404(res, `اطلاعات مورد یافت نشد`);
|
||||
|
||||
targetModel.showInHome = !targetModel.showInHome;
|
||||
|
||||
await targetModel.save();
|
||||
|
||||
return res.json(targetModel);
|
||||
} catch (e) {
|
||||
return res500(res, 'مشکلی در گرفتن اطلاعات پیش آمده است');
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
module.exports.getAllShowInHomeFalse = [
|
||||
async (req, res) => {
|
||||
try {
|
||||
const portal = req?.query?.portal ? req.query.portal : 'ostandari';
|
||||
|
||||
const requests = [
|
||||
News.find({modelType: portal, showInHome: false}),
|
||||
NewsFile.find({modelType: portal, showInHome: false}),
|
||||
Gallery.find({modelType: portal, showInHome: false}),
|
||||
]
|
||||
|
||||
let fetch = await Promise.all(requests);
|
||||
|
||||
const [news, newsFile, media] = fetch;
|
||||
|
||||
return res.json({
|
||||
news,
|
||||
newsFile,
|
||||
media
|
||||
})
|
||||
} catch (e) {
|
||||
return res500(res, 'مشکلی در گرفتن اطلاعات پیش آمده است');
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
/////////////////////////////////////////////////////// public
|
||||
module.exports.getHomeByUser = [
|
||||
async (req, res) => {
|
||||
try {
|
||||
const homeSetting = await HomePage.find();
|
||||
|
||||
const data = {
|
||||
occasion: [],
|
||||
s1: [],
|
||||
s2: [],
|
||||
s3: [],
|
||||
s4: [],
|
||||
s5: [],
|
||||
s6: [],
|
||||
s2Side: [],
|
||||
s3Side: [],
|
||||
s4Side: [],
|
||||
s5Side: [],
|
||||
s6Side: [],
|
||||
};
|
||||
|
||||
const portal = req?.query?.portal ? req.query.portal : 'ostandari'
|
||||
|
||||
const settings = homeSetting[0]
|
||||
const query = {publish: true, showInHome: true, modelType: portal}
|
||||
|
||||
|
||||
const request = [
|
||||
// Occasion
|
||||
Occasion.find({
|
||||
publish: true,
|
||||
status: true,
|
||||
startDate: {$lte: new Date()},
|
||||
endDate: {$gte: new Date()}
|
||||
}),
|
||||
// s1
|
||||
Slider.find({modelType: portal}),
|
||||
// s2
|
||||
News.find(settings?.s2 ? {
|
||||
...query,
|
||||
catId: settings?.s2,
|
||||
newsStatus: true
|
||||
} : {...query, newsStatus: true}).populate('catId', 'title').limit(8).sort({customDate: -1}),
|
||||
// s3
|
||||
NewsFile.find(settings?.s3 ? {
|
||||
...query,
|
||||
catId: settings?.s3
|
||||
} : query).populate('catId', 'title').limit(4).sort({_id: -1}),
|
||||
// s6
|
||||
News.find(settings?.s6 ? {
|
||||
...query,
|
||||
catId: settings?.s6,
|
||||
newsStatus: true
|
||||
} : {...query, newsStatus: true}).limit(8).sort({userViews: -1}),
|
||||
// s1Side
|
||||
Content.find({param: 'manager'}),
|
||||
// s2Side
|
||||
Gallery.find(settings?.s2Side ? {
|
||||
...query,
|
||||
catId: settings?.s2Side,
|
||||
galleryType: 'image',
|
||||
galleryStatus: true
|
||||
} : {...query, galleryType: 'image', galleryStatus: true}).populate('catId', 'title').limit(4).sort({customDate: -1}),
|
||||
// s3Side
|
||||
Gallery.find(settings?.s3Side ? {
|
||||
...query,
|
||||
catId: settings?.s3Side,
|
||||
galleryType: 'video',
|
||||
galleryStatus: true
|
||||
} : {...query, galleryType: 'video', galleryStatus: true}).populate('catId', 'title').limit(4).sort({customDate: -1}),
|
||||
// s4Side
|
||||
Gallery.find(settings?.s4Side ? {
|
||||
...query,
|
||||
catId: settings?.s4Side,
|
||||
galleryType: 'graphic',
|
||||
galleryStatus: true
|
||||
} : {...query, galleryType: 'graphic', galleryStatus: true}).populate('catId', 'title').limit(4).sort({customDate: -1}),
|
||||
// s5Side
|
||||
News.find(settings?.s5Side ? {
|
||||
...query,
|
||||
catId: settings?.s5Side,
|
||||
special: true,
|
||||
newsStatus: true
|
||||
} : {...query, newsStatus: true, special: true}).limit(4).sort({customDate: -1}),
|
||||
// s6Side
|
||||
News.find(settings?.s6Side ? {
|
||||
...query,
|
||||
catId: settings?.s6Side,
|
||||
newsStatus: true
|
||||
} : {...query, newsStatus: true}).limit(6).sort({customDate: -1}),
|
||||
// s7Side
|
||||
Links.find({modelType: portal, showInHome: true}),
|
||||
// notifications-side
|
||||
News.find(settings?.s6Side ? {
|
||||
...query,
|
||||
catId: settings?.s5Side,
|
||||
newsStatus: true,
|
||||
notifications: true
|
||||
} : {...query, newsStatus: true, notifications: true}).limit(6).sort({customDate: -1}),
|
||||
]
|
||||
|
||||
|
||||
const fetch = await Promise.all(request)
|
||||
|
||||
const [occasion, s1, s2, s3, s6, s1Side, s2Side, s3Side, s4Side, s5Side, s6Side, s7Side, notificationsSide] = fetch;
|
||||
|
||||
data.occasion = occasion
|
||||
data.s1 = s1
|
||||
data.s2 = s2
|
||||
data.s3 = s3
|
||||
data.s6 = s6
|
||||
data.s1Side = s1Side
|
||||
data.s2Side = s2Side
|
||||
data.s3Side = s3Side
|
||||
data.s4Side = s4Side
|
||||
data.s5Side = s5Side
|
||||
data.s6Side = s6Side
|
||||
data.s7Side = s7Side
|
||||
data.notificationsSide = notificationsSide
|
||||
|
||||
////////////////// computed main news
|
||||
const nameTag = await Category.findById(settings?.s4);
|
||||
const s4Categories = await Category.find(settings?.s4 ? {parent: settings?.s4} : {})
|
||||
|
||||
const s4Obj = {};
|
||||
|
||||
s4Obj.nameTag = nameTag ? nameTag.title : '';
|
||||
|
||||
let s4News = [];
|
||||
if (settings?.s4) {
|
||||
for await (const cat of s4Categories) {
|
||||
const getNew = await News.find({...query, catId: cat._id , newsStatus : true}).sort({customDate: -1})
|
||||
if (getNew.length) s4News.push(getNew[0])
|
||||
}
|
||||
if (s4Categories.length !== 4) {
|
||||
const getNews = await News.find({...query, catId: settings?.s4 , newsStatus : true}).populate('catId', 'title').limit(4 - s4News.length).sort({customDate: -1})
|
||||
for (const item of getNews) {
|
||||
s4News.push(item);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
s4News = await News.find({...query,newsStatus : true}).populate('catId', 'title').limit(4).sort({customDate: -1});
|
||||
}
|
||||
|
||||
s4Obj.news = s4News
|
||||
data.s4 = s4Obj;
|
||||
|
||||
//// s5
|
||||
if (settings?.s5?.length) {
|
||||
const s5News = []
|
||||
for await (const id of settings?.s5) {
|
||||
const item = {}
|
||||
const nameTag = await Category.findById(id)
|
||||
item.nameTag = nameTag ? nameTag.title : '';
|
||||
item.news = await News.find({...query, rootParent: id , newsStatus : true}).limit(10).sort({_id: -1})
|
||||
s5News.push(item)
|
||||
}
|
||||
data.s5 = s5News
|
||||
}
|
||||
|
||||
return res.json(data);
|
||||
} catch (e) {
|
||||
return res500(res, 'مشکلی در گرفتن اطلاعات پیش آمده است');
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
module.exports.search = [
|
||||
async (req, res) => {
|
||||
const {portal, terms} = req.query;
|
||||
|
||||
try {
|
||||
const requests = [
|
||||
News.find({
|
||||
newsStatus: true, publish: true, $or: [
|
||||
{title: {$regex: terms, $options: 'i'}},
|
||||
{summaryTitle: {$regex: terms, $options: 'i'}},
|
||||
{keywords: {$in: terms}}
|
||||
]
|
||||
}),
|
||||
Gallery.find({
|
||||
galleryStatus: true, publish: true, $or: [
|
||||
{title: {$regex: terms, $options: 'i'}},
|
||||
{summaryTitle: {$regex: terms, $options: 'i'}},
|
||||
{keywords: {$in: terms}}
|
||||
]
|
||||
}),
|
||||
Category.find({
|
||||
$or: [
|
||||
{title: {$regex: terms, $options: 'i'}},
|
||||
{pageContent: {$regex: terms, $options: 'i'}}
|
||||
]
|
||||
})
|
||||
]
|
||||
|
||||
const getData = await Promise.all(requests);
|
||||
|
||||
let [news, gallery, category] = getData;
|
||||
|
||||
return res.json({
|
||||
news,
|
||||
media: gallery,
|
||||
pages: category
|
||||
});
|
||||
|
||||
} catch (e) {
|
||||
return res500(res, 'مشکلی در گرفتن اطلاعات پیش آمده است');
|
||||
}
|
||||
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user