/
Cooolprogrammers
/
web-nodejs-labs
Обзор
Документация
Войти
/
Cooolprogrammers
/
web-nodejs-labs
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
backend/src/routes/lab9/task3.js
68 строк
3 KB
darkvoid6@mail.ru
ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
18 дек 2025, 07:59
18 дек 2025, 07:59
f2c4f06
Код
Авторство
О чём код?
import productService from '../../services/lab9/product.service.js'; export default async function task3Routes(fastify, options) { // POST /api/lab9/task3/purchase - оформление покупки fastify.post('/purchase', async (request, reply) => { const { cart } = request.body; try { // Проверяем наличие всех товаров const availabilityCheck = await checkProductAvailability(fastify.pg, cart); if (!availabilityCheck.available) { return reply.code(400).send({ error: 'Недостаточно товара на складе', unavailableItems: availabilityCheck.unavailableItems }); } // Обновляем количество товаров await updateProductQuantities(fastify.pg, cart); return { success: true, message: 'Покупка успешно оформлена', purchasedItems: cart }; } catch (error) { return reply.code(500).send({ error: 'Ошибка при оформлении покупки: ' + error.message }); } }); // Проверка наличия товаров async function checkProductAvailability(db, cart) { const unavailableItems = []; for (const item of cart) { const product = await productService.getById(db, item.productId); if (!product || product.amount < item.quantity) { unavailableItems.push({ productId: item.productId, productTitle: product?.title || 'Неизвестный товар', requested: item.quantity, available: product?.amount || 0 }); } } return { available: unavailableItems.length === 0, unavailableItems }; } // Обновление количества товаров после покупки async function updateProductQuantities(db, cart) { for (const item of cart) { const product = await productService.getById(db, item.productId); if (product) { const newAmount = product.amount - item.quantity; await productService.updateAmount(db, item.productId, newAmount); } } } }