digital-store/config/routes/control-panel.js

147 lines
5.4 KiB
JavaScript

const ObjectID = require('mongodb').ObjectID;
const fs = require('fs');
function checkAuthenticated(req, res, next) {
if (req.isAuthenticated()) return next();
res.redirect('/admin');
}
module.exports = function(server, db) {
server.get('/control-panel', checkAuthenticated, (req, res) => {
try {
res.render('admin/control-panel', {
name: req.user.name,
email: req.user.email,
title: 'Digital-Store | Панель управления сайтом',
host: req.headers.host,
pageName: ['Главная', 'main'],
});
} catch (error) {
res.render('main/404');
}
});
server.get('/control-panel/items', checkAuthenticated, (req, res) => {
try {
res.render('admin/items', {
name: req.user.name,
email: req.user.email,
title: 'Digital-Store | Товары',
host: req.headers.host,
pageName: ['Товары', 'items'],
});
} catch (error) {
res.render('main/404');
}
});
server.get('/control-panel/categories', checkAuthenticated, async (req, res) => {
try {
const categories = await db.collection('categories').find({}).toArray();
res.render('admin/categories', {
name: req.user.name,
email: req.user.email,
title: 'Digital-Store | Категории',
host: req.headers.host,
pageName: ['Категории', 'categories'],
categoriesCount: categories.length
});
} catch (error) {
res.render('main/404');
}
});
server.get('/control-panel/content', checkAuthenticated, (req, res) => {
try {
res.render('admin/content', {
name: req.user.name,
email: req.user.email,
title: 'Digital-Store | Контент',
host: req.headers.host,
pageName: ['Контент', 'content'],
});
} catch (error) {
res.render('main/404');
}
});
server.get('/control-panel/administrators', checkAuthenticated, (req, res) => {
try {
res.render('admin/administrators', {
name: req.user.name,
email: req.user.email,
title: 'Digital-Store | Администраторы',
host: req.headers.host,
pageName: ['Администраторы', 'administrators'],
});
} catch (error) {
res.render('main/404');
}
});
server.get('/control-panel/database', checkAuthenticated, (req, res) => {
try {
res.render('admin/database', {
name: req.user.name,
email: req.user.email,
title: 'Digital-Store | Настройка Базы Данных',
host: req.headers.host,
pageName: ['База данных', 'database'],
});
} catch (error) {
res.render('main/404');
}
});
server.post('/control-panel/categories/create', checkAuthenticated, (req, res) => {
try {
const data = {
title: req.body.title.toLowerCase().trim(),
img: req.body.img,
type: req.body.type,
format: req.body.format
}
db.collection('categories').insertOne(data);
res.redirect('/control-panel/categories');
} catch {
res.render('main/404');
}
});
server.post('/control-panel/categories/delete', checkAuthenticated, (req, res) => {
try {
const data = JSON.parse(req.body.category);
db.collection('categories').deleteOne({"_id": ObjectID(data.id)});
res.redirect('/control-panel/categories');
} catch (error) {
res.render('main/404');
}
});
server.post('/control-panel/categories/update', checkAuthenticated, (req, res) => {
try {
const data = {
id: req.body.id,
title: req.body.title.toLowerCase().trim(),
originalTitle: req.body.originalTitle.toLowerCase().trim(),
img: req.body.img,
type: req.body.type,
format: req.body.format
}
db.collection('categories').updateOne({"_id": ObjectID(data.id)}, {$set: {title: data.title, img: data.img, type: data.type, format: data.format}});
db.collection('items').updateMany({"category": data.originalTitle}, {$set: {category: data.title}});
res.redirect('/control-panel/categories');
} catch (error) {
res.render('main/404');
}
});
server.post('/control-panel/categories/addicon', checkAuthenticated, (req, res) => {
try {
res.redirect('/control-panel/categories');
} catch (error) {
res.render('main/404');
}
});
server.post('/control-panel/categories/dellicon', checkAuthenticated, (req, res) => {
const path = `./dist/public/img/service-icons/${req.body.img}`
try {
fs.unlinkSync(path);
res.redirect('/control-panel/categories');
} catch (error) {
res.render('main/404');
}
});
}