/
Cooolprogrammers
/
web-nodejs-labs
Обзор
Документация
Войти
/
Cooolprogrammers
/
web-nodejs-labs
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
backend/src/routes/lab10/task1.js
106 строк
3 KB
darkvoid6@mail.ru
ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
18 дек 2025, 07:59
18 дек 2025, 07:59
f2c4f06
Код
Авторство
О чём код?
// backend/src/routes/lab10/task1.js import task1Service from '../../services/lab10/task1.service.js'; export default async function task1Routes(fastify) { // ✅ Добавить категорию fastify.post('/categories', async (req, reply) => { const { name } = req.body; if (!name || name.length < 2) { return reply.code(400).send({ error: 'Некорректное имя категории' }); } const { rows } = await fastify.pg.query( 'INSERT INTO lab10.categories (name) VALUES ($1) RETURNING *', [name] ); return rows[0]; }); // ✅ Добавить товар fastify.post('/products', async (req, reply) => { const { title, price, amount, category_id, description } = req.body; if (!title || price == null || amount == null || !category_id) { return reply.code(400).send({ error: 'Заполните все поля' }); } const { rows } = await fastify.pg.query(` INSERT INTO lab10.products (title, price, amount, category_id, image) VALUES ($1, $2, $3, $4, $5) RETURNING * `, [ title, price, amount, category_id, null ]); return rows[0]; }); // ✅ Список заказов fastify.get('/orders', async (req, reply) => { const { rows } = await fastify.pg.query(` SELECT o.id, o.created_at, COALESCE(SUM(oi.total_price), 0) AS total_amount FROM lab10.orders o LEFT JOIN lab10.order_items oi ON o.id = oi.order_id GROUP BY o.id ORDER BY o.created_at DESC `); return rows; }); // ✅ Заказ по ID fastify.get('/orders/:id', async (req, reply) => { const id = req.params.id; const orderRes = await fastify.pg.query( `SELECT id, created_at FROM lab10.orders WHERE id = $1`, [id] ); if (!orderRes.rows.length) { return reply.code(404).send({ error: 'Заказ не найден' }); } const itemsRes = await fastify.pg.query(` SELECT oi.title, oi.price, oi.quantity, oi.total_price FROM lab10.order_items oi WHERE oi.order_id = $1 `, [id]); const total = itemsRes.rows.reduce((s, i) => s + Number(i.total_price || 0), 0); return { id: orderRes.rows[0].id, created_at: orderRes.rows[0].created_at, items: itemsRes.rows, total_amount: total }; }); // ✅ Товар по ID (для карточки товара) fastify.get('/product/:id', async (req, reply) => { const { rows } = await fastify.pg.query(` SELECT p.*, c.name AS category_title FROM lab10.products p LEFT JOIN lab10.categories c ON p.category_id = c.id WHERE p.id = $1 `, [req.params.id]); return rows[0] || null; }); }