prf/server/productsRouter.js
Norbi Peti 91f599645b
Routing/menü fejlesztés, SPA fix
- Logout hozzáadva
- Read only lista kijelentkezve
2023-05-07 21:58:00 +02:00

103 lines
2.7 KiB
JavaScript

const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const Product = mongoose.model('product');
const passport = require('passport');
function getProductData(product) {
return {name: product.name, price: product.price, description: product.description, id: product.id, _id: product._id};
}
async function getProduct(req, res, next) {
try {
const product = await Product.findById(req.params.id);
if (product == null) {
return res.status(404).json({ message: 'A termék nem található' });
}
res.product = product;
next();
} catch (error) {
return res.status(500).json({ message: error.message });
}
}
// GET /products - összes termék lekérdezése
router.get('/', async (req, res) => {
try {
const products = await Product.find();
res.status(200).json(products.map(product => getProductData(product)));
} catch (error) {
res.status(500).json({ message: error.message });
}
});
// GET /products/:id - egy termék lekérdezése az id alapján
router.get('/:id', getProduct, (req, res) => {
if (!req.isAuthenticated()) {
return res.status(403).json({ message: "Unauthenticated" });
}
res.json(getProductData(res.product));
});
// POST /products - új termék létrehozása
router.post('/', async (req, res) => {
if (!req.isAuthenticated()) {
return res.status(403).json({ message: "Unauthenticated" });
}
const product = new Product({
name: req.body.name,
price: req.body.price,
description: req.body.description,
id: req.body.id,
});
try {
const newProduct = await product.save();
res.status(201).json(newProduct);
} catch (error) {
res.status(400).json({ message: error.message });
}
});
// PATCH /products/:id - egy termék frissítése az id alapján
router.patch('/:id', getProduct, async (req, res) => {
if (!req.isAuthenticated()) {
return res.status(403).json({ message: "Unauthenticated" });
}
if (req.body.name != null) {
res.product.name = req.body.name;
}
if (req.body.price != null) {
res.product.price = req.body.price;
}
if (req.body.description != null) {
res.product.description = req.body.description;
}
if (req.body.id != null) {
res.product.id = req.body.id;
}
try {
const updatedProduct = await res.product.save();
res.json(updatedProduct);
} catch (error) {
res.status(400).json({ message: error.message });
}
});
// DELETE /products/:id - egy termék törlése az id alapján
router.delete('/:id', getProduct, async (req, res) => {
if (!req.isAuthenticated()) {
return res.status(403).json({ message: "Unauthenticated" });
}
try {
await res.product.remove();
res.json({ message: 'A termék sikeresen törölve!' });
} catch (error) {
res.status(500).json({ message: error.message });
}
});
module.exports = router