mirror of
https://github.com/sergeyyarkov/digital-store.git
synced 2026-10-11 10:19:15 +03:00
api refactor
This commit is contained in:
parent
e634650119
commit
e40985b168
@ -1,18 +1,68 @@
|
||||
const fs = require('fs');
|
||||
|
||||
module.exports = function(server, db) {
|
||||
server.get('/api/v1/items', async (req, res) => {
|
||||
const items = await db.collection('items').find({}).toArray();
|
||||
items.length > 0 ? res.send(items) : res.send({error: 'Товаров в магазине пока что нет.'});
|
||||
server.get('/api/items', async (req, res) => {
|
||||
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/v1/items/:category', async (req, res) => {
|
||||
const items = await db.collection('items').find({category: req.params.category}).toArray();
|
||||
items.length > 0 ? res.send(items) : res.send({error: 'Такой категории не существует или там нет товаров.'});
|
||||
|
||||
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/v1/categories', async (req, res) => {
|
||||
|
||||
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/v1/categories/:category', async (req, res) => {
|
||||
|
||||
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);
|
||||
});
|
||||
}
|
||||
@ -1,97 +1,4 @@
|
||||
const ObjectID = require('mongodb').ObjectID;
|
||||
const fs = require('fs');
|
||||
|
||||
// API
|
||||
function getItemsRoute(req, res, dbo) {
|
||||
if (req.query.token === 'yYNfW8ynVO18L1TW5qIkILM1WtWgrVZz') {
|
||||
if (req.query.items === 'all' && !req.query.category && !req.query.sorting) {
|
||||
dbo.collection('items').find().toArray((err, result) => {
|
||||
result.length > 0
|
||||
? res.send(result)
|
||||
: res.send({error: 'Товаров в магазине пока что нет.'});
|
||||
});
|
||||
} else if (req.query.items === 'all' && req.query.sorting && !req.query.category) {
|
||||
if (req.query.sorting === 'ascending') {
|
||||
dbo.collection('items').find().sort({price: 1}).toArray((err, result) => {
|
||||
result.length > 0
|
||||
? res.send(result)
|
||||
: res.send({error: 'Такой категории не существует или там нет товаров.'});
|
||||
});
|
||||
} else if (req.query.sorting === 'descending') {
|
||||
dbo.collection('items').find().sort({price: -1}).toArray((err, result) => {
|
||||
result.length > 0
|
||||
? res.send(result)
|
||||
: res.send({error: 'Такой категории не существует или там нет товаров.'});
|
||||
});
|
||||
} else if (req.query.sorting === 'newer') {
|
||||
dbo.collection('items').find().sort({date: -1}).toArray((err, result) => {
|
||||
result.length > 0
|
||||
? res.send(result)
|
||||
: res.send({error: 'Такой категории не существует или там нет товаров.'});
|
||||
});
|
||||
} else if (req.query.sorting === 'older') {
|
||||
dbo.collection('items').find().sort({date: 1}).toArray((err, result) => {
|
||||
result.length > 0
|
||||
? res.send(result)
|
||||
: res.send({error: 'Такой категории не существует или там нет товаров.'});
|
||||
});
|
||||
} else {
|
||||
res.send('Введите параметр по убыванию или возрастанию.');
|
||||
}
|
||||
} else if (req.query.items === 'all' && req.query.category && !req.query.sorting) {
|
||||
dbo.collection('items').find({category: req.query.category}).toArray((err, result) => {
|
||||
result.length > 0
|
||||
? res.send(result)
|
||||
: res.send({error: 'Такой категории не существует или там нет товаров.'});
|
||||
});
|
||||
} else if (req.query.items === 'all' && req.query.category && req.query.sorting) {
|
||||
if (req.query.sorting === 'ascending') {
|
||||
dbo.collection('items').find({category: req.query.category}).sort({price: 1}).toArray((err, result) => {
|
||||
result.length > 0
|
||||
? res.send(result)
|
||||
: res.send({error: 'Такой категории не существует или там нет товаров.'});
|
||||
});
|
||||
} else if (req.query.sorting === 'descending') {
|
||||
dbo.collection('items').find({category: req.query.category}).sort({price: -1}).toArray((err, result) => {
|
||||
result.length > 0
|
||||
? res.send(result)
|
||||
: res.send({error: 'Такой категории не существует или там нет товаров.'});
|
||||
});
|
||||
} else if (req.query.sorting === 'newer') {
|
||||
dbo.collection('items').find({category: req.query.category}).sort({date: -1}).toArray((err, result) => {
|
||||
result.length > 0
|
||||
? res.send(result)
|
||||
: res.send({error: 'Такой категории не существует или там нет товаров.'});
|
||||
});
|
||||
} else if (req.query.sorting === 'older') {
|
||||
dbo.collection('items').find({category: req.query.category}).sort({date: 1}).toArray((err, result) => {
|
||||
result.length > 0
|
||||
? res.send(result)
|
||||
: res.send({error: 'Такой категории не существует или там нет товаров.'});
|
||||
});
|
||||
} else {
|
||||
res.send('Введите параметр по убыванию или возрастанию.');
|
||||
}
|
||||
} else if (req.query.categories === 'all') {
|
||||
dbo.collection('categories').find().toArray((err, result) => {
|
||||
result.length > 0
|
||||
? res.send(result)
|
||||
: res.send({error: 'На сайте нету категорий'});
|
||||
});
|
||||
} else if (req.query.icons === 'all') {
|
||||
const icons = fs.readdirSync('dist/public/img/service-icons');
|
||||
res.send(icons);
|
||||
} else if (req.query.category) {
|
||||
dbo.collection('categories').find({title: req.query.category}).toArray((err, result) => {
|
||||
res.send(result);
|
||||
});
|
||||
} else {
|
||||
res.send('Запрос неверный.');
|
||||
}
|
||||
} else {
|
||||
res.send('Неверный токен.');
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = function (server, db) {
|
||||
server.get('/', (req, res) => {
|
||||
@ -186,5 +93,4 @@ module.exports = function (server, db) {
|
||||
res.render('main/404');
|
||||
});
|
||||
});
|
||||
server.get('/api', (req, res) => getItemsRoute(req, res, db));
|
||||
}
|
||||
|
||||
@ -14,11 +14,9 @@ const session = require('express-session');
|
||||
const methodOverride = require('method-override');
|
||||
const multer = require('multer');
|
||||
|
||||
MongoClient.connect(db_config.url, {useNewUrlParser: true, useUnifiedTopology: true}, (err, client) => {
|
||||
if (err) return console.log(err)
|
||||
MongoClient.connect(db_config.url, {useNewUrlParser: true, useUnifiedTopology: true})
|
||||
.then((client) => {
|
||||
const db = client.db(db_config.name);
|
||||
|
||||
// Как сохраняем иконки и куда
|
||||
const storage = multer.diskStorage({
|
||||
destination: 'dist/public/img/service-icons',
|
||||
filename: function(req, file, cb) {
|
||||
@ -31,11 +29,11 @@ MongoClient.connect(db_config.url, {useNewUrlParser: true, useUnifiedTopology: t
|
||||
server.use(express.static(path.join(__dirname, '../dist/public')));
|
||||
server.use(multer({storage: storage}).single('img'));
|
||||
server.use(express.urlencoded({ extended: false }));
|
||||
server.use(express.json());
|
||||
server.use(flash());
|
||||
server.use(session({secret: process.env.SESSION_SECRET,resave: false,saveUninitialized: false}));
|
||||
server.use(passport.initialize());
|
||||
server.use(passport.session());
|
||||
///server.use(express.json());
|
||||
server.use(methodOverride('_method'));
|
||||
server.set('view engine', 'pug');
|
||||
server.set('views', path.join(__dirname, '../dist/views'));
|
||||
@ -44,10 +42,10 @@ MongoClient.connect(db_config.url, {useNewUrlParser: true, useUnifiedTopology: t
|
||||
require('./routes/main')(server, db); // маршруты сайта
|
||||
require('./routes/admin')(server, db); // маршрут с формой авторизации админа
|
||||
require('./routes/control-panel')(server, db); // маршруты с панелью управления
|
||||
require('./routes/api')(server, db); // rest api
|
||||
require('./routes/api')(server, db); // отдача данных клиенту
|
||||
|
||||
// 404 Redirect
|
||||
server.use((req, res) => res.status(404).render('main/404'));
|
||||
server.listen(3000, () => console.log('Listen port 3000...'));
|
||||
})
|
||||
|
||||
.catch((error) => {console.log(error)});
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
const axios = require('axios');
|
||||
const API_TOKEN = 'yYNfW8ynVO18L1TW5qIkILM1WtWgrVZz';
|
||||
|
||||
class ApiService {
|
||||
constructor(baseUrl) {
|
||||
@ -8,7 +7,7 @@ class ApiService {
|
||||
|
||||
async getCategory(category) {
|
||||
try {
|
||||
const request = `${this.url}api?token=${API_TOKEN}&category=${encodeURIComponent(category)}`;
|
||||
const request = `${this.url}/api/category/${encodeURIComponent(category)}`;
|
||||
return useRequest(request);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
@ -17,7 +16,7 @@ class ApiService {
|
||||
|
||||
async getCategories() {
|
||||
try {
|
||||
const request = `${this.url}api?token=${API_TOKEN}&categories=all`;
|
||||
const request = `${this.url}/api/categories`;
|
||||
return useRequest(request);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
@ -27,10 +26,10 @@ class ApiService {
|
||||
async getItems(sorting) {
|
||||
try {
|
||||
if (sorting) {
|
||||
const request = `${this.url}api?token=${API_TOKEN}&items=all&sorting=${sorting}`;
|
||||
const request = `${this.url}/api/items?sorting=${sorting}`;
|
||||
return useRequest(request);
|
||||
} else {
|
||||
const request = `${this.url}api?token=${API_TOKEN}&items=all`;
|
||||
const request = `${this.url}/api/items`;
|
||||
return useRequest(request);
|
||||
}
|
||||
|
||||
@ -42,10 +41,10 @@ class ApiService {
|
||||
async getItemsOne(category, sorting) {
|
||||
try {
|
||||
if (sorting) {
|
||||
const request = `${this.url}api?token=${API_TOKEN}&items=all&category=${encodeURIComponent(category.toLowerCase())}&sorting=${sorting}`;
|
||||
const request = `${this.url}/api/items/${encodeURIComponent(category.toLowerCase())}?sorting=${sorting}`;
|
||||
return useRequest(request);
|
||||
} else {
|
||||
const request = `${this.url}api?token=${API_TOKEN}&items=all&category=${encodeURIComponent(category.toLowerCase())}`;
|
||||
const request = `${this.url}/api/items/${encodeURIComponent(category.toLowerCase())}`;
|
||||
return useRequest(request);
|
||||
}
|
||||
} catch (err) {
|
||||
@ -55,7 +54,7 @@ class ApiService {
|
||||
|
||||
async getIcons() {
|
||||
try {
|
||||
const request = `${this.url}api?token=${API_TOKEN}&icons=all`;
|
||||
const request = `${this.url}/api/icons`;
|
||||
return useRequest(request);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
@ -68,4 +67,4 @@ async function useRequest(request) {
|
||||
return await JSON.parse(response.request.response);
|
||||
}
|
||||
|
||||
export const apiService = new ApiService('http://localhost:3000/', API_TOKEN);
|
||||
export const apiService = new ApiService('http://localhost:3000');
|
||||
@ -1,5 +1,4 @@
|
||||
const axios = require('axios');
|
||||
const API_TOKEN = 'yYNfW8ynVO18L1TW5qIkILM1WtWgrVZz';
|
||||
|
||||
class ApiService {
|
||||
constructor(baseUrl) {
|
||||
@ -8,7 +7,7 @@ class ApiService {
|
||||
|
||||
async getCategory(category) {
|
||||
try {
|
||||
const request = `${this.url}api?token=${API_TOKEN}&category=${encodeURIComponent(category)}`;
|
||||
const request = `${this.url}/api/category/${encodeURIComponent(category)}`;
|
||||
return useRequest(request);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
@ -17,7 +16,7 @@ class ApiService {
|
||||
|
||||
async getCategories() {
|
||||
try {
|
||||
const request = `${this.url}api?token=${API_TOKEN}&categories=all`;
|
||||
const request = `${this.url}/api/categories`;
|
||||
return useRequest(request);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
@ -27,10 +26,10 @@ class ApiService {
|
||||
async getItems(sorting) {
|
||||
try {
|
||||
if (sorting) {
|
||||
const request = `${this.url}api?token=${API_TOKEN}&items=all&sorting=${sorting}`;
|
||||
const request = `${this.url}/api/items?sorting=${sorting}`;
|
||||
return useRequest(request);
|
||||
} else {
|
||||
const request = `${this.url}api?token=${API_TOKEN}&items=all`;
|
||||
const request = `${this.url}/api/items`;
|
||||
return useRequest(request);
|
||||
}
|
||||
|
||||
@ -42,10 +41,10 @@ class ApiService {
|
||||
async getItemsOne(category, sorting) {
|
||||
try {
|
||||
if (sorting) {
|
||||
const request = `${this.url}api?token=${API_TOKEN}&items=all&category=${encodeURIComponent(category.toLowerCase())}&sorting=${sorting}`;
|
||||
const request = `${this.url}/api/items/${encodeURIComponent(category.toLowerCase())}?sorting=${sorting}`;
|
||||
return useRequest(request);
|
||||
} else {
|
||||
const request = `${this.url}api?token=${API_TOKEN}&items=all&category=${encodeURIComponent(category.toLowerCase())}`;
|
||||
const request = `${this.url}/api/items/${encodeURIComponent(category.toLowerCase())}`;
|
||||
return useRequest(request);
|
||||
}
|
||||
} catch (err) {
|
||||
@ -59,4 +58,4 @@ async function useRequest(request) {
|
||||
return await JSON.parse(response.request.response);
|
||||
}
|
||||
|
||||
export const apiService = new ApiService('http://localhost:3000/', API_TOKEN);
|
||||
export const apiService = new ApiService('http://localhost:3000');
|
||||
Loading…
x
Reference in New Issue
Block a user