mirror of
https://github.com/sergeyyarkov/digital-store.git
synced 2026-10-11 18:29:11 +03:00
99 lines
3.9 KiB
JavaScript
99 lines
3.9 KiB
JavaScript
const fs = require('fs');
|
|
|
|
function checkAuthenticated(req, res, next) {
|
|
if (req.isAuthenticated()) return next();
|
|
res.redirect('/admin');
|
|
}
|
|
|
|
module.exports = function(server, db) {
|
|
server.get('/api/items', async (req, res) => {
|
|
if (req.query.q) {
|
|
const items = await db.collection('items').find({title: {$regex: req.query.q, $options: "i"}}, {limit: 5}).toArray();
|
|
res.json(items);
|
|
} else {
|
|
const items = await db.collection('items').find({}).toArray(),
|
|
sortBy = req.query.sorting;
|
|
|
|
if (items.length > 0) {
|
|
switch (sortBy) {
|
|
case 'ascending':
|
|
res.json(items.sort((a, b) => a.price - b.price));
|
|
break;
|
|
case 'descending':
|
|
res.json(items.sort((a, b) => b.price - a.price));
|
|
break;
|
|
case 'newer':
|
|
res.json(items.sort((a, b) => b.date - a.date));
|
|
break;
|
|
case 'older':
|
|
res.json(items.sort((a, b) => a.date - b.date));
|
|
break;
|
|
default:
|
|
res.json(items);
|
|
break;
|
|
}
|
|
} else res.send({error: 'Товаров в магазине пока что нет.'});
|
|
}
|
|
|
|
});
|
|
|
|
server.get('/api/items/page/:page', async (req, res) => {
|
|
try {
|
|
const page = parseInt(req.params.page),
|
|
limit = 5,
|
|
items = await db.collection('items').find({}, {skip: limit * (page - 1), limit}).toArray();
|
|
items.length > 0 && !isNaN(page) ? res.json(items) : res.json({error: 'Такой страницы не существует.'});
|
|
} catch (error) {
|
|
res.render('main/404');
|
|
}
|
|
});
|
|
|
|
server.get('/api/items/data', checkAuthenticated, async (req, res) => {
|
|
try {
|
|
const data = await db.collection('info').find({}).toArray();
|
|
res.json(data);
|
|
} catch (error) {
|
|
res.render('main/404');
|
|
}
|
|
});
|
|
|
|
server.get('/api/items/:category', async (req, res) => {
|
|
const items = await db.collection('items').find({category: req.params.category}).toArray(),
|
|
sortBy = req.query.sorting;
|
|
|
|
if (items.length > 0) {
|
|
switch (sortBy) {
|
|
case 'ascending':
|
|
res.json(items.sort((a, b) => a.price - b.price));
|
|
break;
|
|
case 'descending':
|
|
res.json(items.sort((a, b) => b.price - a.price));
|
|
break;
|
|
case 'newer':
|
|
res.json(items.sort((a, b) => b.date - a.date));
|
|
break;
|
|
case 'older':
|
|
res.json(items.sort((a, b) => a.date - b.date));
|
|
break;
|
|
default:
|
|
res.json(items);
|
|
break;
|
|
}
|
|
} else res.send({error: 'Товаров в магазине пока что нет.'});
|
|
});
|
|
|
|
server.get('/api/categories', async (req, res) => {
|
|
const categories = await db.collection('categories').find({}).toArray();
|
|
categories.length > 0 ? res.send(categories) : res.send({error: 'Категорий в магазине пока что нет.'})
|
|
});
|
|
|
|
server.get('/api/category/:category', async (req, res) => {
|
|
const category = await db.collection('categories').find({title: req.params.category}).toArray();
|
|
category.length > 0 ? res.send(category) : res.send({error: 'Такой категории не существует.'});
|
|
});
|
|
|
|
server.get('/api/icons', (req, res) => {
|
|
const icons = fs.readdirSync('dist/public/img/service-icons');
|
|
res.json(icons);
|
|
});
|
|
} |