mirror of
https://github.com/sergeyyarkov/digital-store.git
synced 2026-10-11 10:19:15 +03:00
171 lines
6.3 KiB
JavaScript
171 lines
6.3 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, async (req, res) => {
|
|
try {
|
|
const items = await db.collection('items').find({}).toArray();
|
|
const count = items.length;
|
|
res.render('admin/items', {
|
|
name: req.user.name,
|
|
email: req.user.email,
|
|
title: 'Digital-Store | Товары',
|
|
host: req.headers.host,
|
|
pageName: ['Товары', 'items'],
|
|
count: count / 2
|
|
});
|
|
} 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');
|
|
}
|
|
});
|
|
|
|
// товары
|
|
server.post('/control-panel/items/update', checkAuthenticated, (req, res) => {
|
|
try {
|
|
const data = {
|
|
id: req.body.id,
|
|
title: req.body.title,
|
|
price: parseFloat(req.body.price),
|
|
description: req.body.description,
|
|
category: JSON.parse(req.body.category)
|
|
}
|
|
db.collection('items').updateOne({"_id": ObjectID(data.id)}, {$set: {title: data.title, price: data.price, description: data.description, category: data.category.title}});
|
|
res.redirect('/control-panel/items');
|
|
} catch (error) {
|
|
console.log(error);
|
|
res.render('main/404');
|
|
}
|
|
});
|
|
} |