food
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const axios = require('axios');
|
||||
const logger = require('../../logger');
|
||||
const multer = require('multer');
|
||||
const FormData = require('form-data');
|
||||
const fs = require('fs');
|
||||
|
||||
const BACKEND_URL = process.env.BACKEND_URL || 'http://localhost:3001';
|
||||
const upload = multer({ dest: 'uploads/tmp/' });
|
||||
|
||||
// ================= ЗАКАЗЫ =================
|
||||
router.get('/orders', async (req, res) => {
|
||||
try {
|
||||
const { status, date } = req.query;
|
||||
const { data } = await axios.get(`${BACKEND_URL}/api/food/orders`, {
|
||||
params: { status, date }, timeout: 5000,
|
||||
});
|
||||
res.json(data);
|
||||
} catch (e) {
|
||||
logger.error('[admin/food/orders GET]', e.message);
|
||||
res.status(500).json({ error: 'Не удалось получить заказы' });
|
||||
}
|
||||
});
|
||||
|
||||
router.patch('/orders/:id/status', async (req, res) => {
|
||||
try {
|
||||
const { data } = await axios.patch(`${BACKEND_URL}/api/food/orders/${req.params.id}/status`, req.body, { timeout: 5000 });
|
||||
res.json(data);
|
||||
} catch (e) {
|
||||
logger.error('[admin/food/orders PATCH]', e.message);
|
||||
res.status(500).json({ error: 'Ошибка обновления статуса' });
|
||||
}
|
||||
});
|
||||
|
||||
// ================= МЕНЮ =================
|
||||
router.get('/items', async (req, res) => {
|
||||
try {
|
||||
const { data } = await axios.get(`${BACKEND_URL}/api/food/menu`);
|
||||
res.json(data);
|
||||
} catch (e) {
|
||||
res.status(500).json({ error: 'Не удалось получить меню' });
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/items', upload.single('image'), async (req, res) => {
|
||||
try {
|
||||
const formData = new FormData();
|
||||
|
||||
// Передаем текстовые поля
|
||||
Object.keys(req.body).forEach(key => {
|
||||
formData.append(key, req.body[key]);
|
||||
});
|
||||
|
||||
// Передаем файл, если он есть
|
||||
if (req.file) {
|
||||
formData.append('image', fs.createReadStream(req.file.path));
|
||||
}
|
||||
|
||||
const { data } = await axios.post(`${BACKEND_URL}/api/food/items`, formData, {
|
||||
headers: formData.getHeaders(),
|
||||
maxContentLength: Infinity,
|
||||
maxBodyLength: Infinity
|
||||
});
|
||||
|
||||
if (req.file) fs.unlinkSync(req.file.path);
|
||||
res.json(data);
|
||||
} catch (e) {
|
||||
console.error('Ошибка проксирования POST:', e.response?.data || e.message);
|
||||
res.status(500).json({ error: e.response?.data?.error || 'Ошибка добавления блюда' });
|
||||
}
|
||||
});
|
||||
|
||||
router.put('/items/:id', upload.single('image'), async (req, res) => {
|
||||
try {
|
||||
const formData = new FormData();
|
||||
|
||||
// Передаем текстовые поля
|
||||
Object.keys(req.body).forEach(key => {
|
||||
formData.append(key, req.body[key]);
|
||||
});
|
||||
|
||||
// Передаем файл, если он есть
|
||||
if (req.file) {
|
||||
formData.append('image', fs.createReadStream(req.file.path));
|
||||
}
|
||||
|
||||
const { data } = await axios.put(`${BACKEND_URL}/api/food/items/${req.params.id}`, formData, {
|
||||
headers: formData.getHeaders(),
|
||||
maxContentLength: Infinity,
|
||||
maxBodyLength: Infinity
|
||||
});
|
||||
|
||||
if (req.file) fs.unlinkSync(req.file.path);
|
||||
res.json(data);
|
||||
} catch (e) {
|
||||
console.error('Ошибка проксирования PUT:', e.response?.data || e.message);
|
||||
res.status(500).json({ error: e.response?.data?.error || 'Ошибка обновления блюда' });
|
||||
}
|
||||
});
|
||||
|
||||
router.delete('/items/:id', async (req, res) => {
|
||||
try {
|
||||
const { data } = await axios.delete(`${BACKEND_URL}/api/food/items/${req.params.id}`);
|
||||
res.json(data);
|
||||
} catch (e) {
|
||||
res.status(500).json({ error: 'Ошибка удаления блюда' });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user